You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/03/04 05:28:59 UTC

svn commit: r1077558 - in /hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system: ./ process/

Author: omalley
Date: Fri Mar  4 04:28:58 2011
New Revision: 1077558

URL: http://svn.apache.org/viewvc?rev=1077558&view=rev
Log:
commit 8809b8d5778498385164128a90b733ccd61b953f
Author: Balaji Rajagopalan <ba...@yahoo-inc.com>
Date:   Wed Jul 21 18:11:25 2010 -0700

    MAPREDUCE-1889 from https://issues.apache.org/jira/secure/attachment/12449067/restartDaemon_y20.patch

Modified:
    hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/AbstractDaemonCluster.java
    hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/ClusterProcessManager.java
    hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/HadoopDaemonRemoteCluster.java
    hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/RemoteProcess.java

Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/AbstractDaemonCluster.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/AbstractDaemonCluster.java?rev=1077558&r1=1077557&r2=1077558&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/AbstractDaemonCluster.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/AbstractDaemonCluster.java Fri Mar  4 04:28:58 2011
@@ -48,6 +48,7 @@ public abstract class AbstractDaemonClus
   private Map<Enum<?>, List<AbstractDaemonClient>> daemons = 
     new LinkedHashMap<Enum<?>, List<AbstractDaemonClient>>();
   private String newConfDir = null;  
+  File localFolderObj = null;
   private static final  String CONF_HADOOP_LOCAL_DIR =
       "test.system.hdrc.hadoop.local.confdir"; 
   private static final  String CONF_HADOOP_MULTI_USER_LIST =
@@ -349,12 +350,8 @@ public abstract class AbstractDaemonClus
    */
   public void restartClusterWithNewConfig(Hashtable<String,?> props, 
       String configFile) throws IOException {
-
     String mapredConf = null;
-    String localDirPath = null;
-    File localFolderObj = null;
-    File xmlFileObj = null;
-    String confXMLFile = null;
+    String localDirPath = null; 
     Configuration initConf = new Configuration(getConf());
     Enumeration<String> e = props.keys();
     while (e.hasMoreElements()) {
@@ -362,15 +359,8 @@ public abstract class AbstractDaemonClus
       Object propValue = props.get(propKey);
       initConf.set(propKey,propValue.toString());
     }
-
-    localDirPath = getHadoopLocalConfDir();
-    localFolderObj = new File(localDirPath);
-    if (!localFolderObj.exists()) {
-      localFolderObj.mkdir();
-    }
-    confXMLFile = localDirPath + File.separator + configFile;
-    xmlFileObj = new File(confXMLFile);
-    initConf.writeXml(new FileOutputStream(xmlFileObj));
+    localDirPath = getHadoopLocalConfDir(); 
+    writeConfToFile(configFile,localDirPath,initConf);
     newConfDir = clusterManager.pushConfig(localDirPath);
     stop();
     waitForClusterToStop();
@@ -380,6 +370,42 @@ public abstract class AbstractDaemonClus
   }
   
   /**
+   * The method is used to only restart one daemon with new config
+   * and this gives a great flexibility in choosing which daemon the
+   * test wants to restarting instead of changing the config in all the 
+   * daemons. 
+   * @param client points to the daemon that will restarted.
+   * @param configFile the name of the config file
+   * @param conf the Configuration object
+   * @param role of remote process such as JT,TT,NN,DN
+   * @throws IOException thrown in case of any error 
+   */
+  public void restartDaemonWithNewConfig(AbstractDaemonClient client, 
+      String configFile, Configuration conf, Enum<?> role) throws IOException {    
+    String localDirPath = getHadoopLocalConfDir();
+    writeConfToFile(configFile,localDirPath,conf);
+    RemoteProcess daemon=clusterManager.getDaemonProcess(client.getHostName(), 
+        role);    
+    newConfDir = daemon.pushConfig(localDirPath);
+    daemon.kill();
+    waitForDaemonToStop(client);
+    daemon.start(newConfDir);
+    waitForDaemonToStart(client);    
+    localFolderObj.delete();
+  }
+  
+  private void writeConfToFile(String configFile, String localDirPath,
+      Configuration conf) throws IOException{      
+    localFolderObj = new File(localDirPath);
+    if (!localFolderObj.exists()) {
+      localFolderObj.mkdir();
+    }
+    String confXMLFile = localDirPath + File.separator + configFile;
+    File xmlFileObj = new File(confXMLFile);
+    conf.writeXml(new FileOutputStream(xmlFileObj));
+  }
+  
+  /**
    * It uses to restart the cluster with default configuration.<br/>
    * @throws IOException if an I/O error occurs.
    */
