You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by gr...@apache.org on 2018/05/16 17:36:20 UTC

[2/2] kudu git commit: [java] Expose the table replication factor on KuduTable

[java] Expose the table replication factor on KuduTable

Exposes the numReplicas table property to the KuduTable
API. The numReplicas property already exists in
GetTableSchemaResponsePB.

Change-Id: I18a044717dff1f39f1c9addd290917b8ec5a6f72
Reviewed-on: http://gerrit.cloudera.org:8080/10382
Tested-by: Grant Henke <gr...@apache.org>
Reviewed-by: Adar Dembo <ad...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/0442d47d
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/0442d47d
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/0442d47d

Branch: refs/heads/master
Commit: 0442d47d55282ad438ab6293646dfb34a8f01f86
Parents: caea85d
Author: Grant Henke <gr...@apache.org>
Authored: Fri May 11 16:08:40 2018 -0500
Committer: Grant Henke <gr...@apache.org>
Committed: Wed May 16 17:35:13 2018 +0000

----------------------------------------------------------------------
 .../java/org/apache/kudu/client/AsyncKuduClient.java |  5 +++--
 .../apache/kudu/client/GetTableSchemaRequest.java    |  1 +
 .../apache/kudu/client/GetTableSchemaResponse.java   | 12 ++++++++++++
 .../main/java/org/apache/kudu/client/KuduTable.java  | 15 ++++++++++++++-
 .../org/apache/kudu/client/TestAsyncKuduClient.java  |  2 +-
 .../java/org/apache/kudu/client/TestKeyEncoding.java |  6 +++---
 .../java/org/apache/kudu/client/TestKuduTable.java   | 15 +++++++++++++++
 7 files changed, 49 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduClient.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduClient.java b/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduClient.java
index 83d0684..94eefba 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduClient.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduClient.java
@@ -347,7 +347,7 @@ public class AsyncKuduClient implements AutoCloseable {
     this.channelFactory = b.createChannelFactory();
     this.masterAddresses = b.masterAddresses;
     this.masterTable = new KuduTable(this, MASTER_TABLE_NAME_PLACEHOLDER,
-        MASTER_TABLE_NAME_PLACEHOLDER, null, null);
+        MASTER_TABLE_NAME_PLACEHOLDER, null, null, 1);
     this.defaultOperationTimeoutMs = b.defaultOperationTimeoutMs;
     this.defaultAdminOperationTimeoutMs = b.defaultAdminOperationTimeoutMs;
     this.defaultSocketReadTimeoutMs = b.defaultSocketReadTimeoutMs;
