com.yahoo.storm.yarn.TestConfig.java Source code

Java tutorial

Introduction

Here is the source code for com.yahoo.storm.yarn.TestConfig.java

Source

/*
 * Copyright (c) 2013 Yahoo! Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. See accompanying LICENSE file.
 */
package com.yahoo.storm.yarn;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.yaml.snakeyaml.Yaml;

public class TestConfig {
    private static final Log LOG = LogFactory.getLog(TestConfig.class);

    private File yarn_site_xml;
    private File storm_conf_file;
    private String storm_home = null;

    synchronized File createYarnSiteConfig(Configuration yarn_conf) throws IOException {
        yarn_site_xml = new File("./target/conf/yarn-site.xml");
        yarn_site_xml.getParentFile().mkdirs();
        FileWriter writer = new FileWriter(yarn_site_xml);
        yarn_conf.writeXml(writer);
        writer.flush();
        writer.close();
        return yarn_site_xml;
    }

    @SuppressWarnings("rawtypes")
    synchronized File createConfigFile(Map storm_conf) throws IOException {
        storm_conf_file = new File("./conf/storm.yaml");
        storm_conf_file.getParentFile().mkdirs();
        Yaml yaml = new Yaml();
        FileWriter writer = new FileWriter(storm_conf_file);
        Util.rmNulls(storm_conf);
        yaml.dump(storm_conf, writer);
        writer.flush();
        writer.close();
        return storm_conf_file;
    }

    void cleanup() {
        if (storm_conf_file != null)
            deleteFolder(storm_conf_file.getParentFile());
        deleteFolder(new File(storm_home));
    }

    synchronized String stormHomePath() throws IOException {
        unzipFile("./lib/storm.zip");
        Runtime.getRuntime().exec("chmod +x " + storm_home + "/bin/storm");
        System.setProperty("storm.home", storm_home);
        return storm_home;
    }

    private void unzipFile(String filePath) {
        FileInputStream fis = null;
        ZipInputStream zipIs = null;
        ZipEntry zEntry = null;
        try {
            fis = new FileInputStream(filePath);
            zipIs = new ZipInputStream(new BufferedInputStream(fis));
            while ((zEntry = zipIs.getNextEntry()) != null) {
                try {
                    byte[] tmp = new byte[4 * 1024];
                    FileOutputStream fos = null;
                    String opFilePath = "lib/" + zEntry.getName();
                    if (zEntry.isDirectory()) {
                        LOG.debug("Create a folder " + opFilePath);
                        if (zEntry.getName().indexOf(Path.SEPARATOR) == (zEntry.getName().length() - 1))
                            storm_home = opFilePath.substring(0, opFilePath.length() - 1);
                        new File(opFilePath).mkdir();
                    } else {
                        LOG.debug("Extracting file to " + opFilePath);
                        fos = new FileOutputStream(opFilePath);
                        int size = 0;
                        while ((size = zipIs.read(tmp)) != -1) {
                            fos.write(tmp, 0, size);
                        }
                        fos.flush();
                        fos.close();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            zipIs.close();
        } catch (FileNotFoundException e) {
            LOG.warn(e.toString());
        } catch (IOException e) {
            LOG.warn(e.toString());
        }
        LOG.info("storm_home: " + storm_home);
    }

    private void deleteFolder(File file) {
        if (file.isDirectory()) {
            //directory is empty, then delete it
            if (file.list().length == 0) {
                file.delete();
            } else {
                //list all the directory contents
                String files[] = file.list();
                for (String temp : files) {
                    //construct the file structure
                    File fileDelete = new File(file, temp);
                    //recursive delete
                    deleteFolder(fileDelete);
                }

                //check the directory again, if empty then delete it
                if (file.list().length == 0) {
                    file.delete();
                }
            }
        } else {
            //if file, then delete it
            file.delete();
        }
    }
}