You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/23 20:12:18 UTC
svn commit: r1329358 [4/5] - in /hbase/trunk:
security/src/main/java/org/apache/hadoop/hbase/ipc/
src/main/java/org/apache/hadoop/hbase/catalog/
src/main/java/org/apache/hadoop/hbase/client/
src/main/java/org/apache/hadoop/hbase/ipc/ src/main/java/org/...
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=1329358&r1=1329357&r2=1329358&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 Mon Apr 23 18:12:16 2012
@@ -74,7 +74,6 @@ import org.apache.hadoop.hbase.NotServin
import org.apache.hadoop.hbase.RemoteExceptionHandler;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.Stoppable;
-import org.apache.hadoop.hbase.TableDescriptors;
import org.apache.hadoop.hbase.UnknownRowLockException;
import org.apache.hadoop.hbase.UnknownScannerException;
import org.apache.hadoop.hbase.YouAreDeadException;
@@ -82,7 +81,9 @@ import org.apache.hadoop.hbase.catalog.C
import org.apache.hadoop.hbase.catalog.MetaEditor;
import org.apache.hadoop.hbase.catalog.MetaReader;
import org.apache.hadoop.hbase.client.Action;
+import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.Append;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HConnectionManager;
@@ -117,11 +118,7 @@ import org.apache.hadoop.hbase.ipc.Invoc
import org.apache.hadoop.hbase.ipc.ProtocolSignature;
import org.apache.hadoop.hbase.ipc.RpcServer;
import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;
-import org.apache.hadoop.hbase.protobuf.ClientProtocol;
import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;
-import org.apache.hadoop.hbase.regionserver.handler.CloseMetaHandler;
-import org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler;
-import org.apache.hadoop.hbase.regionserver.handler.CloseRootHandler;
import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;
import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
import org.apache.hadoop.hbase.regionserver.handler.OpenRootHandler;
@@ -185,12 +182,6 @@ public class HRegionServer extends Regio
private boolean useHBaseChecksum; // verify hbase checksums?
private Path rootDir;
- //RegionName vs current action in progress
- //true - if open region action in progress
- //false - if close region action in progress
- private final ConcurrentSkipListMap<byte[], Boolean> regionsInTransitionInRS =
- new ConcurrentSkipListMap<byte[], Boolean>(Bytes.BYTES_COMPARATOR);
-
protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
final int numRetries;
@@ -228,9 +219,6 @@ public class HRegionServer extends Regio
@SuppressWarnings("unused")
private RegionServerDynamicMetrics dynamicMetrics;
- // Compactions
- public CompactSplitThread compactSplitThread;
-
/*
* Check for compactions requests.
*/
@@ -250,9 +238,6 @@ public class HRegionServer extends Regio
// master address manager and watcher
private MasterAddressTracker masterAddressManager;
- // catalog tracker
- private CatalogTracker catalogTracker;
-
// Cluster Status Tracker
private ClusterStatusTracker clusterStatusTracker;
@@ -264,14 +249,6 @@ public class HRegionServer extends Regio
private final int rpcTimeout;
- // Instance of the hbase executor service.
- private ExecutorService service;
- @SuppressWarnings("unused")
-
- // Replication services. If no replication, this handler will be null.
- private ReplicationSourceService replicationSourceHandler;
- private ReplicationSinkService replicationSinkHandler;
-
private final RegionServerAccounting regionServerAccounting;
// Cache configuration and block cache reference
@@ -297,18 +274,6 @@ public class HRegionServer extends Regio
private final long startcode;
/**
- * Go here to get table descriptors.
- */
- private TableDescriptors tableDescriptors;
-
- /*
- * Strings to be used in forming the exception message for
- * RegionsAlreadyInTransitionException.
- */
- private static final String OPEN = "OPEN";
- private static final String CLOSE = "CLOSE";
-
- /**
* MX Bean for RegionServerInfo
*/
private ObjectName mxBean = null;
@@ -370,7 +335,7 @@ public class HRegionServer extends Regio
this.rpcServer = HBaseRPC.getServer(this,
new Class<?>[]{HRegionInterface.class, ClientProtocol.class,
- HBaseRPCErrorHandler.class,
+ AdminProtocol.class, HBaseRPCErrorHandler.class,
OnlineRegions.class},
initialIsa.getHostName(), // BindAddress is IP we got for this server.
initialIsa.getPort(),
@@ -2490,19 +2455,6 @@ public class HRegionServer extends Regio
return RegionOpeningState.OPENED;
}
- private void checkIfRegionInTransition(HRegionInfo region,
- String currentAction) throws RegionAlreadyInTransitionException {
- byte[] encodedName = region.getEncodedNameAsBytes();
- if (this.regionsInTransitionInRS.containsKey(encodedName)) {
- boolean openAction = this.regionsInTransitionInRS.get(encodedName);
- // The below exception message will be used in master.
- throw new RegionAlreadyInTransitionException("Received:" + currentAction +
- " for the region:" + region.getRegionNameAsString() +
- " ,which we are already trying to " +
- (openAction ? OPEN : CLOSE)+ ".");
- }
- }
-
@Override
@QosPriority(priority=HIGH_QOS)
public void openRegions(List<HRegionInfo> regions)
@@ -2560,54 +2512,6 @@ public class HRegionServer extends Regio
}
/**
- * @param region Region to close
- * @param abort True if we are aborting
- * @param zk True if we are to update zk about the region close; if the close
- * was orchestrated by master, then update zk. If the close is being run by
- * the regionserver because its going down, don't update zk.
- * @return True if closed a region.
- */
- protected boolean closeRegion(HRegionInfo region, final boolean abort,
- final boolean zk) {
- return closeRegion(region, abort, zk, -1);
- }
-
-
- /**
- * @param region Region to close
- * @param abort True if we are aborting
- * @param zk True if we are to update zk about the region close; if the close
- * was orchestrated by master, then update zk. If the close is being run by
- * the regionserver because its going down, don't update zk.
- * @param versionOfClosingNode
- * the version of znode to compare when RS transitions the znode from
- * CLOSING state.
- * @return True if closed a region.
- */
- protected boolean closeRegion(HRegionInfo region, final boolean abort,
- final boolean zk, final int versionOfClosingNode) {
- if (this.regionsInTransitionInRS.containsKey(region.getEncodedNameAsBytes())) {
- LOG.warn("Received close for region we are already opening or closing; " +
- region.getEncodedName());
- return false;
- }
- this.regionsInTransitionInRS.putIfAbsent(region.getEncodedNameAsBytes(), false);
- CloseRegionHandler crh = null;
- if (region.isRootRegion()) {
- crh = new CloseRootHandler(this, this, region, abort, zk,
- versionOfClosingNode);
- } else if (region.isMetaRegion()) {
- crh = new CloseMetaHandler(this, this, region, abort, zk,
- versionOfClosingNode);
- } else {
- crh = new CloseRegionHandler(this, this, region, abort, zk,
- versionOfClosingNode);
- }
- this.service.submit(crh);
- return true;
- }
-
- /**
* @param encodedRegionName
* encodedregionName to close
* @param abort
@@ -2804,13 +2708,6 @@ public class HRegionServer extends Regio
return sortedRegions;
}
- @Override
- public HRegion getFromOnlineRegions(final String encodedRegionName) {
- HRegion r = null;
- r = this.onlineRegions.get(encodedRegionName);
- return r;
- }
-
/** @return the request count */
public AtomicInteger getRequestCount() {
return this.requestCount;
@@ -2858,6 +2755,8 @@ public class HRegionServer extends Regio
return new ProtocolSignature(HRegionInterface.VERSION, null);
} else if (protocol.equals(ClientProtocol.class.getName())) {
return new ProtocolSignature(ClientProtocol.VERSION, null);
+ } else if (protocol.equals(AdminProtocol.class.getName())) {
+ return new ProtocolSignature(AdminProtocol.VERSION, null);
}
throw new IOException("Unknown protocol: " + protocol);
}
@@ -2870,6 +2769,8 @@ public class HRegionServer extends Regio
return HRegionInterface.VERSION;
} else if (protocol.equals(ClientProtocol.class.getName())) {
return ClientProtocol.VERSION;
+ } else if (protocol.equals(AdminProtocol.class.getName())) {
+ return AdminProtocol.VERSION;
}
throw new IOException("Unknown protocol: " + protocol);
}
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java Mon Apr 23 18:12:16 2012
@@ -37,16 +37,11 @@ import org.apache.hadoop.hbase.client.Ge
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.protobuf.RequestConverter;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
import org.apache.hadoop.hbase.thrift.ThriftServerRunner;
import org.apache.hadoop.hbase.thrift.ThriftUtilities;
import org.apache.hadoop.hbase.thrift.generated.IOError;
import org.apache.hadoop.hbase.thrift.generated.TRowResult;
-import com.google.protobuf.ServiceException;
-
/**
* HRegionThriftServer - this class starts up a Thrift server in the same
* JVM where the RegionServer is running. It inherits most of the
@@ -136,10 +131,7 @@ public class HRegionThriftServer extends
if (columns == null) {
Get get = new Get(row);
get.setTimeRange(Long.MIN_VALUE, timestamp);
- GetRequest request =
- RequestConverter.buildGetRequest(regionName, get);
- GetResponse response = rs.get(null, request);
- Result result = ProtobufUtil.toResult(response.getResult());
+ Result result = ProtobufUtil.get(rs, regionName, get);
return ThriftUtilities.rowResultFromHBase(result);
}
Get get = new Get(row);
@@ -152,10 +144,7 @@ public class HRegionThriftServer extends
}
}
get.setTimeRange(Long.MIN_VALUE, timestamp);
- GetRequest request =
- RequestConverter.buildGetRequest(regionName, get);
- GetResponse response = rs.get(null, request);
- Result result = ProtobufUtil.toResult(response.getResult());
+ Result result = ProtobufUtil.get(rs, regionName, get);
return ThriftUtilities.rowResultFromHBase(result);
} catch (NotServingRegionException e) {
if (!redirect) {
@@ -165,10 +154,6 @@ public class HRegionThriftServer extends
LOG.debug("ThriftServer redirecting getRowWithColumnsTs");
return super.getRowWithColumnsTs(tableName, rowb, columns, timestamp,
attributes);
- } catch (ServiceException se) {
- IOException e = ProtobufUtil.getRemoteException(se);
- LOG.warn(e.getMessage(), e);
- throw new IOError(e.getMessage());
} catch (IOException e) {
LOG.warn(e.getMessage(), e);
throw new IOError(e.getMessage());
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java Mon Apr 23 18:12:16 2012
@@ -21,10 +21,14 @@ package org.apache.hadoop.hbase.regionse
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.logging.Log;
@@ -33,12 +37,19 @@ import org.apache.hadoop.classification.
import org.apache.hadoop.hbase.DoNotRetryIOException;
import org.apache.hadoop.hbase.HConstants.OperationStatusCode;
import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.RemoteExceptionHandler;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.TableDescriptors;
import org.apache.hadoop.hbase.UnknownRowLockException;
import org.apache.hadoop.hbase.UnknownScannerException;
+import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.Append;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Increment;
@@ -48,13 +59,38 @@ import org.apache.hadoop.hbase.client.Ro
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.executor.ExecutorService;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.WritableByteArrayComparable;
import org.apache.hadoop.hbase.fs.HFileSystem;
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
-import org.apache.hadoop.hbase.protobuf.ClientProtocol;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.ResponseConverter;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ActionResult;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
@@ -78,15 +114,24 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.UnlockRowRequest;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.UnlockRowResponse;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
import org.apache.hadoop.hbase.regionserver.HRegionServer.QosPriority;
import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;
+import org.apache.hadoop.hbase.regionserver.handler.CloseMetaHandler;
+import org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler;
+import org.apache.hadoop.hbase.regionserver.handler.CloseRootHandler;
+import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;
+import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
+import org.apache.hadoop.hbase.regionserver.handler.OpenRootHandler;
import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
+import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.FSUtils;
import org.apache.hadoop.hbase.util.Pair;
+import com.google.protobuf.ByteString;
import com.google.protobuf.RpcController;
import com.google.protobuf.ServiceException;
@@ -101,17 +146,45 @@ import com.google.protobuf.ServiceExcept
*/
@InterfaceAudience.Private
public abstract class RegionServer implements
- ClientProtocol, Runnable, RegionServerServices {
+ ClientProtocol, AdminProtocol, Runnable, RegionServerServices {
private static final Log LOG = LogFactory.getLog(RegionServer.class);
private final Random rand = new Random();
+ /*
+ * Strings to be used in forming the exception message for
+ * RegionsAlreadyInTransitionException.
+ */
+ protected static final String OPEN = "OPEN";
+ protected static final String CLOSE = "CLOSE";
+
+ //RegionName vs current action in progress
+ //true - if open region action in progress
+ //false - if close region action in progress
+ protected final ConcurrentSkipListMap<byte[], Boolean> regionsInTransitionInRS =
+ new ConcurrentSkipListMap<byte[], Boolean>(Bytes.BYTES_COMPARATOR);
+
protected long maxScannerResultSize;
// Cache flushing
protected MemStoreFlusher cacheFlusher;
+ // catalog tracker
+ protected CatalogTracker catalogTracker;
+
+ /**
+ * Go here to get table descriptors.
+ */
+ protected TableDescriptors tableDescriptors;
+
+ // Replication services. If no replication, this handler will be null.
+ protected ReplicationSourceService replicationSourceHandler;
+ protected ReplicationSinkService replicationSinkHandler;
+
+ // Compactions
+ public CompactSplitThread compactSplitThread;
+
final Map<String, RegionScanner> scanners =
new ConcurrentHashMap<String, RegionScanner>();
@@ -125,6 +198,9 @@ public abstract class RegionServer imple
// Leases
protected Leases leases;
+ // Instance of the hbase executor service.
+ protected ExecutorService service;
+
// Request counter.
// Do we need this? Can't we just sum region counters? St.Ack 20110412
protected AtomicInteger requestCount = new AtomicInteger();
@@ -244,6 +320,67 @@ public abstract class RegionServer imple
}
}
+ protected void checkIfRegionInTransition(HRegionInfo region,
+ String currentAction) throws RegionAlreadyInTransitionException {
+ byte[] encodedName = region.getEncodedNameAsBytes();
+ if (this.regionsInTransitionInRS.containsKey(encodedName)) {
+ boolean openAction = this.regionsInTransitionInRS.get(encodedName);
+ // The below exception message will be used in master.
+ throw new RegionAlreadyInTransitionException("Received:" + currentAction +
+ " for the region:" + region.getRegionNameAsString() +
+ " ,which we are already trying to " +
+ (openAction ? OPEN : CLOSE)+ ".");
+ }
+ }
+
+ /**
+ * @param region Region to close
+ * @param abort True if we are aborting
+ * @param zk True if we are to update zk about the region close; if the close
+ * was orchestrated by master, then update zk. If the close is being run by
+ * the regionserver because its going down, don't update zk.
+ * @return True if closed a region.
+ */
+ protected boolean closeRegion(HRegionInfo region, final boolean abort,
+ final boolean zk) {
+ return closeRegion(region, abort, zk, -1);
+ }
+
+
+ /**
+ * @param region Region to close
+ * @param abort True if we are aborting
+ * @param zk True if we are to update zk about the region close; if the close
+ * was orchestrated by master, then update zk. If the close is being run by
+ * the regionserver because its going down, don't update zk.
+ * @param versionOfClosingNode
+ * the version of znode to compare when RS transitions the znode from
+ * CLOSING state.
+ * @return True if closed a region.
+ */
+ protected boolean closeRegion(HRegionInfo region, final boolean abort,
+ final boolean zk, final int versionOfClosingNode) {
+ if (this.regionsInTransitionInRS.containsKey(region.getEncodedNameAsBytes())) {
+ LOG.warn("Received close for region we are already opening or closing; " +
+ region.getEncodedName());
+ return false;
+ }
+ this.regionsInTransitionInRS.putIfAbsent(region.getEncodedNameAsBytes(), false);
+ CloseRegionHandler crh = null;
+ if (region.isRootRegion()) {
+ crh = new CloseRootHandler(this, this, region, abort, zk,
+ versionOfClosingNode);
+ } else if (region.isMetaRegion()) {
+ crh = new CloseMetaHandler(this, this, region, abort, zk,
+ versionOfClosingNode);
+ } else {
+ crh = new CloseRegionHandler(this, this, region, abort, zk,
+ versionOfClosingNode);
+ }
+ this.service.submit(crh);
+ return true;
+ }
+
/**
* @param regionName
* @return HRegion for the passed binary <code>regionName</code> or null if
@@ -254,6 +391,11 @@ public abstract class RegionServer imple
return this.onlineRegions.get(encodedRegionName);
}
+ @Override
+ public HRegion getFromOnlineRegions(final String encodedRegionName) {
+ return this.onlineRegions.get(encodedRegionName);
+ }
+
/**
* Protected utility method for safely obtaining an HRegion handle.
*
@@ -1002,6 +1144,352 @@ public abstract class RegionServer imple
}
// End Client methods
+// Start Admin methods
+
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public GetRegionInfoResponse getRegionInfo(final RpcController controller,
+ final GetRegionInfoRequest request) throws ServiceException {
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HRegion region = getRegion(request.getRegion());
+ HRegionInfo info = region.getRegionInfo();
+ GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();
+ builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ @Override
+ public GetStoreFileResponse getStoreFile(final RpcController controller,
+ final GetStoreFileRequest request) throws ServiceException {
+ try {
+ HRegion region = getRegion(request.getRegion());
+ requestCount.incrementAndGet();
+ Set<byte[]> columnFamilies = null;
+ if (request.getFamilyCount() == 0) {
+ columnFamilies = region.getStores().keySet();
+ } else {
+ columnFamilies = new HashSet<byte[]>();
+ for (ByteString cf: request.getFamilyList()) {
+ columnFamilies.add(cf.toByteArray());
+ }
+ }
+ int nCF = columnFamilies.size();
+ List<String> fileList = region.getStoreFileList(
+ columnFamilies.toArray(new byte[nCF][]));
+ GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();
+ builder.addAllStoreFile(fileList);
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public GetOnlineRegionResponse getOnlineRegion(final RpcController controller,
+ final GetOnlineRegionRequest request) throws ServiceException {
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ List<HRegionInfo> list = new ArrayList<HRegionInfo>(onlineRegions.size());
+ for (Map.Entry<String,HRegion> e: this.onlineRegions.entrySet()) {
+ list.add(e.getValue().getRegionInfo());
+ }
+ Collections.sort(list);
+ GetOnlineRegionResponse.Builder builder = GetOnlineRegionResponse.newBuilder();
+ for (HRegionInfo region: list) {
+ builder.addRegionInfo(ProtobufUtil.toRegionInfo(region));
+ }
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+
+ // Region open/close direct RPCs
+
+ /**
+ * Open a region on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public OpenRegionResponse openRegion(final RpcController controller,
+ final OpenRegionRequest request) throws ServiceException {
+ int versionOfOfflineNode = -1;
+ if (request.hasVersionOfOfflineNode()) {
+ versionOfOfflineNode = request.getVersionOfOfflineNode();
+ }
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ OpenRegionResponse.Builder
+ builder = OpenRegionResponse.newBuilder();
+ for (RegionInfo regionInfo: request.getRegionList()) {
+ HRegionInfo region = ProtobufUtil.toRegionInfo(regionInfo);
+ checkIfRegionInTransition(region, OPEN);
+
+ HRegion onlineRegion = getFromOnlineRegions(region.getEncodedName());
+ if (null != onlineRegion) {
+ // See HBASE-5094. Cross check with META if still this RS is owning the
+ // region.
+ Pair<HRegionInfo, ServerName> p = MetaReader.getRegion(
+ this.catalogTracker, region.getRegionName());
+ if (this.getServerName().equals(p.getSecond())) {
+ LOG.warn("Attempted open of " + region.getEncodedName()
+ + " but already online on this server");
+ builder.addOpeningState(RegionOpeningState.ALREADY_OPENED);
+ continue;
+ } else {
+ LOG.warn("The region " + region.getEncodedName()
+ + " is online on this server but META does not have this server.");
+ removeFromOnlineRegions(region.getEncodedName());
+ }
+ }
+ LOG.info("Received request to open region: " + region.getEncodedName());
+ this.regionsInTransitionInRS.putIfAbsent(region.getEncodedNameAsBytes(), true);
+ HTableDescriptor htd = this.tableDescriptors.get(region.getTableName());
+ // Need to pass the expected version in the constructor.
+ if (region.isRootRegion()) {
+ this.service.submit(new OpenRootHandler(this, this, region, htd,
+ versionOfOfflineNode));
+ } else if (region.isMetaRegion()) {
+ this.service.submit(new OpenMetaHandler(this, this, region, htd,
+ versionOfOfflineNode));
+ } else {
+ this.service.submit(new OpenRegionHandler(this, this, region, htd,
+ versionOfOfflineNode));
+ }
+ builder.addOpeningState(RegionOpeningState.OPENED);
+ }
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Close a region on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public CloseRegionResponse closeRegion(final RpcController controller,
+ final CloseRegionRequest request) throws ServiceException {
+ int versionOfClosingNode = -1;
+ if (request.hasVersionOfClosingNode()) {
+ versionOfClosingNode = request.getVersionOfClosingNode();
+ }
+ boolean zk = request.getTransitionInZK();
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HRegion region = getRegion(request.getRegion());
+ CloseRegionResponse.Builder
+ builder = CloseRegionResponse.newBuilder();
+ LOG.info("Received close region: " + region.getRegionNameAsString() +
+ ". Version of ZK closing node:" + versionOfClosingNode);
+ HRegionInfo regionInfo = region.getRegionInfo();
+ checkIfRegionInTransition(regionInfo, CLOSE);
+ boolean closed = closeRegion(
+ regionInfo, false, zk, versionOfClosingNode);
+ builder.setClosed(closed);
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Flush a region on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public FlushRegionResponse flushRegion(final RpcController controller,
+ final FlushRegionRequest request) throws ServiceException {
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HRegion region = getRegion(request.getRegion());
+ LOG.info("Flushing " + region.getRegionNameAsString());
+ boolean shouldFlush = true;
+ if (request.hasIfOlderThanTs()) {
+ shouldFlush = region.getLastFlushTime() < request.getIfOlderThanTs();
+ }
+ FlushRegionResponse.Builder builder = FlushRegionResponse.newBuilder();
+ if (shouldFlush) {
+ builder.setFlushed(region.flushcache());
+ }
+ builder.setLastFlushTime(region.getLastFlushTime());
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Split a region on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public SplitRegionResponse splitRegion(final RpcController controller,
+ final SplitRegionRequest request) throws ServiceException {
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HRegion region = getRegion(request.getRegion());
+ LOG.info("Splitting " + region.getRegionNameAsString());
+ region.flushcache();
+ byte[] splitPoint = null;
+ if (request.hasSplitPoint()) {
+ splitPoint = request.getSplitPoint().toByteArray();
+ }
+ region.forceSplit(splitPoint);
+ compactSplitThread.requestSplit(region, region.checkSplit());
+ return SplitRegionResponse.newBuilder().build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Compact a region on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public CompactRegionResponse compactRegion(final RpcController controller,
+ final CompactRegionRequest request) throws ServiceException {
+ try {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HRegion region = getRegion(request.getRegion());
+ LOG.info("Compacting " + region.getRegionNameAsString());
+ boolean major = false;
+ if (request.hasMajor()) {
+ major = request.getMajor();
+ }
+ if (major) {
+ region.triggerMajorCompaction();
+ }
+ compactSplitThread.requestCompaction(region,
+ "User-triggered " + (major ? "major " : "") + "compaction",
+ CompactSplitThread.PRIORITY_USER);
+ return CompactRegionResponse.newBuilder().build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Replicate WAL entries on the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ @QosPriority(priority=HIGH_QOS)
+ public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,
+ final ReplicateWALEntryRequest request) throws ServiceException {
+ try {
+ if (replicationSinkHandler != null) {
+ checkOpen();
+ requestCount.incrementAndGet();
+ HLog.Entry[] entries = ProtobufUtil.toHLogEntries(request.getEntryList());
+ if (entries != null && entries.length > 0) {
+ replicationSinkHandler.replicateLogEntries(entries);
+ }
+ }
+ return ReplicateWALEntryResponse.newBuilder().build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Roll the WAL writer of the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ public RollWALWriterResponse rollWALWriter(final RpcController controller,
+ final RollWALWriterRequest request) throws ServiceException {
+ try {
+ requestCount.incrementAndGet();
+ HLog wal = this.getWAL();
+ byte[][] regionsToFlush = wal.rollWriter(true);
+ RollWALWriterResponse.Builder builder = RollWALWriterResponse.newBuilder();
+ if (regionsToFlush != null) {
+ for (byte[] region: regionsToFlush) {
+ builder.addRegionToFlush(ByteString.copyFrom(region));
+ }
+ }
+ return builder.build();
+ } catch (IOException ie) {
+ throw new ServiceException(ie);
+ }
+ }
+
+ /**
+ * Stop the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ public StopServerResponse stopServer(final RpcController controller,
+ final StopServerRequest request) throws ServiceException {
+ requestCount.incrementAndGet();
+ String reason = request.getReason();
+ stop(reason);
+ return StopServerResponse.newBuilder().build();
+ }
+
+ /**
+ * Get some information of the region server.
+ *
+ * @param controller the RPC controller
+ * @param request the request
+ * @throws ServiceException
+ */
+ @Override
+ public GetServerInfoResponse getServerInfo(final RpcController controller,
+ final GetServerInfoRequest request) throws ServiceException {
+ ServerName serverName = getServerName();
+ requestCount.incrementAndGet();
+ GetServerInfoResponse.Builder builder = GetServerInfoResponse.newBuilder();
+ builder.setServerName(ProtobufUtil.toServerName(serverName));
+ return builder.build();
+ }
+
+// End Admin methods
/**
* Find the HRegion based on a region specifier
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java Mon Apr 23 18:12:16 2012
@@ -48,9 +48,10 @@ import org.apache.hadoop.hbase.HConstant
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.Stoppable;
+import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
-import org.apache.hadoop.hbase.ipc.HRegionInterface;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
@@ -605,9 +606,10 @@ public class ReplicationSource extends T
continue;
}
try {
- HRegionInterface rrs = getRS();
+ AdminProtocol rrs = getRS();
LOG.debug("Replicating " + currentNbEntries);
- rrs.replicateLogEntries(Arrays.copyOf(this.entriesArray, currentNbEntries));
+ ProtobufUtil.replicateWALEntry(rrs,
+ Arrays.copyOf(this.entriesArray, currentNbEntries));
if (this.lastLoggedPosition != this.position) {
this.manager.logPositionAndCleanOldLogs(this.currentPath,
this.peerClusterZnode, this.position, queueRecovered);
@@ -727,13 +729,13 @@ public class ReplicationSource extends T
* @return
* @throws IOException
*/
- private HRegionInterface getRS() throws IOException {
+ private AdminProtocol getRS() throws IOException {
if (this.currentPeers.size() == 0) {
throw new IOException(this.peerClusterZnode + " has 0 region servers");
}
ServerName address =
currentPeers.get(random.nextInt(this.currentPeers.size()));
- return this.conn.getHRegionConnection(address.getHostname(), address.getPort());
+ return this.conn.getAdmin(address.getHostname(), address.getPort());
}
/**
@@ -746,9 +748,9 @@ public class ReplicationSource extends T
Thread pingThread = new Thread() {
public void run() {
try {
- HRegionInterface rrs = getRS();
+ AdminProtocol rrs = getRS();
// Dummy call which should fail
- rrs.getHServerInfo();
+ ProtobufUtil.getServerInfo(rrs);
latch.countDown();
} catch (IOException ex) {
if (ex instanceof RemoteException) {
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java Mon Apr 23 18:12:16 2012
@@ -57,6 +57,7 @@ import org.apache.hadoop.hbase.MasterNot
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
@@ -70,8 +71,8 @@ import org.apache.hadoop.hbase.client.Pu
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.hfile.CacheConfig;
import org.apache.hadoop.hbase.io.hfile.HFile;
-import org.apache.hadoop.hbase.ipc.HRegionInterface;
import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;
@@ -2620,11 +2621,11 @@ public class HBaseFsck {
public synchronized void run() {
errors.progress();
try {
- HRegionInterface server =
- connection.getHRegionConnection(rsinfo.getHostname(), rsinfo.getPort());
+ AdminProtocol server =
+ connection.getAdmin(rsinfo.getHostname(), rsinfo.getPort());
// list all online regions from this region server
- List<HRegionInfo> regions = server.getOnlineRegions();
+ List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(server);
if (hbck.checkMetaOnly) {
regions = filterOnlyMetaRegions(regions);
}
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java Mon Apr 23 18:12:16 2012
@@ -34,12 +34,13 @@ import org.apache.hadoop.hbase.HRegionIn
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
+import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.ipc.HRegionInterface;
import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.zookeeper.KeeperException;
@@ -149,17 +150,16 @@ public class HBaseFsckRepair {
public static void closeRegionSilentlyAndWait(HBaseAdmin admin,
ServerName server, HRegionInfo region) throws IOException, InterruptedException {
HConnection connection = admin.getConnection();
- HRegionInterface rs = connection.getHRegionConnection(server.getHostname(),
- server.getPort());
- rs.closeRegion(region, false);
+ AdminProtocol rs = connection.getAdmin(server.getHostname(), server.getPort());
+ ProtobufUtil.closeRegion(rs, region.getRegionName(), false);
long timeout = admin.getConfiguration()
.getLong("hbase.hbck.close.timeout", 120000);
long expiration = timeout + System.currentTimeMillis();
while (System.currentTimeMillis() < expiration) {
try {
- HRegionInfo rsRegion = rs.getRegionInfo(region.getRegionName());
- if (rsRegion == null)
- return;
+ HRegionInfo rsRegion =
+ ProtobufUtil.getRegionInfo(rs, region.getRegionName());
+ if (rsRegion == null) return;
} catch (IOException ioe) {
return;
}
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.java Mon Apr 23 18:12:16 2012
@@ -49,7 +49,7 @@ import org.apache.hadoop.classification.
@InterfaceAudience.Public
@InterfaceStability.Stable
public class SortedCopyOnWriteSet<E> implements SortedSet<E> {
- private SortedSet<E> internalSet;
+ private volatile SortedSet<E> internalSet;
public SortedCopyOnWriteSet() {
this.internalSet = new TreeSet<E>();
Modified: hbase/trunk/src/main/protobuf/Admin.proto
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/protobuf/Admin.proto?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/protobuf/Admin.proto (original)
+++ hbase/trunk/src/main/protobuf/Admin.proto Mon Apr 23 18:12:16 2012
@@ -38,12 +38,12 @@ message GetRegionInfoResponse {
* Get a list of store files for a set of column families in a particular region.
* If no column family is specified, get the store files for all column families.
*/
-message GetStoreFileListRequest {
+message GetStoreFileRequest {
required RegionSpecifier region = 1;
- repeated bytes columnFamily = 2;
+ repeated bytes family = 2;
}
-message GetStoreFileListResponse {
+message GetStoreFileResponse {
repeated string storeFile = 1;
}
@@ -55,7 +55,7 @@ message GetOnlineRegionResponse {
}
message OpenRegionRequest {
- repeated RegionSpecifier region = 1;
+ repeated RegionInfo region = 1;
optional uint32 versionOfOfflineNode = 2;
}
@@ -133,7 +133,7 @@ message UUID {
// Protocol buffer version of HLog
message WALEntry {
- required WALKey walKey = 1;
+ required WALKey key = 1;
required WALEdit edit = 2;
// Protocol buffer version of HLogKey
@@ -146,7 +146,7 @@ message WALEntry {
}
message WALEdit {
- repeated bytes keyValue = 1;
+ repeated bytes keyValueBytes = 1;
repeated FamilyScope familyScope = 2;
enum ScopeType {
@@ -168,7 +168,7 @@ message WALEntry {
* hbase.replication has to be set to true for this to work.
*/
message ReplicateWALEntryRequest {
- repeated WALEntry walEntry = 1;
+ repeated WALEntry entry = 1;
}
message ReplicateWALEntryResponse {
@@ -201,8 +201,8 @@ service AdminService {
rpc getRegionInfo(GetRegionInfoRequest)
returns(GetRegionInfoResponse);
- rpc getStoreFileList(GetStoreFileListRequest)
- returns(GetStoreFileListResponse);
+ rpc getStoreFile(GetStoreFileRequest)
+ returns(GetStoreFileResponse);
rpc getOnlineRegion(GetOnlineRegionRequest)
returns(GetOnlineRegionResponse);
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestCatalogTracker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestCatalogTracker.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestCatalogTracker.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestCatalogTracker.java Mon Apr 23 18:12:16 2012
@@ -32,8 +32,18 @@ import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
+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.KeyValue;
+import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.NotAllMetaRegionsOnlineException;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.client.AdminProtocol;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
@@ -41,7 +51,9 @@ import org.apache.hadoop.hbase.client.Re
import org.apache.hadoop.hbase.client.RetriesExhaustedException;
import org.apache.hadoop.hbase.client.ServerCallable;
import org.apache.hadoop.hbase.ipc.HRegionInterface;
-import org.apache.hadoop.hbase.protobuf.ClientProtocol;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
import org.apache.hadoop.hbase.util.Bytes;
@@ -186,16 +198,19 @@ public class TestCatalogTracker {
@Test
public void testServerNotRunningIOException()
throws IOException, InterruptedException, KeeperException, ServiceException {
- // Mock an HRegionInterface.
- final HRegionInterface implementation = Mockito.mock(HRegionInterface.class);
+ // Mock an Admin and a Client.
+ final AdminProtocol admin = Mockito.mock(AdminProtocol.class);
final ClientProtocol client = Mockito.mock(ClientProtocol.class);
- HConnection connection = mockConnection(implementation, client);
+ HConnection connection = mockConnection(admin, client);
try {
- // If a 'getRegionInfo' is called on mocked HRegionInterface, throw IOE
+ // If a 'getRegionInfo' is called on mocked AdminProtocol, throw IOE
// the first time. 'Succeed' the second time we are called.
- Mockito.when(implementation.getRegionInfo((byte[]) Mockito.any())).
- thenThrow(new IOException("Server not running, aborting")).
- thenReturn(new HRegionInfo());
+ GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();
+ builder.setRegionInfo(ProtobufUtil.toRegionInfo(new HRegionInfo(Bytes.toBytes("test"))));
+ Mockito.when(admin.getRegionInfo((RpcController)Mockito.any(),
+ (GetRegionInfoRequest)Mockito.any())).thenThrow(
+ new ServiceException(new IOException("Server not running, aborting"))).
+ thenReturn(builder.build());
// After we encounter the above 'Server not running', we should catch the
// IOE and go into retrying for the meta mode. We'll do gets on -ROOT- to
@@ -292,18 +307,19 @@ public class TestCatalogTracker {
* @throws IOException
* @throws InterruptedException
* @throws KeeperException
+ * @throws ServiceException
*/
@Test
public void testVerifyRootRegionLocationFails()
- throws IOException, InterruptedException, KeeperException {
+ throws IOException, InterruptedException, KeeperException, ServiceException {
HConnection connection = Mockito.mock(HConnection.class);
- ConnectException connectException =
- new ConnectException("Connection refused");
- final HRegionInterface implementation =
- Mockito.mock(HRegionInterface.class);
- Mockito.when(implementation.getRegionInfo((byte [])Mockito.any())).
- thenThrow(connectException);
- Mockito.when(connection.getHRegionConnection(Mockito.anyString(),
+ ServiceException connectException =
+ new ServiceException(new ConnectException("Connection refused"));
+ final AdminProtocol implementation =
+ Mockito.mock(AdminProtocol.class);
+ Mockito.when(implementation.getRegionInfo((RpcController)Mockito.any(),
+ (GetRegionInfoRequest)Mockito.any())).thenThrow(connectException);
+ Mockito.when(connection.getAdmin(Mockito.anyString(),
Mockito.anyInt(), Mockito.anyBoolean())).
thenReturn(implementation);
final CatalogTracker ct = constructAndStartCatalogTracker(connection);
@@ -379,11 +395,11 @@ public class TestCatalogTracker {
// that ... and so one.
@Test public void testNoTimeoutWaitForMeta()
throws Exception {
- // Mock an HConnection and a HRegionInterface implementation. Have the
+ // Mock an HConnection and a AdminProtocol implementation. Have the
// HConnection return the HRI. Have the HRI return a few mocked up responses
// to make our test work.
- // Mock an HRegionInterface.
- final HRegionInterface implementation = Mockito.mock(HRegionInterface.class);
+ // Mock an AdminProtocol.
+ final AdminProtocol implementation = Mockito.mock(AdminProtocol.class);
HConnection connection = mockConnection(implementation, null);
try {
// Now the ct is up... set into the mocks some answers that make it look
@@ -396,8 +412,10 @@ public class TestCatalogTracker {
// It works for now but has been deprecated.
Mockito.when(connection.getRegionServerWithRetries((ServerCallable<Result>)Mockito.any())).
thenReturn(result);
- Mockito.when(implementation.getRegionInfo((byte[]) Mockito.any())).
- thenReturn(HRegionInfo.FIRST_META_REGIONINFO);
+ GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();
+ builder.setRegionInfo(ProtobufUtil.toRegionInfo(HRegionInfo.FIRST_META_REGIONINFO));
+ Mockito.when(implementation.getRegionInfo((RpcController)Mockito.any(),
+ (GetRegionInfoRequest)Mockito.any())).thenReturn(builder.build());
final CatalogTracker ct = constructAndStartCatalogTracker(connection);
ServerName hsa = ct.getMetaLocation();
Assert.assertNull(hsa);
@@ -430,7 +448,7 @@ public class TestCatalogTracker {
}
/**
- * @param implementation An {@link HRegionInterface} instance; you'll likely
+ * @param admin An {@link AdminProtocol} instance; you'll likely
* want to pass a mocked HRS; can be null.
* @param client A mocked ClientProtocol instance, can be null
* @return Mock up a connection that returns a {@link Configuration} when
@@ -443,9 +461,8 @@ public class TestCatalogTracker {
* when done with this mocked Connection.
* @throws IOException
*/
- private HConnection mockConnection(
- final HRegionInterface implementation, final ClientProtocol client)
- throws IOException {
+ private HConnection mockConnection(final AdminProtocol admin,
+ final ClientProtocol client) throws IOException {
HConnection connection =
HConnectionTestingUtility.getMockedConnection(UTIL.getConfiguration());
Mockito.doNothing().when(connection).close();
@@ -459,10 +476,10 @@ public class TestCatalogTracker {
Mockito.when(connection.locateRegion((byte[]) Mockito.any(),
(byte[]) Mockito.any())).
thenReturn(anyLocation);
- if (implementation != null) {
+ if (admin != null) {
// If a call to getHRegionConnection, return this implementation.
- Mockito.when(connection.getHRegionConnection(Mockito.anyString(), Mockito.anyInt())).
- thenReturn(implementation);
+ Mockito.when(connection.getAdmin(Mockito.anyString(), Mockito.anyInt())).
+ thenReturn(admin);
}
if (client != null) {
// If a call to getClient, return this implementation.
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java Mon Apr 23 18:12:16 2012
@@ -27,12 +27,12 @@ import java.util.NavigableMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.*;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.protobuf.ClientProtocol;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
import org.apache.hadoop.hbase.util.Bytes;
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java Mon Apr 23 18:12:16 2012
@@ -24,10 +24,11 @@ import org.apache.hadoop.hbase.HRegionIn
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
+import org.apache.hadoop.hbase.client.AdminProtocol;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.HConnectionManager.HConnectionImplementation;
import org.apache.hadoop.hbase.client.HConnectionManager.HConnectionKey;
import org.apache.hadoop.hbase.ipc.HRegionInterface;
-import org.apache.hadoop.hbase.protobuf.ClientProtocol;
import org.mockito.Mockito;
/**
@@ -72,14 +73,14 @@ public class HConnectionTestingUtility {
* connection when done by calling
* {@link HConnectionManager#deleteConnection(Configuration, boolean)} else it
* will stick around; this is probably not what you want.
- * @param implementation An {@link HRegionInterface} instance; you'll likely
- * want to pass a mocked HRS; can be null.
- *
+ *
* @param conf Configuration to use
- * @param implementation An HRegionInterface; can be null but is usually
+ * @param admin An AdminProtocol; can be null but is usually
+ * itself a mock.
+ * @param client A ClientProtocol; can be null but is usually
* itself a mock.
* @param sn ServerName to include in the region location returned by this
- * <code>implementation</code>
+ * <code>connection</code>
* @param hri HRegionInfo to include in the location returned when
* getRegionLocation is called on the mocked connection
* @return Mock up a connection that returns a {@link Configuration} when
@@ -93,7 +94,7 @@ public class HConnectionTestingUtility {
* @throws IOException
*/
public static HConnection getMockedConnectionAndDecorate(final Configuration conf,
- final HRegionInterface implementation, final ClientProtocol client,
+ final AdminProtocol admin, final ClientProtocol client,
final ServerName sn, final HRegionInfo hri)
throws IOException {
HConnection c = HConnectionTestingUtility.getMockedConnection(conf);
@@ -105,10 +106,10 @@ public class HConnectionTestingUtility {
thenReturn(loc);
Mockito.when(c.locateRegion((byte[]) Mockito.any(), (byte[]) Mockito.any())).
thenReturn(loc);
- if (implementation != null) {
- // If a call to getHRegionConnection, return this implementation.
- Mockito.when(c.getHRegionConnection(Mockito.anyString(), Mockito.anyInt())).
- thenReturn(implementation);
+ if (admin != null) {
+ // If a call to getAdmin, return this implementation.
+ Mockito.when(c.getAdmin(Mockito.anyString(), Mockito.anyInt())).
+ thenReturn(admin);
}
if (client != null) {
// If a call to getClient, return this client.
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java Mon Apr 23 18:12:16 2012
@@ -1220,8 +1220,12 @@ public class TestAdmin {
if (!regionInfo.isMetaTable()) {
if (regionInfo.getRegionNameAsString().contains("TestHBACloseRegion1")) {
info = regionInfo;
- admin.closeRegionWithEncodedRegionName("sample", rs.getServerName()
+ try {
+ admin.closeRegionWithEncodedRegionName("sample", rs.getServerName()
.getServerName());
+ } catch (NotServingRegionException nsre) {
+ // expected, ignore it
+ }
}
}
}
@@ -1320,8 +1324,12 @@ public class TestAdmin {
if (!regionInfo.isMetaTable()) {
if (regionInfo.getRegionNameAsString().contains("TestHBACloseRegion4")) {
info = regionInfo;
- admin.closeRegionWithEncodedRegionName(regionInfo
+ try {
+ admin.closeRegionWithEncodedRegionName(regionInfo
.getRegionNameAsString(), rs.getServerName().getServerName());
+ } catch (NotServingRegionException nsre) {
+ // expected, ignore it.
+ }
}
}
}
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java Mon Apr 23 18:12:16 2012
@@ -22,7 +22,7 @@ package org.apache.hadoop.hbase.client;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import java.util.ArrayList;
+import java.util.List;
import java.util.Random;
import org.apache.commons.logging.Log;
@@ -32,7 +32,8 @@ import org.apache.hadoop.hbase.HColumnDe
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.LargeTests;
-import org.apache.hadoop.hbase.ipc.HRegionInterface;
+import org.apache.hadoop.hbase.client.AdminProtocol;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;
import org.junit.After;
@@ -42,17 +43,12 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import com.google.common.collect.Lists;
-
@Category(LargeTests.class)
public class TestFromClientSide3 {
final Log LOG = LogFactory.getLog(getClass());
private final static HBaseTestingUtility TEST_UTIL
= new HBaseTestingUtility();
- private static byte[] ROW = Bytes.toBytes("testRow");
private static byte[] FAMILY = Bytes.toBytes("testFamily");
- private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");
- private static byte[] VALUE = Bytes.toBytes("testValue");
private static Random random = new Random();
private static int SLAVES = 3;
@@ -108,19 +104,21 @@ public class TestFromClientSide3 {
HConnection conn = HConnectionManager.getConnection(TEST_UTIL
.getConfiguration());
HRegionLocation loc = table.getRegionLocation(row, true);
- HRegionInterface server = conn.getHRegionConnection(loc.getHostname(), loc
+ AdminProtocol server = conn.getAdmin(loc.getHostname(), loc
.getPort());
byte[] regName = loc.getRegionInfo().getRegionName();
for (int i = 0; i < nFlushes; i++) {
randomCFPuts(table, row, family, nPuts);
- int sfCount = server.getStoreFileList(regName, FAMILY).size();
+ List<String> sf = ProtobufUtil.getStoreFiles(server, regName, FAMILY);
+ int sfCount = sf.size();
// TODO: replace this api with a synchronous flush after HBASE-2949
admin.flush(table.getTableName());
// synchronously poll wait for a new storefile to appear (flush happened)
- while (server.getStoreFileList(regName, FAMILY).size() == sfCount) {
+ while (ProtobufUtil.getStoreFiles(
+ server, regName, FAMILY).size() == sfCount) {
Thread.sleep(40);
}
}
@@ -154,9 +152,10 @@ public class TestFromClientSide3 {
// Verify we have multiple store files.
HRegionLocation loc = hTable.getRegionLocation(row, true);
byte[] regionName = loc.getRegionInfo().getRegionName();
- HRegionInterface server = connection.getHRegionConnection(
- loc.getHostname(), loc.getPort());
- assertTrue(server.getStoreFileList(regionName, FAMILY).size() > 1);
+ AdminProtocol server = connection.getAdmin(
+ loc.getHostname(), loc.getPort());
+ assertTrue(ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size() > 1);
// Issue a compaction request
admin.compact(TABLE);
@@ -167,16 +166,17 @@ public class TestFromClientSide3 {
loc = hTable.getRegionLocation(row, true);
if (!loc.getRegionInfo().isOffline()) {
regionName = loc.getRegionInfo().getRegionName();
- server = connection.getHRegionConnection(loc.getHostname(), loc
- .getPort());
- if (server.getStoreFileList(regionName, FAMILY).size() <= 1) {
+ server = connection.getAdmin(loc.getHostname(), loc.getPort());
+ if (ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size() <= 1) {
break;
}
}
Thread.sleep(40);
}
// verify the compactions took place and that we didn't just time out
- assertTrue(server.getStoreFileList(regionName, FAMILY).size() <= 1);
+ assertTrue(ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size() <= 1);
// change the compaction.min config option for this table to 5
LOG.info("hbase.hstore.compaction.min should now be 5");
@@ -198,11 +198,11 @@ public class TestFromClientSide3 {
// This time, the compaction request should not happen
Thread.sleep(10 * 1000);
- int sfCount = 0;
loc = hTable.getRegionLocation(row, true);
regionName = loc.getRegionInfo().getRegionName();
- server = connection.getHRegionConnection(loc.getHostname(), loc.getPort());
- sfCount = server.getStoreFileList(regionName, FAMILY).size();
+ server = connection.getAdmin(loc.getHostname(), loc.getPort());
+ int sfCount = ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size();
assertTrue(sfCount > 1);
// change an individual CF's config option to 2 & online schema update
@@ -225,9 +225,10 @@ public class TestFromClientSide3 {
loc = hTable.getRegionLocation(row, true);
regionName = loc.getRegionInfo().getRegionName();
try {
- server = connection.getHRegionConnection(loc.getHostname(), loc
+ server = connection.getAdmin(loc.getHostname(), loc
.getPort());
- if (server.getStoreFileList(regionName, FAMILY).size() < sfCount) {
+ if (ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size() < sfCount) {
break;
}
} catch (Exception e) {
@@ -236,7 +237,8 @@ public class TestFromClientSide3 {
Thread.sleep(40);
}
// verify the compaction took place and that we didn't just time out
- assertTrue(server.getStoreFileList(regionName, FAMILY).size() < sfCount);
+ assertTrue(ProtobufUtil.getStoreFiles(
+ server, regionName, FAMILY).size() < sfCount);
// Finally, ensure that we can remove a custom config value after we made it
LOG.info("Removing CF config value");
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestHTableUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestHTableUtil.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestHTableUtil.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestHTableUtil.java Mon Apr 23 18:12:16 2012
@@ -42,7 +42,6 @@ import org.junit.experimental.categories
public class TestHTableUtil {
final Log LOG = LogFactory.getLog(getClass());
private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
- private static byte [] ROW = Bytes.toBytes("testRow");
private static byte [] FAMILY = Bytes.toBytes("testFamily");
private static byte [] QUALIFIER = Bytes.toBytes("testQualifier");
private static byte [] VALUE = Bytes.toBytes("testValue");
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java Mon Apr 23 18:12:16 2012
@@ -42,13 +42,13 @@ import org.apache.hadoop.hbase.HRegionLo
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.LargeTests;
import org.apache.hadoop.hbase.TableExistsException;
+import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.client.ServerCallable;
-import org.apache.hadoop.hbase.ipc.HRegionInterface;
+import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
import org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoad;
import org.apache.hadoop.hbase.util.Bytes;
@@ -60,6 +60,8 @@ import org.junit.experimental.categories
import org.mockito.Mockito;
import com.google.common.collect.Multimap;
+import com.google.protobuf.RpcController;
+import com.google.protobuf.ServiceException;
/**
* Test cases for the atomic load error handling of the bulk load functionality.
@@ -259,7 +261,7 @@ public class TestLoadIncrementalHFilesSp
}
private HConnection getMockedConnection(final Configuration conf)
- throws IOException {
+ throws IOException, ServiceException {
HConnection c = Mockito.mock(HConnection.class);
Mockito.when(c.getConfiguration()).thenReturn(conf);
Mockito.doNothing().when(c).close();
@@ -271,10 +273,10 @@ public class TestLoadIncrementalHFilesSp
thenReturn(loc);
Mockito.when(c.locateRegion((byte[]) Mockito.any(), (byte[]) Mockito.any())).
thenReturn(loc);
- HRegionInterface hri = Mockito.mock(HRegionInterface.class);
- Mockito.when(hri.bulkLoadHFiles(Mockito.anyList(), (byte [])Mockito.any())).
- thenThrow(new IOException("injecting bulk load error"));
- Mockito.when(c.getHRegionConnection(Mockito.anyString(), Mockito.anyInt())).
+ ClientProtocol hri = Mockito.mock(ClientProtocol.class);
+ Mockito.when(hri.bulkLoadHFile((RpcController)Mockito.any(), (BulkLoadHFileRequest)Mockito.any())).
+ thenThrow(new ServiceException(new IOException("injecting bulk load error")));
+ Mockito.when(c.getClient(Mockito.anyString(), Mockito.anyInt())).
thenReturn(hri);
return c;
}