Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.DeleteTableState;
import org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;

@InterfaceAudience.Private
public class DeleteTableProcedure
Expand Down Expand Up @@ -281,9 +282,18 @@ protected static void deleteFromFs(final MasterProcedureEnv env,
if (fs.exists(tableDir)) {
// Archive regions from FS (temp directory)
if (archive) {
List<Path> regionDirList = regions.stream().filter(RegionReplicaUtil::isDefaultReplica)
.map(region ->
FSUtils.getRegionDirFromTableDir(tableDir, region)).collect(Collectors.toList());
List<Path> regionDirList = new ArrayList<>();
for (RegionInfo region : regions) {
if (RegionReplicaUtil.isDefaultReplica(region)) {
regionDirList.add(FSUtils.getRegionDirFromTableDir(tableDir, region));
List<RegionInfo> mergeRegions =
env.getAssignmentManager().getRegionStateStore().getMergeRegions(region);
if (!CollectionUtils.isEmpty(mergeRegions)) {
mergeRegions.stream().forEach(
r -> regionDirList.add(FSUtils.getRegionDirFromTableDir(tableDir, r)));
}
}
}
HFileArchiver
.archiveRegions(env.getMasterConfiguration(), fs, mfs.getRootDir(), tableDir,
regionDirList);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,48 @@ public void testMergeRegion() throws Exception {
}
}

@Test
public void testDeleteTableWithMergedRegions() throws Exception {
setupCluster();
final TableName tableName = TableName.valueOf(this.name.getMethodName());
String snapshotName = tableName.getNameAsString() + "_snapshot";
Configuration conf = UTIL.getConfiguration();
try (Admin admin = UTIL.getConnection().getAdmin()) {
// disable compaction
admin.compactionSwitch(false,
admin.getRegionServers().stream().map(s -> s.getServerName()).collect(Collectors.toList()));
// create table
Table table = UTIL.createTable(tableName, FAMILIES, 1, bbb, yyy, 3);
List<RegionInfo> regions = admin.getRegions(tableName);
Assert.assertEquals(3, regions.size());
// write some data
UTIL.loadTable(table, FAMILIES);
// merge region
admin.mergeRegionsAsync(new byte[][] { regions.get(0).getEncodedNameAsBytes(),
regions.get(1).getEncodedNameAsBytes() },
false).get();
regions = admin.getRegions(tableName);
Assert.assertEquals(2, regions.size());
// snapshot
admin.snapshot(snapshotName, tableName);
// verify snapshot
try (TableSnapshotScanner scanner =
new TableSnapshotScanner(conf, UTIL.getDataTestDirOnTestFS(snapshotName), snapshotName,
new Scan().withStartRow(bbb).withStopRow(yyy))) {
verifyScanner(scanner, bbb, yyy);
}
// drop table
admin.disableTable(tableName);
admin.deleteTable(tableName);
// verify snapshot
try (TableSnapshotScanner scanner =
new TableSnapshotScanner(conf, UTIL.getDataTestDirOnTestFS(snapshotName), snapshotName,
new Scan().withStartRow(bbb).withStopRow(yyy))) {
verifyScanner(scanner, bbb, yyy);
}
}
}

private void traverseAndSetFileTime(Path path, long time) throws IOException {
fs.setTimes(path, time, -1);
if (fs.isDirectory(path)) {
Expand Down