You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2016/09/28 20:21:07 UTC
hbase git commit: HBASE-16673 Enhance history command: history per
backup set (Vladimir Rodionov)
Repository: hbase
Updated Branches:
refs/heads/HBASE-7912 c3a960f2e -> e35f7b920
HBASE-16673 Enhance history command: history per backup set (Vladimir Rodionov)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e35f7b92
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e35f7b92
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e35f7b92
Branch: refs/heads/HBASE-7912
Commit: e35f7b920e80daa79631aa3c8c9846405658be21
Parents: c3a960f
Author: tedyu <yu...@gmail.com>
Authored: Wed Sep 28 13:20:58 2016 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Wed Sep 28 13:20:58 2016 -0700
----------------------------------------------------------------------
.../apache/hadoop/hbase/backup/BackupInfo.java | 9 ++++
.../hbase/backup/impl/BackupCommands.java | 48 +++++++++++++++-----
.../hbase/backup/util/BackupClientUtil.java | 36 +++++++--------
.../apache/hadoop/hbase/client/BackupAdmin.java | 6 +--
.../hadoop/hbase/client/HBaseBackupAdmin.java | 23 ++++++++--
.../hbase/backup/TestBackupShowHistory.java | 36 +++++++++++++--
6 files changed, 116 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/BackupInfo.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/BackupInfo.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/BackupInfo.java
index df8860a..be5ffea 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/BackupInfo.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/BackupInfo.java
@@ -51,6 +51,15 @@ import org.apache.hadoop.hbase.util.Bytes;
public class BackupInfo implements Comparable<BackupInfo> {
private static final Log LOG = LogFactory.getLog(BackupInfo.class);
+ public static interface Filter {
+
+ /**
+ * Filter interface
+ * @param info: backup info
+ * @return true if info passes filter, false otherwise
+ */
+ public boolean apply(BackupInfo info);
+ }
// backup status flag
public static enum BackupState {
WAITING, RUNNING, COMPLETE, FAILED, ANY;
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java
index 06ff419..2ff5756 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java
@@ -463,25 +463,44 @@ public final class BackupCommands {
public void execute() throws IOException {
super.execute();
-
+
int n = parseHistoryLength();
- TableName tableName = getTableName();
+ final TableName tableName = getTableName();
+ final String setName = getTableSetName();
+ BackupInfo.Filter tableNameFilter = new BackupInfo.Filter() {
+ @Override
+ public boolean apply(BackupInfo info) {
+ if (tableName == null) return true;
+ List<TableName> names = info.getTableNames();
+ return names.contains(tableName);
+ }
+ };
+ BackupInfo.Filter tableSetFilter = new BackupInfo.Filter() {
+ @Override
+ public boolean apply(BackupInfo info) {
+ if (setName == null) return true;
+ String backupId = info.getBackupId();
+ return backupId.startsWith(setName);
+ }
+ };
Path backupRootPath = getBackupRootPath();
List<BackupInfo> history = null;
- Configuration conf = getConf() != null? getConf(): HBaseConfiguration.create();
- if(backupRootPath == null) {
+ Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();
+ if (backupRootPath == null) {
// Load from hbase:backup
- try(final Connection conn = ConnectionFactory.createConnection(conf);
- final BackupAdmin admin = conn.getAdmin().getBackupAdmin();){
- history = admin.getHistory(n, tableName);
- }
+ try (final Connection conn = ConnectionFactory.createConnection(conf);
+ final BackupAdmin admin = conn.getAdmin().getBackupAdmin();) {
+
+ history = admin.getHistory(n, tableNameFilter, tableSetFilter);
+ }
} else {
// load from backup FS
- history = BackupClientUtil.getHistory(conf, n, tableName, backupRootPath);
- }
- for(BackupInfo info: history){
+ history = BackupClientUtil.getHistory(conf, n, backupRootPath,
+ tableNameFilter, tableSetFilter);
+ }
+ for (BackupInfo info : history) {
System.out.println(info.getShortDescription());
- }
+ }
}
private Path getBackupRootPath() throws IOException {
@@ -509,6 +528,11 @@ public final class BackupCommands {
}
}
+ private String getTableSetName() throws IOException {
+ String value = cmdline.getOptionValue("set");
+ return value;
+ }
+
private int parseHistoryLength() throws IOException {
String value = cmdline.getOptionValue("n");
try{
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java
index 4f22164..c22f51b 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java
@@ -359,7 +359,7 @@ public final class BackupClientUtil {
+ HConstants.HREGION_LOGDIR_NAME;
}
- public static List<BackupInfo> getHistory(Configuration conf, Path backupRootPath)
+ private static List<BackupInfo> getHistory(Configuration conf, Path backupRootPath)
throws IOException {
// Get all (n) history from backup root destination
FileSystem fs = FileSystem.get(conf);
@@ -396,28 +396,28 @@ public final class BackupClientUtil {
return infos;
}
- public static List<BackupInfo> getHistory(Configuration conf, int n, TableName name,
- Path backupRootPath) throws IOException {
+ public static List<BackupInfo> getHistory(Configuration conf, int n, Path backupRootPath,
+ BackupInfo.Filter... filters) throws IOException {
List<BackupInfo> infos = getHistory(conf, backupRootPath);
- if (name == null) {
- if (infos.size() <= n) return infos;
- return infos.subList(0, n);
- } else {
- List<BackupInfo> ret = new ArrayList<BackupInfo>();
- int count = 0;
- for (BackupInfo info : infos) {
- List<TableName> names = info.getTableNames();
- if (names.contains(name)) {
- ret.add(info);
- if (++count == n) {
- break;
- }
+ List<BackupInfo> ret = new ArrayList<BackupInfo>();
+ for (BackupInfo info : infos) {
+ if (ret.size() == n) {
+ break;
+ }
+ boolean passed = true;
+ for (int i = 0; i < filters.length; i++) {
+ if (!filters[i].apply(info)) {
+ passed = false;
+ break;
}
}
- return ret;
+ if (passed) {
+ ret.add(info);
+ }
}
+ return ret;
}
-
+
public static BackupInfo loadBackupInfo(Path backupRootPath, String backupId, FileSystem fs)
throws IOException {
Path backupPath = new Path(backupRootPath, backupId);
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-client/src/main/java/org/apache/hadoop/hbase/client/BackupAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/BackupAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/BackupAdmin.java
index b19dea1..2e5ca2a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/BackupAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/BackupAdmin.java
@@ -122,13 +122,13 @@ public interface BackupAdmin extends Closeable{
/**
- * Show backup history command for a table
+ * Show backup history command with filters
* @param n - last n backup sessions
- * @param name - table's name
+ * @param f - list of filters
* @return list of backup infos
* @throws IOException exception
*/
- public List<BackupInfo> getHistory(int n, TableName name) throws IOException;
+ public List<BackupInfo> getHistory(int n, BackupInfo.Filter ... f) throws IOException;
/**
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseBackupAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseBackupAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseBackupAdmin.java
index 8e08fd0..dfa2fb1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseBackupAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseBackupAdmin.java
@@ -333,12 +333,25 @@ public class HBaseBackupAdmin implements BackupAdmin {
}
@Override
- public List<BackupInfo> getHistory(int n, TableName name) throws IOException {
- if (name == null) return getHistory(n);
+ public List<BackupInfo> getHistory(int n, BackupInfo.Filter ... filters) throws IOException {
+ if (filters.length == 0) return getHistory(n);
try (final BackupSystemTable table = new BackupSystemTable(conn)) {
- List<BackupInfo> history = table.getBackupHistoryForTable(name);
- n = Math.min(n, history.size());
- return history.subList(0, n);
+ List<BackupInfo> history = table.getBackupHistory();
+ List<BackupInfo> result = new ArrayList<BackupInfo>();
+ for(BackupInfo bi: history) {
+ if(result.size() == n) break;
+ boolean passed = true;
+ for(int i=0; i < filters.length; i++) {
+ if(!filters[i].apply(bi)) {
+ passed = false;
+ break;
+ }
+ }
+ if(passed) {
+ result.add(bi);
+ }
+ }
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/e35f7b92/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestBackupShowHistory.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestBackupShowHistory.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestBackupShowHistory.java
index 4a94cb9..4594338 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestBackupShowHistory.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestBackupShowHistory.java
@@ -70,7 +70,13 @@ public class TestBackupShowHistory extends TestBackupBase {
List<BackupInfo> history = getBackupAdmin().getHistory(10);
assertTrue(findBackup(history, backupId));
- history = BackupClientUtil.getHistory(conf1, 10, null, new Path(BACKUP_ROOT_DIR));
+ BackupInfo.Filter nullFilter = new BackupInfo.Filter() {
+ @Override
+ public boolean apply(BackupInfo info) {
+ return true;
+ }
+ };
+ history = BackupClientUtil.getHistory(conf1, 10, new Path(BACKUP_ROOT_DIR), nullFilter);
assertTrue(findBackup(history, backupId));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -90,8 +96,23 @@ public class TestBackupShowHistory extends TestBackupBase {
String backupId2 = fullTableBackup(tableList);
assertTrue(checkSucceeded(backupId2));
LOG.info("backup complete: "+ table2);
+ BackupInfo.Filter tableNameFilter = new BackupInfo.Filter() {
+ @Override
+ public boolean apply(BackupInfo image) {
+ if (table1 == null) return true;
+ List<TableName> names = image.getTableNames();
+ return names.contains(table1);
+ }
+ };
+ BackupInfo.Filter tableSetFilter = new BackupInfo.Filter() {
+ @Override
+ public boolean apply(BackupInfo info) {
+ String backupId = info.getBackupId();
+ return backupId.startsWith("backup");
+ }
+ };
- history = getBackupAdmin().getHistory(10, table1);
+ history = getBackupAdmin().getHistory(10, tableNameFilter, tableSetFilter);
assertTrue(history.size() > 0);
boolean success = true;
for (BackupInfo info: history){
@@ -101,7 +122,9 @@ public class TestBackupShowHistory extends TestBackupBase {
}
}
assertTrue(success);
- history = BackupClientUtil.getHistory(conf1, 10, table1, new Path(BACKUP_ROOT_DIR));
+
+ history = BackupClientUtil.getHistory(conf1, 10, new Path(BACKUP_ROOT_DIR),
+ tableNameFilter, tableSetFilter);
assertTrue(history.size() > 0);
success = true;
for (BackupInfo info: history){
@@ -111,7 +134,12 @@ public class TestBackupShowHistory extends TestBackupBase {
}
}
assertTrue(success);
-
+
+ args = new String[]{"history", "-n", "10", "-path", BACKUP_ROOT_DIR,
+ "-t", "table1", "-set", "backup"};
+ // Run backup
+ ret = ToolRunner.run(conf1, new BackupDriver(), args);
+ assertTrue(ret == 0);
LOG.info("show_history");
}