HBASE-5041 Major compaction on non existing table does not throw error (Shrijeet)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1228507 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
30a0a2c6d6
commit
28bbeb76c2
@ -861,6 +861,7 @@ Release 0.90.6 - Unreleased
|
||||
HBASE-4970 Add a parameter so that keepAliveTime of Htable thread pool can be changed (gaojinchao)
|
||||
HBASE-5060 HBase client is blocked forever (Jinchao)
|
||||
HBASE-5009 Failure of creating split dir if it already exists prevents splits from happening further
|
||||
HBASE-5041 Major compaction on non existing table does not throw error (Shrijeet)
|
||||
|
||||
Release 0.90.5 - Released
|
||||
|
||||
|
@ -1140,8 +1140,8 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
*/
|
||||
public void flush(final byte [] tableNameOrRegionName)
|
||||
throws IOException, InterruptedException {
|
||||
boolean isRegionName = isRegionName(tableNameOrRegionName);
|
||||
CatalogTracker ct = getCatalogTracker();
|
||||
boolean isRegionName = isRegionName(tableNameOrRegionName, ct);
|
||||
try {
|
||||
if (isRegionName) {
|
||||
Pair<HRegionInfo, ServerName> pair =
|
||||
@ -1153,9 +1153,10 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
flush(pair.getSecond(), pair.getFirst());
|
||||
}
|
||||
} else {
|
||||
final String tableName = tableNameString(tableNameOrRegionName, ct);
|
||||
List<Pair<HRegionInfo, ServerName>> pairs =
|
||||
MetaReader.getTableRegionsAndLocations(ct,
|
||||
Bytes.toString(tableNameOrRegionName));
|
||||
tableName);
|
||||
for (Pair<HRegionInfo, ServerName> pair: pairs) {
|
||||
if (pair.getFirst().isOffline()) continue;
|
||||
if (pair.getSecond() == null) continue;
|
||||
@ -1246,7 +1247,7 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
throws IOException, InterruptedException {
|
||||
CatalogTracker ct = getCatalogTracker();
|
||||
try {
|
||||
if (isRegionName(tableNameOrRegionName)) {
|
||||
if (isRegionName(tableNameOrRegionName, ct)) {
|
||||
Pair<HRegionInfo, ServerName> pair =
|
||||
MetaReader.getRegion(ct, tableNameOrRegionName);
|
||||
if (pair == null || pair.getSecond() == null) {
|
||||
@ -1256,9 +1257,10 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
compact(pair.getSecond(), pair.getFirst(), major);
|
||||
}
|
||||
} else {
|
||||
final String tableName = tableNameString(tableNameOrRegionName, ct);
|
||||
List<Pair<HRegionInfo, ServerName>> pairs =
|
||||
MetaReader.getTableRegionsAndLocations(ct,
|
||||
Bytes.toString(tableNameOrRegionName));
|
||||
tableName);
|
||||
for (Pair<HRegionInfo, ServerName> pair: pairs) {
|
||||
if (pair.getFirst().isOffline()) continue;
|
||||
if (pair.getSecond() == null) continue;
|
||||
@ -1402,7 +1404,7 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
final byte [] splitPoint) throws IOException, InterruptedException {
|
||||
CatalogTracker ct = getCatalogTracker();
|
||||
try {
|
||||
if (isRegionName(tableNameOrRegionName)) {
|
||||
if (isRegionName(tableNameOrRegionName, ct)) {
|
||||
// Its a possible region name.
|
||||
Pair<HRegionInfo, ServerName> pair =
|
||||
MetaReader.getRegion(ct, tableNameOrRegionName);
|
||||
@ -1413,9 +1415,10 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
split(pair.getSecond(), pair.getFirst(), splitPoint);
|
||||
}
|
||||
} else {
|
||||
final String tableName = tableNameString(tableNameOrRegionName, ct);
|
||||
List<Pair<HRegionInfo, ServerName>> pairs =
|
||||
MetaReader.getTableRegionsAndLocations(ct,
|
||||
Bytes.toString(tableNameOrRegionName));
|
||||
tableName);
|
||||
for (Pair<HRegionInfo, ServerName> pair: pairs) {
|
||||
// May not be a server for a particular row
|
||||
if (pair.getSecond() == null) continue;
|
||||
@ -1463,17 +1466,38 @@ public class HBaseAdmin implements Abortable, Closeable {
|
||||
|
||||
/**
|
||||
* @param tableNameOrRegionName Name of a table or name of a region.
|
||||
* @return True if <code>tableNameOrRegionName</code> is *possibly* a region
|
||||
* name else false if a verified tablename (we call {@link #tableExists(byte[])};
|
||||
* else we throw an exception.
|
||||
* @param ct A {@link #CatalogTracker} instance (caller of this method usually has one).
|
||||
* @return True if <code>tableNameOrRegionName</code> is a verified region
|
||||
* name (we call {@link #MetaReader.getRegion(CatalogTracker catalogTracker,
|
||||
* byte [] regionName)};) else false.
|
||||
* Throw an exception if <code>tableNameOrRegionName</code> is null.
|
||||
* @throws IOException
|
||||
*/
|
||||
private boolean isRegionName(final byte [] tableNameOrRegionName)
|
||||
private boolean isRegionName(final byte[] tableNameOrRegionName,
|
||||
CatalogTracker ct)
|
||||
throws IOException {
|
||||
if (tableNameOrRegionName == null) {
|
||||
throw new IllegalArgumentException("Pass a table name or region name");
|
||||
}
|
||||
return !tableExists(tableNameOrRegionName);
|
||||
return (MetaReader.getRegion(ct, tableNameOrRegionName) != null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the table name byte array into a table name string and check if table
|
||||
* exists or not.
|
||||
* @param tableNameBytes Name of a table.
|
||||
* @param ct A {@link #CatalogTracker} instance (caller of this method usually has one).
|
||||
* @return tableName in string form.
|
||||
* @throws IOException if a remote or network exception occurs.
|
||||
* @throws TableNotFoundException if table does not exist.
|
||||
*/
|
||||
private String tableNameString(final byte[] tableNameBytes, CatalogTracker ct)
|
||||
throws IOException {
|
||||
String tableNameString = Bytes.toString(tableNameBytes);
|
||||
if (!MetaReader.tableExists(ct, tableNameString)) {
|
||||
throw new TableNotFoundException(tableNameString);
|
||||
}
|
||||
return tableNameString;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -89,6 +89,34 @@ public class TestAdmin {
|
||||
public void tearDown() throws Exception {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSplitFlushCompactUnknownTable() throws InterruptedException {
|
||||
final String unknowntable = "fubar";
|
||||
Exception exception = null;
|
||||
try {
|
||||
this.admin.compact(unknowntable);
|
||||
} catch (IOException e) {
|
||||
exception = e;
|
||||
}
|
||||
assertTrue(exception instanceof TableNotFoundException);
|
||||
|
||||
exception = null;
|
||||
try {
|
||||
this.admin.flush(unknowntable);
|
||||
} catch (IOException e) {
|
||||
exception = e;
|
||||
}
|
||||
assertTrue(exception instanceof TableNotFoundException);
|
||||
|
||||
exception = null;
|
||||
try {
|
||||
this.admin.split(unknowntable);
|
||||
} catch (IOException e) {
|
||||
exception = e;
|
||||
}
|
||||
assertTrue(exception instanceof TableNotFoundException);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteEditUnknownColumnFamilyAndOrTable() throws IOException {
|
||||
// Test we get exception if we try to
|
||||
|
Loading…
x
Reference in New Issue
Block a user