[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 <[email protected]> Reviewed-by: Adar Dembo <[email protected]> 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 <[email protected]> Authored: Fri May 11 16:08:40 2018 -0500 Committer: Grant Henke <[email protected]> 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()); + } + } + } }
