You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2010/12/15 20:47:39 UTC

svn commit: r1049681 - in /hbase/branches/0.90: ./ src/main/java/org/apache/hadoop/hbase/ src/main/java/org/apache/hadoop/hbase/master/ src/main/java/org/apache/hadoop/hbase/replication/regionserver/ src/main/resources/

Author: jdcryans
Date: Wed Dec 15 19:47:39 2010
New Revision: 1049681

URL: http://svn.apache.org/viewvc?rev=1049681&view=rev
Log:
HBASE-3360  ReplicationLogCleaner is enabled by default in 0.90 -- causes NPE

Modified:
    hbase/branches/0.90/CHANGES.txt
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HConstants.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/LogCleaner.java
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java
    hbase/branches/0.90/src/main/resources/hbase-default.xml

Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1049681&r1=1049680&r2=1049681&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Wed Dec 15 19:47:39 2010
@@ -749,6 +749,7 @@ Release 0.90.0 - Unreleased
    HBASE-3356  Add more checks in replication if RS is stopped
    HBASE-3358  Recovered replication queue wait on themselves when terminating
    HBASE-3359  LogRoller not added as a WAL listener when replication is enabled
+   HBASE-3360  ReplicationLogCleaner is enabled by default in 0.90 -- causes NPE
 
 
   IMPROVEMENTS

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HConstants.java?rev=1049681&r1=1049680&r2=1049681&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HConstants.java Wed Dec 15 19:47:39 2010
@@ -361,6 +361,9 @@ public final class HConstants {
   /** HBCK special code name used as server name when manipulating ZK nodes */
   public static final String HBCK_CODE_NAME = "HBCKServerName";
 
+  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =
+      "hbase.master.logcleaner.plugins";
+
   private HConstants() {
     // Can't be instantiated with this ctor.
   }

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=1049681&r1=1049680&r2=1049681&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 Wed Dec 15 19:47:39 2010
@@ -73,6 +73,7 @@ import org.apache.hadoop.hbase.master.ha
 import org.apache.hadoop.hbase.master.handler.TableModifyFamilyHandler;
 import org.apache.hadoop.hbase.master.metrics.MasterMetrics;
 import org.apache.hadoop.hbase.regionserver.HRegion;
+import org.apache.hadoop.hbase.replication.regionserver.Replication;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.InfoServer;
 import org.apache.hadoop.hbase.util.Pair;
@@ -202,6 +203,8 @@ implements HMasterInterface, HMasterRegi
     // set the thread name now we have an address
     setName(MASTER + "-" + this.address);
 
+    Replication.decorateMasterConfiguration(this.conf);
+
     this.rpcServer.startThreads();
 
     // Hack! Maps DFSClient => Master for logs.  HDFS made this

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LogCleaner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LogCleaner.java?rev=1049681&r1=1049680&r2=1049681&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LogCleaner.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LogCleaner.java Wed Dec 15 19:47:39 2010
@@ -34,6 +34,8 @@ import org.apache.hadoop.hbase.RemoteExc
 import org.apache.hadoop.hbase.Stoppable;
 import org.apache.hadoop.hbase.regionserver.wal.HLog;
 
+import static org.apache.hadoop.hbase.HConstants.HBASE_MASTER_LOGCLEANER_PLUGINS;
+
 /**
  * This Chore, everytime it runs, will clear the wal logs in the old logs folder
  * that are deletable for each log cleaner in the chain, in order to limit the
@@ -79,7 +81,7 @@ public class LogCleaner extends Chore {
    * ReplicationLogCleaner and SnapshotLogCleaner.
    */
   private void initLogCleanersChain() {
-    String[] logCleaners = conf.getStrings("hbase.master.logcleaner.plugins");
+    String[] logCleaners = conf.getStrings(HBASE_MASTER_LOGCLEANER_PLUGINS);
     if (logCleaners != null) {
       for (String className : logCleaners) {
         LogCleanerDelegate logCleaner = newLogCleaner(className, conf);

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java?rev=1049681&r1=1049680&r2=1049681&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java Wed Dec 15 19:47:39 2010
@@ -27,7 +27,6 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.Server;
@@ -36,9 +35,14 @@ import org.apache.hadoop.hbase.regionser
 import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
 import org.apache.hadoop.hbase.regionserver.wal.WALObserver;
 import org.apache.hadoop.hbase.replication.ReplicationZookeeper;
+import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.zookeeper.KeeperException;
 
+import static org.apache.hadoop.hbase.HConstants.HBASE_MASTER_LOGCLEANER_PLUGINS;
+import static org.apache.hadoop.hbase.HConstants.REPLICATION_ENABLE_KEY;
+import static org.apache.hadoop.hbase.HConstants.REPLICATION_SCOPE_LOCAL;
+
 /**
  * Gateway to Replication.  Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.
  */
@@ -82,7 +86,7 @@ public class Replication implements WALO
    * @return True if replication is enabled.
    */
   public static boolean isReplication(final Configuration c) {
-    return c.getBoolean(HConstants.REPLICATION_ENABLE_KEY, false);
+    return c.getBoolean(REPLICATION_ENABLE_KEY, false);
   }
 
   /**
@@ -134,7 +138,7 @@ public class Replication implements WALO
     for (KeyValue kv : logEdit.getKeyValues()) {
       family = kv.getFamily();
       int scope = info.getTableDesc().getFamily(family).getScope();
-      if (scope != HConstants.REPLICATION_SCOPE_LOCAL &&
+      if (scope != REPLICATION_SCOPE_LOCAL &&
           !scopes.containsKey(family)) {
         scopes.put(family, scope);
       }
@@ -149,6 +153,22 @@ public class Replication implements WALO
     getReplicationManager().logRolled(p);
   }
 
+  /**
+   * This method modifies the master's configuration in order to inject
+   * replication-related features
+   * @param conf
+   */
+  public static void decorateMasterConfiguration(Configuration conf) {
+    if (!isReplication(conf)) {
+      return;
+    }
+    String plugins = conf.get(HBASE_MASTER_LOGCLEANER_PLUGINS);
+    if (!plugins.contains(ReplicationLogCleaner.class.toString())) {
+      conf.set(HBASE_MASTER_LOGCLEANER_PLUGINS,
+          plugins + "," + ReplicationLogCleaner.class.getCanonicalName());
+    }
+  }
+
   @Override
   public void logRollRequested() {
     // Not interested

Modified: hbase/branches/0.90/src/main/resources/hbase-default.xml
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/resources/hbase-default.xml?rev=1049681&r1=1049680&r2=1049681&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/resources/hbase-default.xml (original)
+++ hbase/branches/0.90/src/main/resources/hbase-default.xml Wed Dec 15 19:47:39 2010
@@ -290,7 +290,7 @@
   </property>
   <property>
     <name>hbase.master.logcleaner.plugins</name>
-    <value>org.apache.hadoop.hbase.master.TimeToLiveLogCleaner,org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner</value>
+    <value>org.apache.hadoop.hbase.master.TimeToLiveLogCleaner</value>
     <description>A comma-separated list of LogCleanerDelegate invoked by
     the LogsCleaner service. These WAL/HLog cleaners are called in order,
     so put the HLog cleaner that prunes the most HLog files in front. To