hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject svn commit: r978801 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
Date Sat, 24 Jul 2010 05:08:21 GMT
Author: stack
Date: Sat Jul 24 05:08:21 2010
New Revision: 978801

URL: http://svn.apache.org/viewvc?rev=978801&view=rev
Log:
HBASE-2874 Unnecessary double-synchronization in ZooKeeperWrapper

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=978801&r1=978800&r2=978801&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Sat Jul 24 05:08:21 2010
@@ -799,6 +799,8 @@ Release 0.21.0 - Unreleased
    HBASE-2873  Minor clean up in basescanner; fix a log and make deletes of
                region processing run in order
    HBASE-2830  NotServingRegionException shouldn't log a stack trace
+   HBASE-2874  Unnecessary double-synchronization in ZooKeeperWrapper
+               (Benoît Sigoure via Stack)
 
   NEW FEATURES
    HBASE-1961  HBase EC2 scripts

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=978801&r1=978800&r2=978801&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java Sat
Jul 24 05:08:21 2010
@@ -58,39 +58,39 @@ import org.apache.zookeeper.data.Stat;
  * This class provides methods to:
  * - read/write/delete the root region location in ZooKeeper.
  * - set/check out of safe mode flag.
- * 
+ *
  * ------------------------------------------
  * The following STATIC ZNodes are created:
  * ------------------------------------------
- * - parentZNode     : All the HBase directories are hosted under this parent 
+ * - parentZNode     : All the HBase directories are hosted under this parent
  *                     node, default = "/hbase"
- * - rsZNode         : This is the directory where the RS's create ephemeral 
- *                     nodes. The master watches these nodes, and their expiry 
+ * - rsZNode         : This is the directory where the RS's create ephemeral
+ *                     nodes. The master watches these nodes, and their expiry
  *                     indicates RS death. The default location is "/hbase/rs"
- * 
+ *
  * ------------------------------------------
  * The following DYNAMIC ZNodes are created:
  * ------------------------------------------
  * - rootRegionZNode     : Specifies the RS hosting root.
- * - masterElectionZNode : ZNode used for election of the primary master when 
- *                         there are secondaries. All the masters race to write 
- *                         their addresses into this location, the one that 
+ * - masterElectionZNode : ZNode used for election of the primary master when
+ *                         there are secondaries. All the masters race to write
+ *                         their addresses into this location, the one that
  *                         succeeds is the primary. Others block.
- * - clusterStateZNode   : Determines if the cluster is running. Its default 
- *                         location is "/hbase/shutdown". It always has a value 
- *                         of "up". If present with the valus, cluster is up 
- *                         and running. If deleted, the cluster is shutting 
+ * - clusterStateZNode   : Determines if the cluster is running. Its default
+ *                         location is "/hbase/shutdown". It always has a value
+ *                         of "up". If present with the valus, cluster is up
+ *                         and running. If deleted, the cluster is shutting
  *                         down.
- * - rgnsInTransitZNode  : All the nodes under this node are names of regions 
- *                         in transition. The first byte of the data for each 
- *                         of these nodes is the event type. This is used to 
+ * - rgnsInTransitZNode  : All the nodes under this node are names of regions
+ *                         in transition. The first byte of the data for each
+ *                         of these nodes is the event type. This is used to
  *                         deserialize the rest of the data.
  */
 public class ZooKeeperWrapper implements Watcher {
   protected static final Log LOG = LogFactory.getLog(ZooKeeperWrapper.class);
 
   // instances of the watcher
-  private static Map<String,ZooKeeperWrapper> INSTANCES = 
+  private static Map<String,ZooKeeperWrapper> INSTANCES =
     new HashMap<String,ZooKeeperWrapper>();
   // lock for ensuring a singleton per instance type
   private static Lock createLock = new ReentrantLock();
@@ -112,13 +112,13 @@ public class ZooKeeperWrapper implements
    * Specifies the RS hosting root
    */
   private final String rootRegionZNode;
-  /* 
-   * This is the directory where the RS's create ephemeral nodes. The master 
-   * watches these nodes, and their expiry indicates RS death. 
+  /*
+   * This is the directory where the RS's create ephemeral nodes. The master
+   * watches these nodes, and their expiry indicates RS death.
    */
   private final String rsZNode;
   /*
-   * ZNode used for election of the primary master when there are secondaries. 
+   * ZNode used for election of the primary master when there are secondaries.
    */
   private final String masterElectionZNode;
   /*
@@ -127,14 +127,14 @@ public class ZooKeeperWrapper implements
   public final String clusterStateZNode;
   /*
    * Regions that are in transition
-   */  
+   */
   private final String rgnsInTransitZNode;
   /*
    * List of ZNodes in the unassgined region that are already being watched
    */
   private Set<String> unassignedZNodesWatched = new HashSet<String>();
 
-  private List<Watcher> listeners = Collections.synchronizedList(new ArrayList<Watcher>());
+  private List<Watcher> listeners = new ArrayList<Watcher>();
 
   // return the singleton given the name of the instance
   public static ZooKeeperWrapper getInstance(Configuration conf, String name) {
@@ -185,7 +185,7 @@ public class ZooKeeperWrapper implements
     }
     sessionTimeout = conf.getInt("zookeeper.session.timeout", 60 * 1000);
     reconnectToZk();
-    
+
     parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
 
     String rootServerZNodeName = conf.get("zookeeper.znode.rootserver", "root-region-server");
@@ -200,7 +200,7 @@ public class ZooKeeperWrapper implements
     masterElectionZNode = getZNode(parentZNode, masterAddressZNodeName);
     clusterStateZNode   = getZNode(parentZNode, stateZNodeName);
   }
