content: /*
  * The contents of this file are subject to the terms
  * of the Common Development and Distribution License
  * (the License). You may not use this file except in
  * compliance with the License.
  *
  * You can obtain a copy of the License at
  * http://www.sun.com/cddl/cddl.html or
  * install_dir/legal/LICENSE
  * See the License for the specific language governing
  * permission and limitations under the License.
  *
  * When distributing Covered Code, include this CDDL
  * Header Notice in each file and include the License file
  * at install_dir/legal/LICENSE.
  * If applicable, add the following below the CDDL Header,
  * with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * Copyright 2009 Sun Microsystems Inc. All Rights Reserved
  */
  
  package com.sun.hadoop.services;
  
  import com.sun.faban.common.Command;
  import com.sun.faban.harness.RunContext;
  import com.sun.faban.harness.services.ServiceContext;
  import com.sun.faban.harness.Context;
  
  import com.sun.faban.harness.Configure;
  import com.sun.faban.harness.Start;
  import com.sun.faban.harness.Stop;
  import com.sun.faban.harness.ParamRepository;
  import java.io.File;
  import java.io.IOException;
  
  import java.util.logging.Logger;
  
  /**
   *
   * @author Damien Cooke
   * This class manages the Hadoop service management
   * 
   */
  public class HadoopService
  {
      @Context public ServiceContext ctx;
      Logger logger = Logger.getLogger(HadoopService.class.getName());
      String hadoopServers[]; //this will be the master server
      private String runID;
      private ParamRepository params;
      private String hadoopBinPath;
      private String hadoopHome;
  
  
      @Configure public void configureHadoopService()
      {
          logger.info("ConfigureHadoopService starting");
  
          params = RunContext.getParamRepository();
          runID = RunContext.getRunId();
          hadoopHome = params.getParameter("hadoopConfig/hadoopHomeDir");
          hadoopBinPath = hadoopHome + File.separator + "bin" + File.separator;
  
          hadoopServers = new String[ctx.getHosts().length]; //determine how many we need (should only be 1)
          hadoopServers = ctx.getHosts();
  
          logger.info("ConfigureHadoopService done");
      }
      
  
      @Start public void startupHadoopService()
      {
          logger.info("startupHadoopService starting");
  
          
          try
          {
              logger.info("starting DFS");
              Command bench = new Command(hadoopBinPath + "start-dfs.sh");
              bench.setStreamHandling(Command.STDERR, Command.TRICKLE_LOG);
              //ctx.exec(bench);
              RunContext.exec(bench);
  
              logger.info("starting MAPRED");
              bench = new Command(hadoopBinPath + "start-mapred.sh");
              bench.setStreamHandling(Command.STDERR, Command.TRICKLE_LOG);
              //ctx.exec(bench);
              RunContext.exec(bench);
              logger.info("startupHadoopService done");
  
          }catch(InterruptedException ie)
          {
              logger.warning("startupHadoopService not starting: " +ie.getMessage());
  
          }catch(IOException ioe)
          {
              logger.warning("startupHadoopService not starting: " +ioe.getMessage());
          }
  
          
      }
  
      @Stop public void shutdownHadoopService()
      {
          try
          {
              logger.info("shutdownHadoopService starting");
              logger.info("Stopping RIG if it is running");
              Command bench = new Command(hadoopBinPath + "stop-all.sh");
              bench.setStreamHandling(Command.STDERR, Command.TRICKLE_LOG);
              //ctx.exec(bench);
              RunContext.exec(bench);
              logger.info("shutdownHadoopService done");
              
          }catch(InterruptedException ie)
          {
              logger.warning("shutdownHadoopService not stopping: " +ie.getMessage());
  
          }catch(IOException ioe)
          {
              logger.warning("shutdownHadoopService not stopping: " +ioe.getMessage() );
          }
          
      }
  
  }
  