From 1d12d7bdd2158b602d44bc5b92367705b88ab2b2 Mon Sep 17 00:00:00 2001 From: Ashish Singhi Date: Thu, 19 Nov 2015 16:37:58 +0530 Subject: [PATCH] HBASE-14840 Sink cluster reports data replication request as success though the data is not replicated --- .../hadoop/hbase/regionserver/RSRpcServices.java | 6 +++-- .../hbase/replication/TestMasterReplication.java | 27 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 5729334..d94e11c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -1794,16 +1794,18 @@ public class RSRpcServices implements HBaseRPCErrorHandler, public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller, final ReplicateWALEntryRequest request) throws ServiceException { try { + checkOpen(); if (regionServer.replicationSinkHandler != null) { - checkOpen(); requestCount.increment(); List entries = request.getEntryList(); CellScanner cellScanner = ((PayloadCarryingRpcController)controller).cellScanner(); regionServer.getRegionServerCoprocessorHost().preReplicateLogEntries(entries, cellScanner); regionServer.replicationSinkHandler.replicateLogEntries(entries, cellScanner); regionServer.getRegionServerCoprocessorHost().postReplicateLogEntries(entries, cellScanner); + return ReplicateWALEntryResponse.newBuilder().build(); + } else { + throw new ServiceException("Replication services are not initialized yet"); } - return ReplicateWALEntryResponse.newBuilder().build(); } catch (IOException ie) { throw new ServiceException(ie); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java index 184fd14..455a790 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java @@ -48,6 +48,8 @@ import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver; import org.apache.hadoop.hbase.coprocessor.CoprocessorHost; import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; +import org.apache.hadoop.hbase.regionserver.HRegionServer; +import org.apache.hadoop.hbase.regionserver.RSRpcServices; import org.apache.hadoop.hbase.regionserver.wal.WALEdit; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.ReplicationTests; @@ -59,6 +61,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; +import com.google.protobuf.ServiceException; + @Category({ReplicationTests.class, LargeTests.class}) public class TestMasterReplication { @@ -245,6 +249,29 @@ public class TestMasterReplication { } } + /* + * Test RSRpcServices#replicateWALEntry when replication is disabled. This is to simulate + * HBASE-14840 + */ + @Test(timeout = 180000, expected = ServiceException.class) + public void testReplicateWALEntryWhenReplicationIsDisabled() throws Exception { + LOG.info("testSimplePutDelete"); + baseConfiguration.setBoolean(HConstants.REPLICATION_ENABLE_KEY, false); + Table[] htables = null; + try { + startMiniClusters(1); + createTableOnClusters(table); + htables = getHTablesOnClusters(tableName); + + HRegionServer rs = utilities[0].getRSForFirstRegionInTable(tableName); + RSRpcServices rsrpc = new RSRpcServices(rs); + rsrpc.replicateWALEntry(null, null); + } finally { + close(htables); + shutDownMiniClusters(); + } + } + @After public void tearDown() throws IOException { configurations = null; -- 1.9.2.msysgit.0