@@ -730,7 +730,8 @@ public class AsyncKuduClient implements AutoCloseable {
             tableName,
             resp.getTableId(),
             resp.getSchema(),
-            resp.getPartitionSchema());
+            resp.getPartitionSchema(),
+            resp.getNumReplicas());
       }
     });
   }

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaRequest.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaRequest.java b/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaRequest.java
index 7c8ebc8..ec4afef 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaRequest.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaRequest.java
@@ -83,6 +83,7 @@ public class GetTableSchemaRequest extends KuduRpc<GetTableSchemaResponse> {
         tsUUID,
         schema,
         respBuilder.getTableId().toStringUtf8(),
+        respBuilder.getNumReplicas(),
         ProtobufHelper.pbToPartitionSchema(respBuilder.getPartitionSchema(), schema));
     return new Pair<GetTableSchemaResponse, Object>(
         response, respBuilder.hasError() ? respBuilder.getError() : null);

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaResponse.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaResponse.java b/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaResponse.java
index d513c13..a426768 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaResponse.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/GetTableSchemaResponse.java
@@ -27,23 +27,27 @@ public class GetTableSchemaResponse extends KuduRpcResponse {
   private final Schema schema;
   private final PartitionSchema partitionSchema;
   private final String tableId;
+  private final int numReplicas;
 
   /**
    * @param ellapsedMillis Time in milliseconds since RPC creation to now
    * @param tsUUID the UUID of the tablet server that sent the response
    * @param schema the table's schema
    * @param tableId the UUID of the table in the response
+   * @param numReplicas the table's replication factor
    * @param partitionSchema the table's partition schema
    */
   GetTableSchemaResponse(long ellapsedMillis,
                          String tsUUID,
                          Schema schema,
                          String tableId,
+                         int numReplicas,
                          PartitionSchema partitionSchema) {
     super(ellapsedMillis, tsUUID);
     this.schema = schema;
     this.partitionSchema = partitionSchema;
     this.tableId = tableId;
+    this.numReplicas = numReplicas;
   }
 
   /**
@@ -69,4 +73,12 @@ public class GetTableSchemaResponse extends KuduRpcResponse {
   public String getTableId() {
     return tableId;
   }
+
+  /**
+   * Get the table's replication factor.
+   * @return the table's replication factor
+   */
+  public int getNumReplicas() {
+    return numReplicas;
+  }
 }

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/main/java/org/apache/kudu/client/KuduTable.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduTable.java b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduTable.java
index 028d842..83186d9 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduTable.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduTable.java
@@ -47,20 +47,25 @@ public class KuduTable {
   private final AsyncKuduClient client;
   private final String name;
   private final String tableId;
+  private final int numReplicas;
 
   /**
    * Package-private constructor, use {@link KuduClient#openTable(String)} to get an instance.
    * @param client the client this instance belongs to
    * @param name this table's name
+   * @param tableId this table's UUID
    * @param schema this table's schema
+   * @param partitionSchema this table's partition schema
+   * @param numReplicas this table's replication factor
    */
   KuduTable(AsyncKuduClient client, String name, String tableId,
-            Schema schema, PartitionSchema partitionSchema) {
+            Schema schema, PartitionSchema partitionSchema, int numReplicas) {
     this.schema = schema;
     this.partitionSchema = partitionSchema;
     this.client = client;
     this.name = name;
     this.tableId = tableId;
+    this.numReplicas = numReplicas;
   }
 
   /**
@@ -101,6 +106,14 @@ public class KuduTable {
   }
 
   /**
+   * Get this table's replication factor.
+   * @return this table's replication factor
+   */
+  public int getNumReplicas() {
+    return numReplicas;
+  }
+
+  /**
    * Get the async client that created this instance.
    * @return an async kudu client
    */

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java b/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java
index ae3c04f..2ff118a 100644
--- a/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java
@@ -152,7 +152,7 @@ public class TestAsyncKuduClient extends BaseKuduTest {
     // Test that a tablet full of unreachable replicas won't make us retry.
     try {
       KuduTable badTable = new KuduTable(client, "Invalid table name",
-          "Invalid table ID", null, null);
+          "Invalid table ID", null, null, 3);
       client.discoverTablets(badTable, null, requestBatchSize, tabletLocations, 1000);
       fail("This should have failed quickly");
     } catch (NonRecoverableException ex) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/test/java/org/apache/kudu/client/TestKeyEncoding.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/apache/kudu/client/TestKeyEncoding.java b/java/kudu-client/src/test/java/org/apache/kudu/client/TestKeyEncoding.java
index 88f3e9b..f169f48 100644
--- a/java/kudu-client/src/test/java/org/apache/kudu/client/TestKeyEncoding.java
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/TestKeyEncoding.java
@@ -100,7 +100,7 @@ public class TestKeyEncoding extends BaseKuduTest {
     Schema schemaOneString =
         buildSchema(new ColumnSchema.ColumnSchemaBuilder("key", Type.STRING).key(true));
     KuduTable table = new KuduTable(null, "one", "one", schemaOneString,
-                                    defaultPartitionSchema(schemaOneString));
+                                    defaultPartitionSchema(schemaOneString), 3);
     Insert oneKeyInsert = new Insert(table);
     PartialRow row = oneKeyInsert.getRow();
     row.addString("key", "foo");
@@ -110,7 +110,7 @@ public class TestKeyEncoding extends BaseKuduTest {
         new ColumnSchema.ColumnSchemaBuilder("key", Type.STRING).key(true),
         new ColumnSchema.ColumnSchemaBuilder("key2", Type.STRING).key(true));
     KuduTable table2 = new KuduTable(null, "two", "two", schemaTwoString,
-                                     defaultPartitionSchema(schemaTwoString));
+                                     defaultPartitionSchema(schemaTwoString), 3);
     Insert twoKeyInsert = new Insert(table2);
     row = twoKeyInsert.getRow();
     row.addString("key", "foo");
@@ -129,7 +129,7 @@ public class TestKeyEncoding extends BaseKuduTest {
         new ColumnSchema.ColumnSchemaBuilder("key2", Type.STRING).key(true));
     PartitionSchema partitionSchemaIntString = defaultPartitionSchema(schemaIntString);
     KuduTable table3 = new KuduTable(null, "three", "three",
-        schemaIntString, partitionSchemaIntString);
+        schemaIntString, partitionSchemaIntString, 3);
     Insert small = new Insert(table3);
     row = small.getRow();
     row.addInt("key", 20);

http://git-wip-us.apache.org/repos/asf/kudu/blob/0442d47d/java/kudu-client/src/test/java/org/apache/kudu/client/TestKuduTable.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/apache/kudu/client/TestKuduTable.java b/java/kudu-client/src/test/java/org/apache/kudu/client/TestKuduTable.java
index b07f45a..7f19e43 100644
--- a/java/kudu-client/src/test/java/org/apache/kudu/client/TestKuduTable.java
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/TestKuduTable.java
@@ -619,4 +619,19 @@ public class TestKuduTable extends BaseKuduTest {
     }
     fail("Could not run test even after multiple attempts");
   }
+
+  @Test(timeout = 100000)
+  public void testNumReplicas() throws Exception {
+    for (int i = 1; i <= 3; i++) {
+      // Ignore even numbers.
+      if (i % 2 != 0) {
+        String tableName = name.getMethodName() + System.currentTimeMillis() + "-" + i;
+        CreateTableOptions options = getBasicCreateTableOptions();
+        options.setNumReplicas(i);
+        createTable(tableName, basicSchema, options);
+        KuduTable table = syncClient.openTable(tableName);
+        assertEquals(i, table.getNumReplicas());
+      }
+    }
+  }
 }