@@ -392,6 +418,21 @@ public abstract class AbstractDaemonClus
   }
   
   /**
+   * Restart only one daemon as opposed to all the daemons
+   * @param client points to the daemon that will restarted. 
+   * @param role  of remote process such as JT,TT,NN,DN 
+   * @throws IOException is thrown when restart fails
+   */
+  public void restart(AbstractDaemonClient client,Enum<?> role) throws IOException {
+    RemoteProcess daemon=clusterManager.getDaemonProcess(client.getHostName(), 
+        role);
+    daemon.kill();
+    waitForDaemonToStop(client);
+    daemon.start();
+    waitForDaemonToStart(client);
+  }
+  
+  /**
    * It uses to wait until the cluster is stopped.<br/>
    * @throws IOException if an I/O error occurs.
    */
@@ -405,7 +446,7 @@ public abstract class AbstractDaemonClus
         dmStop.start();
       }
     }
-
+    
     for (Thread daemonThread : chkDaemonStop){
       try {
         daemonThread.join();
@@ -438,6 +479,44 @@ public abstract class AbstractDaemonClus
       }
     }
   }
+  /**
+   * This will provide synchronization for the daemon to stop
+   * @param client identifies the daemon
+   * @throws IOException thrown if daemon does not stop 
+   */
+  public void waitForDaemonToStop(AbstractDaemonClient client) 
+      throws IOException {
+    while (true) {
+      try {
+        client.ping();
+        LOG.debug(client.getHostName() +" is waiting state to stop.");
+        waitFor(5000);
+      } catch (Exception exp) {
+        LOG.info("Daemon is : " + client.getHostName() + " stopped...");
+        break;
+      } 
+    }   
+  }
+  
+  /**
+   * This will provide synchronization for the daemon to start
+   * @param client identifies the daemon
+   * @throws IOException thrown if the daemon does not start
+   */
+  public void waitForDaemonToStart(AbstractDaemonClient client) 
+      throws IOException {
+    
+    while (true) {
+      try {
+        client.ping();
+        LOG.info("Daemon is : " + client.getHostName() + " pinging...");
+        break;
+      } catch (Exception exp) {
+        LOG.debug(client.getHostName() + " is waiting to come up.");
+        waitFor(5000);
+      }
+    }    
+  }
 
   /**
    * It waits for specified amount of time.

Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/ClusterProcessManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/ClusterProcessManager.java?rev=1077558&r1=1077557&r2=1077558&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/ClusterProcessManager.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/ClusterProcessManager.java Fri Mar  4 04:28:58 2011
@@ -46,6 +46,13 @@ public interface ClusterProcessManager {
    * Get the list of RemoteProcess handles of all the remote processes.
    */
   List<RemoteProcess> getAllProcesses();
+  
+  /**
+   * Get a RemoteProcess given the hostname
+   * @param The hostname for which the object instance needs to be obtained.
+   * @param The role of process example are JT,TT,DN,NN
+   */
+  RemoteProcess getDaemonProcess(String hostname, Enum<?> role);
 
   /**
    * Get all the roles this cluster's daemon processes have.

Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/HadoopDaemonRemoteCluster.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/HadoopDaemonRemoteCluster.java?rev=1077558&r1=1077557&r2=1077558&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/HadoopDaemonRemoteCluster.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/HadoopDaemonRemoteCluster.java Fri Mar  4 04:28:58 2011
@@ -141,6 +141,18 @@ public abstract class HadoopDaemonRemote
     }
     return hadoopNewConfDir;
   }
+  
+  @Override
+  public RemoteProcess getDaemonProcess(String hostname,Enum<?> role) {
+    RemoteProcess daemon=null;
+    for (RemoteProcess p : processes) {      
+      if(p.getHostName().equals(hostname) && p.getRole() == role){
+        daemon =p;
+        break;
+      }     
+    }
+    return daemon;
+  }
 
   public HadoopDaemonRemoteCluster(List<HadoopDaemonInfo> daemonInfos) {
     this.daemonInfos = daemonInfos;
@@ -324,9 +336,10 @@ public abstract class HadoopDaemonRemote
     }
 
     @Override
-    public void pushConfig(String localDir) throws IOException {
+    public String pushConfig(String localDir) throws IOException {
       createNewConfDir().execute();
       buildPushConfig(localDir, hadoopNewConfDir).execute();
+      return hadoopNewConfDir;
     }
 
     private ShellCommandExecutor buildCommandExecutor(String command,

Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/RemoteProcess.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/RemoteProcess.java?rev=1077558&r1=1077557&r2=1077558&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/RemoteProcess.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/test/system/process/RemoteProcess.java Fri Mar  4 04:28:58 2011
@@ -70,6 +70,7 @@ public interface RemoteProcess {
    * @param localDir The local directory which has config files that will be 
    * pushed to the remote location
    * @throws IOException is thrown if the pushConfig results in a error. 
+   * @return The newconfdir location will be returned
    */
-  void pushConfig(String localDir) throws IOException;
+  String pushConfig(String localDir) throws IOException;
 }