/* * 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(); } } }