HBASE-8461 Provide the ability to delete multiple snapshots through single command (Ted Yu)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1483574 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4473041015
commit
8806f23ee4
@ -2552,6 +2552,35 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* List all the completed snapshots matching the given regular expression.
|
||||
*
|
||||
* @param regex The regular expression to match against
|
||||
* @return - returns a List of SnapshotDescription
|
||||
* @throws IOException if a remote or network exception occurs
|
||||
*/
|
||||
public List<SnapshotDescription> listSnapshots(String regex) throws IOException {
|
||||
return listSnapshots(Pattern.compile(regex));
|
||||
}
|
||||
|
||||
/**
|
||||
* List all the completed snapshots matching the given pattern.
|
||||
*
|
||||
* @param pattern The compiled regular expression to match against
|
||||
* @return - returns a List of SnapshotDescription
|
||||
* @throws IOException if a remote or network exception occurs
|
||||
*/
|
||||
public List<SnapshotDescription> listSnapshots(Pattern pattern) throws IOException {
|
||||
List<SnapshotDescription> matched = new LinkedList<SnapshotDescription>();
|
||||
List<SnapshotDescription> snapshots = listSnapshots();
|
||||
for (SnapshotDescription snapshot : snapshots) {
|
||||
if (pattern.matcher(snapshot.getName()).matches()) {
|
||||
matched.add(snapshot);
|
||||
}
|
||||
}
|
||||
return matched;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an existing snapshot.
|
||||
* @param snapshotName name of the snapshot
|
||||
@ -2582,6 +2611,36 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete existing snapshots whose names match the pattern passed.
|
||||
* @param regex The regular expression to match against
|
||||
* @throws IOException if a remote or network exception occurs
|
||||
*/
|
||||
public void deleteSnapshots(final String regex) throws IOException {
|
||||
deleteSnapshots(Pattern.compile(regex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete existing snapshots whose names match the pattern passed.
|
||||
* @param pattern pattern for names of the snapshot to match
|
||||
* @throws IOException if a remote or network exception occurs
|
||||
*/
|
||||
public void deleteSnapshots(final Pattern pattern) throws IOException {
|
||||
List<SnapshotDescription> snapshots = listSnapshots(pattern);
|
||||
for (final SnapshotDescription snapshot : snapshots) {
|
||||
// do the delete
|
||||
execute(new MasterAdminCallable<Void>() {
|
||||
@Override
|
||||
public Void call() throws ServiceException {
|
||||
masterAdmin.deleteSnapshot(
|
||||
null,
|
||||
DeleteSnapshotRequest.newBuilder().setSnapshot(snapshot).build());
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {@link #execute(MasterAdminCallable<V>)}
|
||||
*/
|
||||
|
@ -17,12 +17,14 @@
|
||||
*/
|
||||
package org.apache.hadoop.hbase.client;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@ -140,6 +142,43 @@ public class TestSnapshotFromClient {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test HBaseAdmin#deleteSnapshots(String) which deletes snapshots whose names match the parameter
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testSnapshotDeletionWithRegex() throws Exception {
|
||||
HBaseAdmin admin = UTIL.getHBaseAdmin();
|
||||
// make sure we don't fail on listing snapshots
|
||||
SnapshotTestingUtils.assertNoSnapshots(admin);
|
||||
|
||||
// put some stuff in the table
|
||||
HTable table = new HTable(UTIL.getConfiguration(), TABLE_NAME);
|
||||
UTIL.loadTable(table, TEST_FAM);
|
||||
table.close();
|
||||
|
||||
byte[] snapshot1 = Bytes.toBytes("TableSnapshot1");
|
||||
admin.snapshot(snapshot1, TABLE_NAME);
|
||||
LOG.debug("Snapshot1 completed.");
|
||||
|
||||
byte[] snapshot2 = Bytes.toBytes("TableSnapshot2");
|
||||
admin.snapshot(snapshot2, TABLE_NAME);
|
||||
LOG.debug("Snapshot2 completed.");
|
||||
|
||||
String snapshot3 = "3rdTableSnapshot";
|
||||
admin.snapshot(Bytes.toBytes(snapshot3), TABLE_NAME);
|
||||
LOG.debug(snapshot3 + " completed.");
|
||||
|
||||
// delete the first two snapshots
|
||||
admin.deleteSnapshots("TableSnapshot.*");
|
||||
List<SnapshotDescription> snapshots = admin.listSnapshots();
|
||||
assertEquals(1, snapshots.size());
|
||||
assertEquals(snapshots.get(0).getName(), snapshot3);
|
||||
|
||||
admin.deleteSnapshot(snapshot3);
|
||||
admin.close();
|
||||
}
|
||||
/**
|
||||
* Test snapshotting a table that is offline
|
||||
* @throws Exception
|
||||
|
Loading…
x
Reference in New Issue
Block a user