-  
+
   public void reconnectToZk() throws IOException {
     try {
       LOG.info("Reconnecting to zookeeper");
@@ -216,7 +216,7 @@ public class ZooKeeperWrapper implements
     } catch (InterruptedException e) {
       LOG.error("<" + instanceName + ">" + "Error closing ZK connection: " + e);
       throw new IOException(e);
-    }    
+    }
   }
 
   public synchronized void registerListener(Watcher watcher) {
@@ -748,11 +748,11 @@ public class ZooKeeperWrapper implements
       LOG.warn("<" + instanceName + ">" + "Failed to delete " + rsZNode + " znodes
in ZooKeeper: " + e);
     }
   }
-  
+
   /**
    * @return the number of region server znodes in the RS directory
    */
-  public int getRSDirectoryCount() { 
+  public int getRSDirectoryCount() {
     Stat stat = null;
     try {
       stat = zooKeeper.exists(rsZNode, false);
@@ -1072,19 +1072,19 @@ public class ZooKeeperWrapper implements
         throw new IOException(e);
       }
     }
-  
+
   /**
-   * Given a region name and some data, this method creates a new the region 
-   * znode data under the UNASSGINED znode with the data passed in. This method 
+   * Given a region name and some data, this method creates a new the region
+   * znode data under the UNASSGINED znode with the data passed in. This method
    * will not update data for existing znodes.
-   * 
+   *
    * @param regionName - encoded name of the region
    * @param data - new serialized data to update the region znode
    */
   private void createUnassignedRegion(String regionName, byte[] data) {
     String znode = getZNode(getRegionInTransitionZNode(), regionName);
     if(LOG.isDebugEnabled()) {
-      // check if this node already exists - 
+      // check if this node already exists -
       //   - it should not exist
       //   - if it does, it should be in the CLOSED state
       if(exists(znode, true)) {
@@ -1096,7 +1096,7 @@ public class ZooKeeperWrapper implements
           LOG.error("Error reading data for " + znode);
         }
         if(oldData == null) {
-          LOG.debug("While creating UNASSIGNED region " + regionName + " exists with no data"
);          
+          LOG.debug("While creating UNASSIGNED region " + regionName + " exists with no data"
);
         }
         else {
           LOG.debug("While creating UNASSIGNED region " + regionName + " exists, state =
" + (HBaseEventType.fromByte(oldData[0])));
@@ -1104,7 +1104,7 @@ public class ZooKeeperWrapper implements
       }
       else {
         if(data == null) {
-          LOG.debug("Creating UNASSIGNED region " + regionName + " with no data" );     
    
+          LOG.debug("Creating UNASSIGNED region " + regionName + " with no data" );
         }
         else {
           LOG.debug("Creating UNASSIGNED region " + regionName + " in state = " + (HBaseEventType.fromByte(data[0])));
@@ -1118,10 +1118,10 @@ public class ZooKeeperWrapper implements
   }
 
   /**
-   * Given a region name and some data, this method updates the region znode 
-   * data under the UNASSGINED znode with the latest data. This method will 
+   * Given a region name and some data, this method updates the region znode
+   * data under the UNASSGINED znode with the latest data. This method will
    * update the znode data only if it already exists.
-   * 
+   *
    * @param regionName - encoded name of the region
    * @param data - new serialized data to update the region znode
    */
@@ -1132,7 +1132,7 @@ public class ZooKeeperWrapper implements
       LOG.error("Cannot update " + znode + " - node does not exist" );
       return;
     }
-    
+
     Stat stat = new Stat();
     byte[] oldData = null;
     try {
@@ -1174,10 +1174,10 @@ public class ZooKeeperWrapper implements
   }
 
   /**
-   * This method will create a new region in transition entry in ZK with the 
-   * speficied data if none exists. If one already exists, it will update the 
+   * This method will create a new region in transition entry in ZK with the
+   * speficied data if none exists. If one already exists, it will update the
    * data with whatever is passed in.
-   * 
+   *
    * @param regionName - encoded name of the region
    * @param data - serialized data for the region znode
    */
@@ -1228,8 +1228,8 @@ public class ZooKeeperWrapper implements
   }
 
   /**
-   * Atomically adds a watch and reads data from the unwatched znodes in the 
-   * UNASSGINED region. This works because the master is the only person 
+   * Atomically adds a watch and reads data from the unwatched znodes in the
+   * UNASSGINED region. This works because the master is the only person
    * deleting nodes.
    * @param znode
    * @return
@@ -1258,22 +1258,22 @@ public class ZooKeeperWrapper implements
     }
     return newNodes;
   }
-  
+
   public static class ZNodePathAndData {
     private String zNodePath;
     private byte[] data;
-    
+
     public ZNodePathAndData(String zNodePath, byte[] data) {
       this.zNodePath = zNodePath;
       this.data = data;
     }
-    
+
     public String getzNodePath() {
       return zNodePath;
     }
     public byte[] getData() {
       return data;
     }
-    
+
   }
 }



Mime
View raw message