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);
}
/**