You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2013/01/25 03:38:31 UTC

svn commit: r1438298 - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/master/HMaster.java main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java test/java/org/apache/hadoop/hbase/client/TestAdmin.java

Author: mbertozzi
Date: Fri Jan 25 02:38:31 2013
New Revision: 1438298

URL: http://svn.apache.org/viewvc?rev=1438298&view=rev
Log:
HBASE-7657 Make ModifyTableHandler synchronous (Himanshu Vashishtha)

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1438298&r1=1438297&r2=1438298&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Fri Jan 25 02:38:31 2013
@@ -1772,9 +1772,8 @@ Server {
     if (cpHost != null) {
       cpHost.preModifyTable(tableName, descriptor);
     }
-    TableEventHandler tblHandle = new ModifyTableHandler(tableName, descriptor, this, this);
-    this.executorService.submit(tblHandle);
-    tblHandle.waitForPersist();
+    new ModifyTableHandler(tableName, descriptor, this, this).process();
+
     if (cpHost != null) {
       cpHost.postModifyTable(tableName, descriptor);
     }

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java?rev=1438298&r1=1438297&r2=1438298&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java Fri Jan 25 02:38:31 2013
@@ -61,7 +61,6 @@ public abstract class TableEventHandler 
   protected final MasterServices masterServices;
   protected final byte [] tableName;
   protected final String tableNameStr;
-  protected boolean persistedToZk = false;
 
   public TableEventHandler(EventType eventType, byte [] tableName, Server server,
       MasterServices masterServices)
@@ -111,10 +110,7 @@ public abstract class TableEventHandler 
       LOG.error("Error manipulating table " + Bytes.toString(tableName), e);
     } catch (KeeperException e) {
       LOG.error("Error manipulating table " + Bytes.toString(tableName), e);
-    } finally {
-      // notify the waiting thread that we're done persisting the request
-      setPersist();
-    }
+    } 
   }
 
   public boolean reOpenAllRegions(List<HRegionInfo> regions) throws IOException {
@@ -165,29 +161,6 @@ public abstract class TableEventHandler 
     return done;
   }
 
-  /**
-   * Table modifications are processed asynchronously, but provide an API for
-   * you to query their status.
-   *
-   * @throws IOException
-   */
-  public synchronized void waitForPersist() throws IOException {
-    if (!persistedToZk) {
-      try {
-        wait();
-      } catch (InterruptedException ie) {
-        throw (IOException) new InterruptedIOException().initCause(ie);
-      }
-      assert persistedToZk;
-    }
-  }
-
-  private synchronized void setPersist() {
-    if (!persistedToZk) {
-      persistedToZk = true;
-      notify();
-    }
-  }
 
   /**
    * @return Table descriptor for this table

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java?rev=1438298&r1=1438297&r2=1438298&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java Fri Jan 25 02:38:31 2013
@@ -385,7 +385,7 @@ public class TestAdmin {
     copy.setValue(key, key);
     boolean expectedException = false;
     try {
-      modifyTable(tableName, copy);
+      admin.modifyTable(tableName, copy);
     } catch (TableNotDisabledException re) {
       expectedException = true;
     }
@@ -474,7 +474,7 @@ public class TestAdmin {
     copy.setValue(key, key);
     boolean expectedException = false;
     try {
-      modifyTable(tableName, copy);
+      admin.modifyTable(tableName, copy);
     } catch (TableNotDisabledException re) {
       expectedException = true;
     }
@@ -486,32 +486,6 @@ public class TestAdmin {
   }
 
   /**
-   * Modify table is async so wait on completion of the table operation in master.
-   * @param tableName
-   * @param htd
-   * @throws IOException
-   */
-  private void modifyTable(final byte [] tableName, final HTableDescriptor htd)
-  throws IOException {
-    MasterServices services = TEST_UTIL.getMiniHBaseCluster().getMaster();
-    ExecutorService executor = services.getExecutorService();
-    AtomicBoolean done = new AtomicBoolean(false);
-    executor.registerListener(EventType.C_M_MODIFY_TABLE, new DoneListener(done));
-    this.admin.modifyTable(tableName, htd);
-    while (!done.get()) {
-      //noinspection SynchronizationOnLocalVariableOrMethodParameter
-      synchronized (done) {
-        try {
-          done.wait(100);
-        } catch (InterruptedException e) {
-          e.printStackTrace();
-        }
-      }
-    }
-    executor.unregisterListener(EventType.C_M_MODIFY_TABLE);
-  }
-
-  /**
    * Listens for when an event is done in Master.
    */
   static class DoneListener implements EventHandler.EventHandlerListener {