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 2012/09/19 03:52:58 UTC

svn commit: r1387433 [1/3] - in /hbase/branches/0.89-fb/src/main: java/org/apache/hadoop/hbase/ipc/ java/org/apache/hadoop/hbase/regionserver/ java/org/apache/hadoop/hbase/thrift/ java/org/apache/hadoop/hbase/thrift/generated/ resources/org/apache/hado...

Author: mbautin
Date: Wed Sep 19 01:52:58 2012
New Revision: 1387433

URL: http://svn.apache.org/viewvc?rev=1387433&view=rev
Log:
[jira] [HBASE-6808] [89-fb] Add the ability to query region flush time and current time to regionserver Thrift API

Author: mbautin

Summary: In order to do reliable bulk load with WAL turned off through the C++ API we need to be able to query last flush times for all regions on a regionserver as well as the current time on the server. By only comparing timestamps that come from the same regionserver we avoid being affected by clock skew.

Test Plan:
Unit tests.
Test through the C++ HBase client.

Reviewers: aaiyer, kranganathan

Reviewed By: aaiyer

Differential Revision: https://reviews.facebook.net/D5517

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Hbase.java
    hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java?rev=1387433&r1=1387432&r2=1387433&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java Wed Sep 19 01:52:58 2012
@@ -27,17 +27,15 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.HServerInfo;
 import org.apache.hadoop.hbase.NotServingRegionException;
 import org.apache.hadoop.hbase.Restartable;
-import org.apache.hadoop.hbase.client.Mutation;
-import org.apache.hadoop.hbase.client.Row;
-import org.apache.hadoop.hbase.client.RowMutations;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.MultiAction;
 import org.apache.hadoop.hbase.client.MultiPut;
 import org.apache.hadoop.hbase.client.MultiPutResponse;
-import org.apache.hadoop.hbase.client.MultiAction;
 import org.apache.hadoop.hbase.client.MultiResponse;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.RowMutations;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.master.AssignmentPlan;
 import org.apache.hadoop.hbase.regionserver.HRegion;

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java?rev=1387433&r1=1387432&r2=1387433&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java Wed Sep 19 01:52:58 2012
@@ -21,7 +21,9 @@ package org.apache.hadoop.hbase.regionse
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -40,6 +42,9 @@ import org.apache.hadoop.hbase.thrift.ge
 import org.apache.hadoop.hbase.thrift.generated.IllegalArgument;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.HasThread;
+
+import static org.apache.hadoop.hbase.thrift.ThriftServerRunner.convertIOException;
+
 import org.apache.thrift.TException;
 
 /**
@@ -212,5 +217,29 @@ public class HRegionThriftServer extends
         super.processMultiPut(tableName, regionName, puts);
       }
     }
+
+    @Override
+    public Map<ByteBuffer, Long> getLastFlushTimes() throws TException {
+      Map<ByteBuffer, Long> regionToFlushTime = new HashMap<ByteBuffer, Long>();
+      for (HRegion region: rs.getOnlineRegions()) {
+        regionToFlushTime.put(ByteBuffer.wrap(region.getRegionName()), region.getLastFlushTime());
+      }
+      return regionToFlushTime;
+    }
+
+    @Override
+    public long getCurrentTimeMillis() throws TException {
+      return rs.getCurrentTimeMillis();
+    }
+
+    @Override
+    public void flushRegion(ByteBuffer regionName, long ifOlderThanTS)
+        throws TException, IOError {
+      try {
+        rs.flushRegion(Bytes.getBytes(regionName), ifOlderThanTS);
+      } catch (IOException ex) {
+        throw convertIOException(ex);
+      }
+    }
   }
 }

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java?rev=1387433&r1=1387432&r2=1387433&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java Wed Sep 19 01:52:58 2012
@@ -115,6 +115,8 @@ public class ThriftServerRunner implemen
 
   private static ImplType DEFAULT_SERVER_TYPE = ImplType.THREADED_SELECTOR;
 
+  private static String NOT_SUPPORTED_BY_PROXY_MSG = "Not supported by Thrift proxy";
+  
   /** An enum of server implementation selections */
   enum ImplType {
     HS_HA("hsha", true, THsHaServer.class, false),
@@ -479,7 +481,7 @@ public class ThriftServerRunner implemen
      * hash-map.
      *
      * @param scanner
-     * @return integer scanner id
+     * @return integer scanner id 
      */
     protected synchronized int addScanner(ResultScanner scanner) {
       int id = nextScannerId++;
@@ -1528,6 +1530,22 @@ public class ThriftServerRunner implemen
       HTable table = getTable(tableName);
       table.put(puts);
     }
+
+    @Override
+    public Map<ByteBuffer, Long> getLastFlushTimes() throws TException {
+      throw new TException(NOT_SUPPORTED_BY_PROXY_MSG);
+    }
+
+    @Override
+    public long getCurrentTimeMillis() throws TException {
+      throw new TException(NOT_SUPPORTED_BY_PROXY_MSG);
+    }
+
+    @Override
+    public void flushRegion(ByteBuffer regionName, long ifOlderThanTS) throws TException, IOError {
+      throw new TException(NOT_SUPPORTED_BY_PROXY_MSG);
+    }
+    
   }
 
   public static void registerFilters(Configuration conf) {
@@ -1544,7 +1562,7 @@ public class ThriftServerRunner implemen
     }
   }
 
-  private static IOError convertIOException(IOException e) {
+  public static IOError convertIOException(IOException e) {
     if (e instanceof IOError) {
       return (IOError) e;
     }