Author: stack
Date: Thu Feb 10 20:12:19 2011
New Revision: 1069551
URL: http://svn.apache.org/viewvc?rev=1069551&view=rev
Log:
HBASE-3522 Unbundle our RPC versioning; rather than a global for all 4
Interfaces -- region, master, region to master, and coprocesssors -- instead
version each individually
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java
Modified: hbase/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Feb 10 20:12:19 2011
@@ -69,6 +69,9 @@ Release 0.91.0 - Unreleased
HBASE-3305 Allow round-robin distribution for table created with
multiple regions (ted yu via jgray)
HBASE-3496 HFile CLI Improvements
+ HBASE-3522 Unbundle our RPC versioning; rather than a global for all 4
+ Interfaces -- region, master, region to master, and
+ coprocesssors -- instead version each individually
NEW FEATURES
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
Thu Feb 10 20:12:19 2011
@@ -349,7 +349,7 @@ public class HConnectionManager {
}
HMasterInterface tryMaster = (HMasterInterface)HBaseRPC.getProxy(
- HMasterInterface.class, HBaseRPCProtocolVersion.versionID,
+ HMasterInterface.class, HMasterInterface.VERSION,
masterLocation.getInetSocketAddress(), this.conf,
this.rpcTimeout);
if (tryMaster.isMasterRunning()) {
@@ -945,7 +945,7 @@ public class HConnectionManager {
if (server == null) { // Get a connection
try {
server = (HRegionInterface)HBaseRPC.waitForProxy(
- serverInterfaceClass, HBaseRPCProtocolVersion.versionID,
+ serverInterfaceClass, HRegionInterface.VERSION,
regionServer.getInetSocketAddress(), this.conf,
this.maxRPCAttempts, this.rpcTimeout, this.rpcTimeout);
} catch (RemoteException e) {
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java
Thu Feb 10 20:12:19 2011
@@ -19,8 +19,7 @@ package org.apache.hadoop.hbase.coproces
import java.io.IOException;
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
-import org.apache.hadoop.hbase.ipc.HBaseRPCProtocolVersion;
-import org.apache.hadoop.hbase.regionserver.HRegion;
+import org.apache.hadoop.ipc.VersionedProtocol;
/**
* This abstract class provides default implementation of an Endpoint.
@@ -33,15 +32,17 @@ import org.apache.hadoop.hbase.regionser
* the region related resource, i.e., CoprocessorEnvironment.
*/
public abstract class BaseEndpointCoprocessor implements Coprocessor,
- CoprocessorProtocol {
- private CoprocessorEnvironment env;
-
+ CoprocessorProtocol, VersionedProtocol {
/**
- * @param e Coprocessor environment.
+ * This Interfaces' version. Version changes when the Interface changes.
*/
- private void setEnvironment(CoprocessorEnvironment e) {
- env = e;
- }
+ // All HBase Interfaces used derive from HBaseRPCProtocolVersion. It
+ // maintained a single global version number on all HBase Interfaces. This
+ // meant all HBase RPC was broke though only one of the three RPC Interfaces
+ // had changed. This has since been undone.
+ public static final long VERSION = 28L;
+
+ private CoprocessorEnvironment env;
/**
* @return env Coprocessor environment.
@@ -59,7 +60,8 @@ public abstract class BaseEndpointCoproc
public void stop(CoprocessorEnvironment env) { }
@Override
- public long getProtocolVersion(String protocol, long clientVersion) throws
IOException {
- return HBaseRPCProtocolVersion.versionID;
+ public long getProtocolVersion(String protocol, long clientVersion)
+ throws IOException {
+ return VERSION;
}
}
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
Thu Feb 10 20:12:19 2011
@@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.ipc;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.ipc.VersionedProtocol;
import org.apache.hadoop.metrics.MetricsContext;
import org.apache.hadoop.metrics.MetricsRecord;
import org.apache.hadoop.metrics.MetricsUtil;
@@ -79,7 +80,7 @@ public class HBaseRpcMetrics implements
//public Map <String, MetricsTimeVaryingRate> metricsList =
Collections.synchronizedMap(new HashMap<String, MetricsTimeVaryingRate>());
- private void initMethods(Class<? extends HBaseRPCProtocolVersion> protocol) {
+ private void initMethods(Class<? extends VersionedProtocol> protocol) {
for (Method m : protocol.getDeclaredMethods()) {
if (get(m.getName()) == null)
create(m.getName());
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
Thu Feb 10 20:12:19 2011
@@ -25,6 +25,7 @@ import org.apache.hadoop.hbase.ClusterSt
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.UnknownRegionException;
+import org.apache.hadoop.ipc.VersionedProtocol;
/**
* Clients interact with the HMasterInterface to gain access to meta-level
@@ -35,7 +36,15 @@ import org.apache.hadoop.hbase.UnknownRe
* number in HBaseRPCProtocolVersion
*
*/
-public interface HMasterInterface extends HBaseRPCProtocolVersion {
+public interface HMasterInterface extends VersionedProtocol {
+ /**
+ * This Interfaces' version. Version changes when the Interface changes.
+ */
+ // All HBase Interfaces used derive from HBaseRPCProtocolVersion. It
+ // maintained a single global version number on all HBase Interfaces. This
+ // meant all HBase RPC was broke though only one of the three RPC Interfaces
+ // had changed. This has since been undone.
+ public static final long VERSION = 28L;
/** @return true if master is available */
public boolean isMasterRunning();
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java
Thu Feb 10 20:12:19 2011
@@ -23,6 +23,7 @@ import org.apache.hadoop.hbase.HMsg;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.io.MapWritable;
+import org.apache.hadoop.ipc.VersionedProtocol;
import java.io.IOException;
@@ -35,7 +36,15 @@ import java.io.IOException;
* number in HBaseRPCProtocolVersion
*
*/
-public interface HMasterRegionInterface extends HBaseRPCProtocolVersion {
+public interface HMasterRegionInterface extends VersionedProtocol {
+ /**
+ * This Interfaces' version. Version changes when the Interface changes.
+ */
+ // All HBase Interfaces used derive from HBaseRPCProtocolVersion. It
+ // maintained a single global version number on all HBase Interfaces. This
+ // meant all HBase RPC was broke though only one of the three RPC Interfaces
+ // had changed. This has since been undone.
+ public static final long VERSION = 28L;
/**
* Called when a region server first starts
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
Thu Feb 10 20:12:19 2011
@@ -22,7 +22,6 @@ package org.apache.hadoop.hbase.ipc;
import java.io.IOException;
import java.net.ConnectException;
import java.util.List;
-import java.util.NavigableSet;
import org.apache.hadoop.hbase.Abortable;
import org.apache.hadoop.hbase.HRegionInfo;
@@ -30,8 +29,6 @@ import org.apache.hadoop.hbase.HServerIn
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.Stoppable;
import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.coprocessor.Exec;
-import org.apache.hadoop.hbase.client.coprocessor.ExecResult;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Increment;
import org.apache.hadoop.hbase.client.MultiAction;
@@ -41,8 +38,11 @@ import org.apache.hadoop.hbase.client.Mu
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.client.coprocessor.Exec;
+import org.apache.hadoop.hbase.client.coprocessor.ExecResult;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.ipc.RemoteException;
+import org.apache.hadoop.ipc.VersionedProtocol;
/**
* Clients interact with HRegionServers using a handle to the HRegionInterface.
@@ -50,7 +50,16 @@ import org.apache.hadoop.ipc.RemoteExcep
* <p>NOTE: if you change the interface, you must change the RPC version
* number in HBaseRPCProtocolVersion
*/
-public interface HRegionInterface extends HBaseRPCProtocolVersion, Stoppable,
Abortable {
+public interface HRegionInterface extends VersionedProtocol, Stoppable,
Abortable {
+ /**
+ * This Interfaces' version. Version changes when the Interface changes.
+ */
+ // All HBase Interfaces used derive from HBaseRPCProtocolVersion. It
+ // maintained a single global version number on all HBase Interfaces. This
+ // meant all HBase RPC was broke though only one of the three RPC Interfaces
+ // had changed. This has since been undone.
+ public static final long VERSION = 28L;
+
/**
* Get metainfo about an HRegion
*
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Thu
Feb 10 20:12:19 2011
@@ -60,7 +60,6 @@ import org.apache.hadoop.hbase.client.Me
import org.apache.hadoop.hbase.executor.ExecutorService;
import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorType;
import org.apache.hadoop.hbase.ipc.HBaseRPC;
-import org.apache.hadoop.hbase.ipc.HBaseRPCProtocolVersion;
import org.apache.hadoop.hbase.ipc.HBaseServer;
import org.apache.hadoop.hbase.ipc.HMasterInterface;
import org.apache.hadoop.hbase.ipc.HMasterRegionInterface;
@@ -472,7 +471,7 @@ implements HMasterInterface, HMasterRegi
}
public long getProtocolVersion(String protocol, long clientVersion) {
- return HBaseRPCProtocolVersion.versionID;
+ return HMasterInterface.VERSION;
}
/** @return InfoServer object. Maybe null.*/
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
Thu Feb 10 20:12:19 2011
@@ -101,7 +101,6 @@ import org.apache.hadoop.hbase.io.hfile.
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
import org.apache.hadoop.hbase.ipc.HBaseRPC;
import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;
-import org.apache.hadoop.hbase.ipc.HBaseRPCProtocolVersion;
import org.apache.hadoop.hbase.ipc.HBaseRpcMetrics;
import org.apache.hadoop.hbase.ipc.HMasterRegionInterface;
import org.apache.hadoop.hbase.ipc.HRegionInterface;
@@ -1447,7 +1446,7 @@ public class HRegionServer implements HR
// Do initial RPC setup. The final argument indicates that the RPC
// should retry indefinitely.
master = (HMasterRegionInterface) HBaseRPC.waitForProxy(
- HMasterRegionInterface.class, HBaseRPCProtocolVersion.versionID,
+ HMasterRegionInterface.class, HMasterRegionInterface.VERSION,
masterAddress.getInetSocketAddress(), this.conf, -1,
this.rpcTimeout, this.rpcTimeout);
} catch (IOException e) {
@@ -2452,7 +2451,7 @@ public class HRegionServer implements HR
public long getProtocolVersion(final String protocol, final long
clientVersion)
throws IOException {
if (protocol.equals(HRegionInterface.class.getName())) {
- return HBaseRPCProtocolVersion.versionID;
+ return HRegionInterface.VERSION;
}
throw new IOException("Unknown protocol to name node: " + protocol);
}
Modified:
hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java
(original)
+++
hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java
Thu Feb 10 20:12:19 2011
@@ -28,7 +28,6 @@ import org.apache.hadoop.hbase.HBaseTest
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.ipc.HBaseRPC;
-import org.apache.hadoop.hbase.ipc.HBaseRPCProtocolVersion;
import org.apache.hadoop.hbase.ipc.HMasterInterface;
import org.apache.hadoop.ipc.RemoteException;
import org.junit.Test;
@@ -48,7 +47,7 @@ public class TestHMasterRPCException {
try {
HMasterInterface inf =
(HMasterInterface) HBaseRPC.getProxy(
- HMasterInterface.class, HBaseRPCProtocolVersion.versionID,
+ HMasterInterface.class, HMasterInterface.VERSION,
hma.getInetSocketAddress(), conf, 100);
inf.isMasterRunning();
fail();
Modified:
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java?rev=1069551&r1=1069550&r2=1069551&view=diff
==============================================================================
---
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java
(original)
+++
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java
Thu Feb 10 20:12:19 2011
@@ -19,21 +19,34 @@
*/
package org.apache.hadoop.hbase.regionserver;
-import com.google.common.collect.Lists;
-import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.client.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Row;
import org.apache.hadoop.hbase.client.coprocessor.Batch;
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
-import org.apache.hadoop.hbase.ipc.HBaseRPCProtocolVersion;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.JVMClusterUtil;
-import org.junit.*;
+import org.apache.hadoop.ipc.VersionedProtocol;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
+import com.google.common.collect.Lists;
public class TestServerCustomProtocol {
/* Test protocol */
@@ -45,8 +58,9 @@ public class TestServerCustomProtocol {
}
/* Test protocol implementation */
- private static class PingHandler implements PingProtocol,
- HBaseRPCProtocolVersion {
+ private static class PingHandler implements PingProtocol, VersionedProtocol {
+ static int VERSION = 1;
+
private int counter = 0;
@Override
public String ping() {
@@ -72,7 +86,7 @@ public class TestServerCustomProtocol {
@Override
public long getProtocolVersion(String s, long l) throws IOException {
- return versionID;
+ return VERSION;
}
}