You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2012/01/14 12:09:57 UTC

svn commit: r1231480 - in /hbase/branches/0.90: ./ src/main/java/org/apache/hadoop/hbase/master/

Author: tedyu
Date: Sat Jan 14 11:09:56 2012
New Revision: 1231480

URL: http://svn.apache.org/viewvc?rev=1231480&view=rev
Log:
HBASE-5179 Revert - Jinchao is evaluating test case which may show .META. data loss

Modified:
    hbase/branches/0.90/CHANGES.txt
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java

Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Sat Jan 14 11:09:56 2012
@@ -24,8 +24,6 @@ Release 0.90.6 - Unreleased
    HBASE-5160  Backport HBASE-4397 - -ROOT-, .META. tables stay offline for too long in 
                recovery phase after all RSs are shutdown at the same time (Ram)
    HBASE-5160  Addendum adding the removed method in AssignmentManager (Ram)
-   HBASE-5179  Concurrent processing of processFaileOver and ServerShutdownHandler may cause region to
-               be assigned before log splitting is completed, causing data loss (Chunhui)
 
   IMPROVEMENT
    HBASE-5102  Change the default value of the property "hbase.connection.per.config" to false in

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Sat Jan 14 11:09:56 2012
@@ -193,13 +193,11 @@ public class AssignmentManager extends Z
   /**
    * Handle failover.  Restore state from META and ZK.  Handle any regions in
    * transition.  Presumes <code>.META.</code> and <code>-ROOT-</code> deployed.
-   * @param onlineServers onlined servers when master start
    * @throws KeeperException
    * @throws IOException
    * @throws InterruptedException 
    */
