You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/02/06 12:46:59 UTC
[10/50] hbase git commit: HBASE-19934 HBaseSnapshotException when
read replicas is enabled and online snapshot is taken after region splitting
(Toshihiro Suzuki)
HBASE-19934 HBaseSnapshotException when read replicas is enabled and online snapshot is taken after region splitting (Toshihiro Suzuki)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b9175680
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b9175680
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b9175680
Branch: refs/heads/HBASE-19397-branch-2
Commit: b9175680b6e958a5e39b0d16f696201dbcd9ee7c
Parents: 53e5707
Author: tedyu <yu...@gmail.com>
Authored: Mon Feb 5 21:06:20 2018 -0800
Committer: tedyu <yu...@gmail.com>
Committed: Mon Feb 5 21:06:20 2018 -0800
----------------------------------------------------------------------
.../snapshot/EnabledTableSnapshotHandler.java | 4 +++-
.../client/TestRestoreSnapshotFromClient.java | 20 ++++++++++------
...oreSnapshotFromClientWithRegionReplicas.java | 25 ++++++++++++++++++++
3 files changed, 41 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b9175680/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
index 6cf1200..0872443 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.RegionInfo;
+import org.apache.hadoop.hbase.client.RegionReplicaUtil;
import org.apache.hadoop.hbase.errorhandling.ForeignException;
import org.apache.hadoop.hbase.master.MasterServices;
import org.apache.hadoop.hbase.mob.MobUtils;
@@ -98,7 +99,8 @@ public class EnabledTableSnapshotHandler extends TakeSnapshotHandler {
// Take the offline regions as disabled
for (Pair<RegionInfo, ServerName> region : regions) {
RegionInfo regionInfo = region.getFirst();
- if (regionInfo.isOffline() && (regionInfo.isSplit() || regionInfo.isSplitParent())) {
+ if (regionInfo.isOffline() && (regionInfo.isSplit() || regionInfo.isSplitParent()) &&
+ RegionReplicaUtil.isDefaultReplica(regionInfo)) {
LOG.info("Take disabled snapshot of offline region=" + regionInfo);
snapshotDisabledRegion(regionInfo);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b9175680/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java
index 3eb304d..2556bec 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
+
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseClassTestRule;
@@ -67,13 +68,13 @@ public class TestRestoreSnapshotFromClient {
protected final byte[] TEST_FAMILY2 = Bytes.toBytes("cf2");
protected TableName tableName;
- private byte[] emptySnapshot;
- private byte[] snapshotName0;
- private byte[] snapshotName1;
- private byte[] snapshotName2;
- private int snapshot0Rows;
- private int snapshot1Rows;
- private Admin admin;
+ protected byte[] emptySnapshot;
+ protected byte[] snapshotName0;
+ protected byte[] snapshotName1;
+ protected byte[] snapshotName2;
+ protected int snapshot0Rows;
+ protected int snapshot1Rows;
+ protected Admin admin;
@Rule
public TestName name = new TestName();
@@ -321,4 +322,9 @@ public class TestRestoreSnapshotFromClient {
protected int countRows(final Table table, final byte[]... families) throws IOException {
return TEST_UTIL.countRows(table, families);
}
+
+ protected void splitRegion(final RegionInfo regionInfo) throws IOException {
+ byte[][] splitPoints = Bytes.split(regionInfo.getStartKey(), regionInfo.getEndKey(), 1);
+ admin.split(regionInfo.getTable(), splitPoints[1]);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b9175680/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java
index 7f5dfa2..d301098 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java
@@ -17,12 +17,18 @@
*/
package org.apache.hadoop.hbase.client;
+import java.io.IOException;
+import java.util.List;
+
import org.apache.hadoop.hbase.HBaseClassTestRule;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.junit.ClassRule;
+import org.junit.Test;
import org.junit.experimental.categories.Category;
+
@Category({LargeTests.class, ClientTests.class})
public class TestRestoreSnapshotFromClientWithRegionReplicas extends
TestRestoreSnapshotFromClient {
@@ -35,4 +41,23 @@ public class TestRestoreSnapshotFromClientWithRegionReplicas extends
protected int getNumReplicas() {
return 3;
}
+
+ @Test
+ public void testOnlineSnapshotAfterSplittingRegions() throws IOException, InterruptedException {
+ List<RegionInfo> regionInfos = admin.getRegions(tableName);
+ RegionReplicaUtil.removeNonDefaultRegions(regionInfos);
+
+ // Split a region
+ splitRegion(regionInfos.get(0));
+
+ // Take a online snapshot
+ admin.snapshot(snapshotName1, tableName);
+
+ // Clone the snapshot to another table
+ TableName clonedTableName = TableName.valueOf(name.getMethodName() + "-" +
+ System.currentTimeMillis());
+ admin.cloneSnapshot(snapshotName1, clonedTableName);
+
+ verifyRowCount(TEST_UTIL, clonedTableName, snapshot1Rows);
+ }
}