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 2012/01/07 01:10:41 UTC

svn commit: r1228507 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java

Author: tedyu
Date: Sat Jan  7 00:10:41 2012
New Revision: 1228507

URL: http://svn.apache.org/viewvc?rev=1228507&view=rev
Log:
HBASE-5041  Major compaction on non existing table does not throw error (Shrijeet)

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1228507&r1=1228506&r2=1228507&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Sat Jan  7 00:10:41 2012
@@ -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
 

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1228507&r1=1228506&r2=1228507&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Sat Jan  7 00:10:41 2012
@@ -1140,8 +1140,8 @@ public class HBaseAdmin implements Abort
    */
   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 Abort
           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 Abort
   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 Abort
           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 Abort
       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 Abort
           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 Abort
 
   /**
    * @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;
   }
 
   /**

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java?rev=1228507&r1=1228506&r2=1228507&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java Sat Jan  7 00:10:41 2012
@@ -90,6 +90,34 @@ public class TestAdmin {
   }
 
   @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
     final String nonexistent = "nonexistent";