You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/01/18 08:23:36 UTC

hbase git commit: HBASE-19812 TestFlushSnapshotFromClient fails because of failing region.flush

Repository: hbase
Updated Branches:
  refs/heads/master e3d15834c -> 678b98a72


HBASE-19812 TestFlushSnapshotFromClient fails because of failing region.flush


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/678b98a7
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/678b98a7
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/678b98a7

Branch: refs/heads/master
Commit: 678b98a72668bccbdb5bf7621c7e71afc05d6ffa
Parents: e3d1583
Author: zhangduo <zh...@apache.org>
Authored: Thu Jan 18 12:50:30 2018 +0800
Committer: zhangduo <zh...@apache.org>
Committed: Thu Jan 18 16:23:07 2018 +0800

----------------------------------------------------------------------
 .../apache/hadoop/hbase/MiniHBaseCluster.java   | 34 +++++++++++---------
 1 file changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/678b98a7/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
index 92715ee..e7f8496 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.regionserver.HRegion;
+import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.regionserver.Region;
 import org.apache.hadoop.hbase.security.User;
@@ -386,7 +387,6 @@ public class MiniHBaseCluster extends HBaseCluster {
    * within the timeout.
    *
    * @return New RegionServerThread
-   * @throws IOException
    */
   public JVMClusterUtil.RegionServerThread startRegionServerAndWait(long timeout)
       throws IOException {
@@ -463,7 +463,6 @@ public class MiniHBaseCluster extends HBaseCluster {
   /**
    * Starts a master thread running
    *
-   * @throws IOException
    * @return New RegionServerThread
    */
   public JVMClusterUtil.MasterThread startMaster() throws IOException {
@@ -615,9 +614,7 @@ public class MiniHBaseCluster extends HBaseCluster {
 
   /**
    * Shut down the mini HBase cluster
-   * @throws IOException
    */
-  @SuppressWarnings("deprecation")
   public void shutdown() throws IOException {
     if (this.hbaseCluster != null) {
       this.hbaseCluster.shutdown();
@@ -644,29 +641,36 @@ public class MiniHBaseCluster extends HBaseCluster {
     return master == null ? null : master.getClusterMetrics();
   }
 
+  private void executeFlush(HRegion region) throws IOException {
+    // retry 5 times if we can not flush
+    for (int i = 0; i < 5; i++) {
+      FlushResult result = region.flush(true);
+      if (result.getResult() != FlushResult.Result.CANNOT_FLUSH) {
+        return;
+      }
+      Threads.sleep(1000);
+    }
+  }
+
   /**
    * Call flushCache on all regions on all participating regionservers.
-   * @throws IOException
    */
   public void flushcache() throws IOException {
-    for (JVMClusterUtil.RegionServerThread t:
-        this.hbaseCluster.getRegionServers()) {
-      for(HRegion r: t.getRegionServer().getOnlineRegionsLocalContext()) {
-        r.flush(true);
+    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {
+      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {
+        executeFlush(r);
       }
     }
   }
 
   /**
    * Call flushCache on all regions of the specified table.
-   * @throws IOException
    */
   public void flushcache(TableName tableName) throws IOException {
-    for (JVMClusterUtil.RegionServerThread t:
-        this.hbaseCluster.getRegionServers()) {
-      for(HRegion r: t.getRegionServer().getOnlineRegionsLocalContext()) {
-        if(r.getTableDescriptor().getTableName().equals(tableName)) {
-          r.flush(true);
+    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {
+      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {
+        if (r.getTableDescriptor().getTableName().equals(tableName)) {
+          executeFlush(r);
         }
       }
     }