You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2011/04/09 02:48:39 UTC

svn commit: r1090500 - in /hbase/trunk: ./ src/main/java/org/apache/hadoop/hbase/coprocessor/ src/main/java/org/apache/hadoop/hbase/master/ src/main/java/org/apache/hadoop/hbase/regionserver/ src/main/java/org/apache/hadoop/hbase/regionserver/wal/

Author: apurtell
Date: Sat Apr  9 00:48:39 2011
New Revision: 1090500

URL: http://svn.apache.org/viewvc?rev=1090500&view=rev
Log:
HBASE-3624 Only one coprocessor of each priority can be loaded for a table

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Sat Apr  9 00:48:39 2011
@@ -69,6 +69,7 @@ Release 0.91.0 - Unreleased
                HMasterInterface and HMasterRegionInterface versions
    HBASE-3723  Major compact should be done when there is only one storefile
                and some keyvalue is outdated (Zhou Shuaifeng via Stack)
+   HBASE-3624  Only one coprocessor of each priority can be loaded for a table
 
   IMPROVEMENTS
    HBASE-3290  Max Compaction Size (Nicolas Spiegelberg via Stack)  

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java Sat Apr  9 00:48:39 2011
@@ -19,8 +19,6 @@ package org.apache.hadoop.hbase.coproces
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.client.HTableInterface;
-import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.hadoop.hbase.regionserver.RegionServerServices;
 
 /**
  * Coprocessor environment state.
@@ -39,6 +37,9 @@ public interface CoprocessorEnvironment 
   /** @return the priority assigned to the loaded coprocessor */
   public Coprocessor.Priority getPriority();
 
+  /** @return the load sequence number */
+  public int getLoadSequence();
+
   /**
    * @return an interface for accessing the given table
    * @throws IOException

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java Sat Apr  9 00:48:39 2011
@@ -61,6 +61,7 @@ public abstract class CoprocessorHost<E 
   protected Configuration conf;
   // unique file prefix to use for local copies of jars when classloading
   protected String pathPrefix;
+  protected volatile int loadSequence;
 
   public CoprocessorHost() {
     pathPrefix = UUID.randomUUID().toString();
@@ -195,7 +196,7 @@ public abstract class CoprocessorHost<E 
       throw new IOException(e);
     }
     // create the environment
-    E env = createEnvironment(implClass, impl, priority);
+    E env = createEnvironment(implClass, impl, priority, ++loadSequence);
     if (env instanceof Environment) {
       ((Environment)env).startup();
     }
@@ -206,7 +207,7 @@ public abstract class CoprocessorHost<E 
    * Called when a new Coprocessor class is loaded
    */
   public abstract E createEnvironment(Class<?> implClass, Coprocessor instance,
-      Coprocessor.Priority priority);
+      Coprocessor.Priority priority, int sequence);
 
   public void shutdown(CoprocessorEnvironment e) {
     if (e instanceof Environment) {
@@ -244,6 +245,11 @@ public abstract class CoprocessorHost<E 
       } else if (env1.getPriority().intValue() > env2.getPriority().intValue()) {
         return 1;
       }
+      if (env1.getLoadSequence() < env2.getLoadSequence()) {
+        return -1;
+      } else if (env1.getLoadSequence() > env2.getLoadSequence()) {
+        return 1;
+      }
       return 0;
     }
   }
@@ -436,6 +442,7 @@ public abstract class CoprocessorHost<E 
     /** Accounting for tables opened by the coprocessor */
     protected List<HTableInterface> openTables =
       Collections.synchronizedList(new ArrayList<HTableInterface>());
