You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zy...@apache.org on 2019/04/22 22:03:25 UTC
[hbase] branch branch-2.2 updated: HBASE-22200 -
WALSplitter.hasRecoveredEdits should use same FS instance from WAL region
dir
This is an automated email from the ASF dual-hosted git repository.
zyork pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new c999cf2 HBASE-22200 - WALSplitter.hasRecoveredEdits should use same FS instance from WAL region dir
c999cf2 is described below
commit c999cf2dfffefdf2acfda9697d0629445d043a95
Author: Wellington Chevreuil <we...@gmail.com>
AuthorDate: Wed Apr 10 19:56:39 2019 +0100
HBASE-22200 - WALSplitter.hasRecoveredEdits should use same FS instance from WAL region dir
Signed-off-by: Zach York <zy...@apache.org>
---
.../master/assignment/AssignmentManagerUtil.java | 3 +-
.../org/apache/hadoop/hbase/wal/WALSplitter.java | 7 ++--
.../org/apache/hadoop/hbase/wal/TestWALSplit.java | 44 +++++++++++-----------
3 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.java
index 97ae7ea..4f9343c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.java
@@ -229,8 +229,7 @@ final class AssignmentManagerUtil {
}
static void checkClosedRegion(MasterProcedureEnv env, RegionInfo regionInfo) throws IOException {
- if (WALSplitter.hasRecoveredEdits(env.getMasterServices().getFileSystem(),
- env.getMasterConfiguration(), regionInfo)) {
+ if (WALSplitter.hasRecoveredEdits(env.getMasterConfiguration(), regionInfo)) {
throw new IOException("Recovered.edits are found in Region: " + regionInfo +
", abort split/merge to prevent data loss");
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java
index 638c574..c436db2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java
@@ -538,14 +538,13 @@ public class WALSplitter {
/**
* Check whether there is recovered.edits in the region dir
- * @param walFS FileSystem
* @param conf conf
* @param regionInfo the region to check
* @throws IOException IOException
* @return true if recovered.edits exist in the region dir
*/
- public static boolean hasRecoveredEdits(final FileSystem walFS,
- final Configuration conf, final RegionInfo regionInfo) throws IOException {
+ public static boolean hasRecoveredEdits(final Configuration conf,
+ final RegionInfo regionInfo) throws IOException {
// No recovered.edits for non default replica regions
if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {
return false;
@@ -554,7 +553,7 @@ public class WALSplitter {
//directly without converting it to default replica's regioninfo.
Path regionDir = FSUtils.getWALRegionDir(conf, regionInfo.getTable(),
regionInfo.getEncodedName());
- NavigableSet<Path> files = getSplitEditFilesSorted(walFS, regionDir);
+ NavigableSet<Path> files = getSplitEditFilesSorted(FSUtils.getWALFileSystem(conf), regionDir);
return files != null && !files.isEmpty();
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALSplit.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALSplit.java
index e6644f0..b4e2533 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALSplit.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALSplit.java
@@ -383,18 +383,7 @@ public class TestWALSplit {
*/
@Test
public void testRecoveredEditsPathForMeta() throws IOException {
- byte[] encoded = RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes();
- Path tdir = FSUtils.getTableDir(HBASEDIR, TableName.META_TABLE_NAME);
- Path regiondir = new Path(tdir,
- RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());
- fs.mkdirs(regiondir);
- long now = System.currentTimeMillis();
- Entry entry =
- new Entry(new WALKeyImpl(encoded,
- TableName.META_TABLE_NAME, 1, now, HConstants.DEFAULT_CLUSTER_ID),
- new WALEdit());
- Path p = WALSplitter.getRegionSplitEditsPath(entry,
- FILENAME_BEING_SPLIT, TMPDIRNAME, conf);
+ Path p = createRecoveredEditsPathForRegion();
String parentOfParent = p.getParent().getParent().getName();
assertEquals(parentOfParent, RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());
}
@@ -405,27 +394,40 @@ public class TestWALSplit {
*/
@Test
public void testOldRecoveredEditsFileSidelined() throws IOException {
- byte [] encoded = RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes();
+ Path p = createRecoveredEditsPathForRegion();
Path tdir = FSUtils.getTableDir(HBASEDIR, TableName.META_TABLE_NAME);
Path regiondir = new Path(tdir,
RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());
fs.mkdirs(regiondir);
- long now = System.currentTimeMillis();
- Entry entry =
- new Entry(new WALKeyImpl(encoded,
- TableName.META_TABLE_NAME, 1, now, HConstants.DEFAULT_CLUSTER_ID),
- new WALEdit());
Path parent = WALSplitter.getRegionDirRecoveredEditsDir(regiondir);
assertEquals(HConstants.RECOVERED_EDITS_DIR, parent.getName());
fs.createNewFile(parent); // create a recovered.edits file
-
- Path p = WALSplitter.getRegionSplitEditsPath(entry,
- FILENAME_BEING_SPLIT, TMPDIRNAME, conf);
String parentOfParent = p.getParent().getParent().getName();
assertEquals(parentOfParent, RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());
WALFactory.createRecoveredEditsWriter(fs, p, conf).close();
}
+ private Path createRecoveredEditsPathForRegion() throws IOException{
+ byte[] encoded = RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes();
+ long now = System.currentTimeMillis();
+ Entry entry =
+ new Entry(new WALKeyImpl(encoded,
+ TableName.META_TABLE_NAME, 1, now, HConstants.DEFAULT_CLUSTER_ID),
+ new WALEdit());
+ Path p = WALSplitter.getRegionSplitEditsPath(entry,
+ FILENAME_BEING_SPLIT, TMPDIRNAME, conf);
+ return p;
+ }
+
+ @Test
+ public void testHasRecoveredEdits() throws IOException {
+ Path p = createRecoveredEditsPathForRegion();
+ assertFalse(WALSplitter.hasRecoveredEdits(conf, RegionInfoBuilder.FIRST_META_REGIONINFO));
+ String renamedEdit = p.getName().split("-")[0];
+ fs.createNewFile(new Path(p.getParent(), renamedEdit));
+ assertTrue(WALSplitter.hasRecoveredEdits(conf, RegionInfoBuilder.FIRST_META_REGIONINFO));
+ }
+
private void useDifferentDFSClient() throws IOException {
// make fs act as a different client now
// initialize will create a new DFSClient with a new client ID