-  void processFailover(final Set<String> onlineServers)
-  throws KeeperException, IOException, InterruptedException {
+  void processFailover() throws KeeperException, IOException, InterruptedException {
     // Concurrency note: In the below the accesses on regionsInTransition are
     // outside of a synchronization block where usually all accesses to RIT are
     // synchronized.  The presumption is that in this case it is safe since this
@@ -220,7 +218,7 @@ public class AssignmentManager extends Z
     // Scan META to build list of existing regions, servers, and assignment
     // Returns servers who have not checked in (assumed dead) and their regions
     Map<String, List<Pair<HRegionInfo, Result>>> deadServers =
-      rebuildUserRegions(onlineServers);
+      rebuildUserRegions();
     // Process list of dead servers; note this will add regions to the RIT.
     // processRegionsInTransition will read them and assign them out.
     processDeadServers(deadServers);
@@ -1563,15 +1561,12 @@ public class AssignmentManager extends Z
    * <p>
    * Returns a map of servers that are not found to be online and the regions
    * they were hosting.
-   * @param onlineServers if one region's location belongs to onlineServers, it
-   *          doesn't need to be assigned
    * @return map of servers not online to their assigned regions, as stored
    *         in META
    * @throws IOException
  * @throws KeeperException 
    */
-  private Map<String, List<Pair<HRegionInfo,Result>>> rebuildUserRegions(
-      final Set<String> onlineServers)
+  private Map<String, List<Pair<HRegionInfo,Result>>> rebuildUserRegions()
   throws IOException, KeeperException {
     // Region assignment from META
     List<Result> results = MetaReader.fullScanOfResults(catalogTracker);
@@ -1598,7 +1593,7 @@ public class AssignmentManager extends Z
         if (checkIfRegionBelongsToDisabling(regionInfo)) {
           disablingTables.add(disablingTableName);
         }
-      } else if (!onlineServers.contains(regionLocation.getServerName())) {
+      } else if (!serverManager.isServerOnline(regionLocation.getServerName())) {
         // Region is located on a server that isn't online
         List<Pair<HRegionInfo,Result>> offlineRegions =
           offlineServers.get(regionLocation.getServerName());

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java Sat Jan 14 11:09:56 2012
@@ -22,14 +22,15 @@ package org.apache.hadoop.hbase.master;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.hadoop.hbase.HServerInfo;
 
 /**
- * Class to hold dead servers list, utility querying dead server list and the
- * dead servers being processed by the ServerShutdownHandler.
+ * Class to hold dead servers list and utility querying dead server list.
  */
 public class DeadServer implements Set<String> {
   /**
@@ -40,11 +41,7 @@ public class DeadServer implements Set<S
    * because by then, its regions have probably been reassigned.
    */
   private final Set<String> deadServers = new HashSet<String>();
-  /**
-   * Set of dead servers under processing by the ServerShutdownHander.
-   */
-  private final Set<String> deadServersUnderProcessing = new HashSet<String>();
-  
+
   /** Maximum number of dead servers to keep track of */
   private final int maxDeadServers;
 
@@ -114,22 +111,13 @@ public class DeadServer implements Set<S
     return clone;
   }
 
-  synchronized Set<String> getDeadServersBeingProcessed() {
-    Set<String> clone = new HashSet<String>(
-        this.deadServersUnderProcessing.size());
-    clone.addAll(this.deadServersUnderProcessing);
-    return clone;
-  }
-  
   public synchronized boolean add(String e) {
     this.numProcessing++;
-    deadServersUnderProcessing.add(e);
     return deadServers.add(e);
   }
 
   public synchronized void finish(String e) {
     this.numProcessing--;
-    deadServersUnderProcessing.remove(e);
   }
 
   public synchronized int size() {

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Sat Jan 14 11:09:56 2012
@@ -25,10 +25,8 @@ import java.lang.reflect.InvocationTarge
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.logging.Log;
@@ -53,6 +51,7 @@ import org.apache.hadoop.hbase.UnknownRe
 import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
 import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.MetaScanner;
 import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
 import org.apache.hadoop.hbase.client.Result;
@@ -375,16 +374,10 @@ implements HMasterInterface, HMasterRegi
 
     // Wait for region servers to report in.  Returns count of regions.
     int regionCount = this.serverManager.waitForRegionServers();
-    
-    Set<String> knownServers = new HashSet<String>();
-    knownServers.addAll(serverManager.getOnlineServers().keySet());
-    if (this.serverManager.areDeadServersInProgress()) {
-      // Dead servers are processing, their logs would be split by
-      // ServerShutdownHandler
-      knownServers.addAll(serverManager.getDeadServersBeingProcessed());
-    }
+
     // TODO: Should do this in background rather than block master startup
-    this.fileSystemManager.splitLogAfterStartup(knownServers);
+    this.fileSystemManager.
+      splitLogAfterStartup(this.serverManager.getOnlineServers());
 
     // Make sure root and meta assigned before proceeding.
     assignRootAndMeta();
@@ -400,7 +393,7 @@ implements HMasterInterface, HMasterRegi
       this.assignmentManager.assignAllUserRegions();
     } else {
       LOG.info("Master startup proceeding: master failover");
-      this.assignmentManager.processFailover(knownServers);
+      this.assignmentManager.processFailover();
     }
 
     // Start balancer and meta catalog janitor after meta and regions have

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java Sat Jan 14 11:09:56 2012
@@ -20,7 +20,7 @@
 package org.apache.hadoop.hbase.master;
 
 import java.io.IOException;
-import java.util.Set;
+import java.util.Map;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -155,7 +155,7 @@ public class MasterFileSystem {
    * @param onlineServers Map of online servers keyed by
    * {@link HServerInfo#getServerName()}
    */
-  void splitLogAfterStartup(final Set<String> onlineServers) {
+  void splitLogAfterStartup(final Map<String, HServerInfo> onlineServers) {
     Path logsDirPath = new Path(this.rootdir, HConstants.HREGION_LOGDIR_NAME);
     try {
       if (!this.fs.exists(logsDirPath)) {
@@ -176,7 +176,7 @@ public class MasterFileSystem {
     }
     for (FileStatus status : logFolders) {
       String serverName = status.getPath().getName();
-      if (!onlineServers.contains(serverName)) {
+      if (onlineServers.get(serverName) == null) {
         LOG.info("Log folder " + status.getPath() + " doesn't belong " +
           "to a known region server, splitting");
         splitLog(serverName);

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1231480&r1=1231479&r2=1231480&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java Sat Jan 14 11:09:56 2012
@@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.ipc.HRegi
 import org.apache.hadoop.hbase.master.handler.MetaServerShutdownHandler;
 import org.apache.hadoop.hbase.master.handler.ServerShutdownHandler;
 import org.apache.hadoop.hbase.master.metrics.MasterMetrics;
+import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;
 
 /**
  * The ServerManager class manages info about region servers - HServerInfo,
@@ -419,22 +420,11 @@ public class ServerManager {
     }
   }
 
-  /**
-   * @return Set of known dead servers.
-   */
   public Set<String> getDeadServers() {
     return this.deadservers.clone();
   }
 
   /**
-   * @return Set of dead servers which are being processed by the
-   *         ServerShutdownHander.
-   */
-  public Set<String> getDeadServersBeingProcessed() {
-    return this.deadservers.getDeadServersBeingProcessed();
-  }
-
-  /**
    * Checks if any dead servers are currently in progress.
    * @return true if any RS are being processed as dead, false if not
    */