+    private int seq;
     static final ThreadLocal<Boolean> bypass = new ThreadLocal<Boolean>() {
       @Override protected Boolean initialValue() {
         return Boolean.FALSE;
@@ -452,10 +459,11 @@ public abstract class CoprocessorHost<E 
      * @param impl the coprocessor instance
      * @param priority chaining priority
      */
-    public Environment(final Coprocessor impl, Coprocessor.Priority priority) {
+    public Environment(final Coprocessor impl, Coprocessor.Priority priority, int seq) {
       this.impl = impl;
       this.priority = priority;
       this.state = Coprocessor.State.INSTALLED;
+      this.seq = seq;
     }
 
     /** Initialize the environment */
@@ -523,6 +531,11 @@ public abstract class CoprocessorHost<E 
       return priority;
     }
 
+    @Override
+    public int getLoadSequence() {
+      return seq;
+    }
+
     /** @return the coprocessor environment version */
     @Override
     public int getVersion() {

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java Sat Apr  9 00:48:39 2011
@@ -43,8 +43,8 @@ public class MasterCoprocessorHost
     private MasterServices masterServices;
 
     public MasterEnvironment(Class<?> implClass, Coprocessor impl,
-        Coprocessor.Priority priority, MasterServices services) {
-      super(impl, priority);
+        Coprocessor.Priority priority, int seq, MasterServices services) {
+      super(impl, priority, seq);
       this.masterServices = services;
     }
 
@@ -63,8 +63,8 @@ public class MasterCoprocessorHost
 
   @Override
   public MasterEnvironment createEnvironment(Class<?> implClass,
-      Coprocessor instance, Coprocessor.Priority priority) {
-    return new MasterEnvironment(implClass, instance, priority, masterServices);
+      Coprocessor instance, Coprocessor.Priority priority, int seq) {
+    return new MasterEnvironment(implClass, instance, priority, seq, masterServices);
   }
 
   /* Implementation of hooks for invoking MasterObservers */

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java Sat Apr  9 00:48:39 2011
@@ -67,9 +67,9 @@ public class RegionCoprocessorHost
      * @param priority chaining priority
      */
     public RegionEnvironment(final Coprocessor impl,
-        Coprocessor.Priority priority, final HRegion region,
+        final Coprocessor.Priority priority, final int seq, final HRegion region,
         final RegionServerServices services) {
-      super(impl, priority);
+      super(impl, priority, seq);
       this.region = region;
       this.rsServices = services;
     }
@@ -152,7 +152,7 @@ public class RegionCoprocessorHost
 
   @Override
   public RegionEnvironment createEnvironment(
-      Class<?> implClass, Coprocessor instance, Coprocessor.Priority priority) {
+      Class<?> implClass, Coprocessor instance, Coprocessor.Priority priority, int seq) {
     // Check if it's an Endpoint.
     // Due to current dynamic protocol design, Endpoint
     // uses a different way to be registered and executed.
@@ -165,7 +165,7 @@ public class RegionCoprocessorHost
       }
     }
 
-    return new RegionEnvironment(instance, priority, region, rsServices);
+    return new RegionEnvironment(instance, priority, seq, region, rsServices);
   }
 
   /**

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java?rev=1090500&r1=1090499&r2=1090500&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java Sat Apr  9 00:48:39 2011
@@ -23,13 +23,9 @@ package org.apache.hadoop.hbase.regionse
 
 import java.io.IOException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.coprocessor.*;
 import org.apache.hadoop.hbase.coprocessor.Coprocessor.Priority;
-import org.apache.hadoop.hbase.regionserver.RegionServerServices;
 import org.apache.hadoop.conf.Configuration;
 
 /**
@@ -39,8 +35,6 @@ import org.apache.hadoop.conf.Configurat
 public class WALCoprocessorHost
     extends CoprocessorHost<WALCoprocessorHost.WALEnvironment> {
   
-  private static final Log LOG = LogFactory.getLog(WALCoprocessorHost.class);
-
   /**
    * Encapsulation of the environment of each coprocessor
    */
@@ -58,10 +52,12 @@ public class WALCoprocessorHost
      * Constructor
      * @param impl the coprocessor instance
      * @param priority chaining priority
+     * @param seq load sequence
+     * @param hlog HLog
      */
     public WALEnvironment(Class<?> implClass, final Coprocessor impl,
-        Coprocessor.Priority priority, final HLog hlog) {
-      super(impl, priority);
+        final Coprocessor.Priority priority, final int seq, final HLog hlog) {
+      super(impl, priority, seq);
       this.wal = hlog;
     }
   }
@@ -81,9 +77,9 @@ public class WALCoprocessorHost
 
   @Override
   public WALEnvironment createEnvironment(Class<?> implClass,
-      Coprocessor instance, Priority priority) {
+      Coprocessor instance, Priority priority, int seq) {
     // TODO Auto-generated method stub
-    return new WALEnvironment(implClass, instance, priority, this.wal);
+    return new WALEnvironment(implClass, instance, priority, seq, this.wal);
   }
 
   /**