You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by jd...@apache.org on 2016/07/25 17:15:11 UTC
[06/36] incubator-kudu git commit: [java-client] repackage to
org.apache.kudu (Part 1)
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestKuduSession.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestKuduSession.java b/java/kudu-client/src/test/java/org/kududb/client/TestKuduSession.java
deleted file mode 100644
index df2367f..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestKuduSession.java
+++ /dev/null
@@ -1,337 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
-
-import static org.junit.Assert.*;
-
-import com.google.common.collect.ImmutableList;
-
-public class TestKuduSession extends BaseKuduTest {
- @Rule
- public TestName name = new TestName();
-
- private KuduTable table;
-
- @Test(timeout = 100000)
- public void testBasicOps() throws Exception {
- String tableName = name.getMethodName();
- table = createTable(tableName, basicSchema, getBasicCreateTableOptions());
-
- KuduSession session = syncClient.newSession();
- for (int i = 0; i < 10; i++) {
- session.apply(createInsert(i));
- }
- assertEquals(10, countRowsInScan(client.newScannerBuilder(table).build()));
-
- OperationResponse resp = session.apply(createInsert(0));
- assertTrue(resp.hasRowError());
-
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
-
- for (int i = 10; i < 20; i++) {
- session.apply(createInsert(i));
- }
- session.flush();
- assertEquals(20, countRowsInScan(client.newScannerBuilder(table).build()));
- }
-
- @Test(timeout = 100000)
- public void testIgnoreAllDuplicateRows() throws Exception {
- String tableName = name.getMethodName();
- table = createTable(tableName, basicSchema, getBasicCreateTableOptions());
-
- KuduSession session = syncClient.newSession();
- session.setIgnoreAllDuplicateRows(true);
- for (int i = 0; i < 10; i++) {
- session.apply(createInsert(i));
- }
- for (SessionConfiguration.FlushMode mode : SessionConfiguration.FlushMode.values()) {
- session.setFlushMode(mode);
- for (int i = 0; i < 10; i++) {
- OperationResponse resp = session.apply(createInsert(i));
- if (mode == SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC) {
- assertFalse(resp.hasRowError());
- }
- }
- if (mode == SessionConfiguration.FlushMode.MANUAL_FLUSH) {
- List<OperationResponse> responses = session.flush();
- for (OperationResponse resp : responses) {
- assertFalse(resp.hasRowError());
- }
- } else if (mode == SessionConfiguration.FlushMode.AUTO_FLUSH_BACKGROUND) {
- while (session.hasPendingOperations()) {
- Thread.sleep(100);
- }
- assertEquals(0, session.countPendingErrors());
- }
- }
- }
-
- @Test(timeout = 100000)
- public void testBatchWithSameRow() throws Exception {
- String tableName = name.getMethodName();
- table = createTable(tableName, basicSchema, getBasicCreateTableOptions());
-
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
-
- // Insert 25 rows, one per batch, along with 50 updates for each, and a delete at the end,
- // while also clearing the cache between each batch half the time. The delete is added here
- // so that a misplaced update would fail if it happens later than its delete.
- for (int i = 0; i < 25; i++) {
- session.apply(createInsert(i));
- for (int j = 0; j < 50; j++) {
- Update update = table.newUpdate();
- PartialRow row = update.getRow();
- row.addInt(basicSchema.getColumnByIndex(0).getName(), i);
- row.addInt(basicSchema.getColumnByIndex(1).getName(), 1000);
- session.apply(update);
- }
- Delete del = table.newDelete();
- PartialRow row = del.getRow();
- row.addInt(basicSchema.getColumnByIndex(0).getName(), i);
- session.apply(del);
- session.flush();
- if (i % 2 == 0) {
- client.emptyTabletsCacheForTable(table.getTableId());
- }
- }
- assertEquals(0, countRowsInScan(client.newScannerBuilder(table).build()));
- }
-
- /**
- * Regression test for KUDU-1226. Calls to session.flush() concurrent with AUTO_FLUSH_BACKGROUND
- * can end up giving ConvertBatchToListOfResponsesCB a list with nulls if a tablet was already
- * flushed. Only happens with multiple tablets.
- */
- @Test(timeout = 10000)
- public void testConcurrentFlushes() throws Exception {
- String tableName = name.getMethodName();
- CreateTableOptions builder = getBasicCreateTableOptions();
- int numTablets = 4;
- int numRowsPerTablet = 100;
-
- // Create a 4 tablets table split on 1000, 2000, and 3000.
- for (int i = 1; i < numTablets; i++) {
- PartialRow split = basicSchema.newPartialRow();
- split.addInt(0, i * numRowsPerTablet);
- builder.addSplitRow(split);
- }
- table = createTable(tableName, basicSchema, builder);
-
- // Configure the session to background flush as often as it can (every 1ms).
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_BACKGROUND);
- session.setFlushInterval(1);
-
- // Fill each tablet in parallel 1 by 1 then flush. Without the fix this would quickly get an
- // NPE.
- for (int i = 0; i < numRowsPerTablet; i++) {
- for (int j = 0; j < numTablets; j++) {
- session.apply(createInsert(i + (numRowsPerTablet * j)));
- }
- session.flush();
- }
- }
-
- @Test(timeout = 10000)
- public void testOverWritingValues() throws Exception {
- String tableName = name.getMethodName();
- table = createTable(tableName, basicSchema, getBasicCreateTableOptions());
- KuduSession session = syncClient.newSession();
- Insert insert = createInsert(0);
- PartialRow row = insert.getRow();
-
- // Overwrite all the normal columns.
- int magicNumber = 9999;
- row.addInt(1, magicNumber);
- row.addInt(2, magicNumber);
- row.addBoolean(4, false);
- // Spam the string column since it's backed by an array.
- for (int i = 0; i <= magicNumber; i++) {
- row.addString(3, i + "");
- }
- // We're supposed to keep a constant size.
- assertEquals(5, row.getVarLengthData().size());
- session.apply(insert);
-
- KuduScanner scanner = syncClient.newScannerBuilder(table).build();
- RowResult rr = scanner.nextRows().next();
- assertEquals(magicNumber, rr.getInt(1));
- assertEquals(magicNumber, rr.getInt(2));
- assertEquals(magicNumber + "", rr.getString(3));
- assertEquals(false, rr.getBoolean(4));
-
- // Test setting a value post-apply.
- try {
- row.addInt(1, 0);
- fail("Row should be frozen and throw");
- } catch (IllegalStateException ex) {
- // Ok.
- }
- }
-
- @Test(timeout = 10000)
- public void testUpsert() throws Exception {
- String tableName = name.getMethodName();
- table = createTable(tableName, basicSchema, getBasicCreateTableOptions());
- KuduSession session = syncClient.newSession();
-
- // Test an Upsert that acts as an Insert.
- assertFalse(session.apply(createUpsert(1, 1, false)).hasRowError());
-
- List<String> rowStrings = scanTableToStrings(table);
- assertEquals(1, rowStrings.size());
- assertEquals(
- "INT32 key=1, INT32 column1_i=1, INT32 column2_i=3, " +
- "STRING column3_s=a string, BOOL column4_b=true",
- rowStrings.get(0));
-
- // Test an Upsert that acts as an Update.
- assertFalse(session.apply(createUpsert(1, 2, false)).hasRowError());
- rowStrings = scanTableToStrings(table);
- assertEquals(
- "INT32 key=1, INT32 column1_i=2, INT32 column2_i=3, " +
- "STRING column3_s=a string, BOOL column4_b=true",
- rowStrings.get(0));
- }
-
- @Test(timeout = 10000)
- public void testInsertManualFlushNonCoveredRange() throws Exception {
- String tableName = name.getMethodName();
- CreateTableOptions createOptions = getBasicTableOptionsWithNonCoveredRange();
- createOptions.setNumReplicas(1);
- syncClient.createTable(tableName, basicSchema, createOptions);
- KuduTable table = syncClient.openTable(tableName);
-
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
-
- // Insert in reverse sorted order so that more table location lookups occur
- // (the extra results in table location lookups always occur past the inserted key).
- List<Integer> nonCoveredKeys = ImmutableList.of(350, 300, 199, 150, 100, -1, -50);
- for (int key : nonCoveredKeys) {
- assertNull(session.apply(createBasicSchemaInsert(table, key)));
- }
- List<OperationResponse> results = session.flush();
- assertEquals(nonCoveredKeys.size(), results.size());
- for (OperationResponse result : results) {
- assertTrue(result.hasRowError());
- assertTrue(result.getRowError().getErrorStatus().isNotFound());
- }
-
- // Insert a batch of some valid and some invalid.
- for (int key = 90; key < 110; key++) {
- session.apply(createBasicSchemaInsert(table, key));
- }
- results = session.flush();
-
- int failures = 0;
- for (OperationResponse result : results) {
- if (result.hasRowError()) {
- failures++;
- assertTrue(result.getRowError().getErrorStatus().isNotFound());
- }
- }
- assertEquals(10, failures);
- }
-
- @Test(timeout = 10000)
- public void testInsertAutoFlushSyncNonCoveredRange() throws Exception {
- String tableName = name.getMethodName();
- CreateTableOptions createOptions = getBasicTableOptionsWithNonCoveredRange();
- createOptions.setNumReplicas(1);
- syncClient.createTable(tableName, basicSchema, createOptions);
- KuduTable table = syncClient.openTable(tableName);
-
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
-
- List<Integer> nonCoveredKeys = ImmutableList.of(350, 300, 199, 150, 100, -1, -50);
- for (int key : nonCoveredKeys) {
- try {
- session.apply(createBasicSchemaInsert(table, key));
- fail("apply should have thrown");
- } catch (KuduException e) {
- assertTrue(e.getStatus().isNotFound());
- }
- }
- }
-
- @Test(timeout = 10000)
- public void testInsertAutoFlushBackgrounNonCoveredRange() throws Exception {
- String tableName = name.getMethodName();
- CreateTableOptions createOptions = getBasicTableOptionsWithNonCoveredRange();
- createOptions.setNumReplicas(1);
- syncClient.createTable(tableName, basicSchema, createOptions);
- KuduTable table = syncClient.openTable(tableName);
-
- AsyncKuduSession session = client.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_BACKGROUND);
-
- List<Integer> nonCoveredKeys = ImmutableList.of(350, 300, 199, 150, 100, -1, -50);
- for (int key : nonCoveredKeys) {
- OperationResponse result = session.apply(createBasicSchemaInsert(table, key)).join(5000);
- assertTrue(result.hasRowError());
- assertTrue(result.getRowError().getErrorStatus().isNotFound());
- }
-
- RowErrorsAndOverflowStatus errors = session.getPendingErrors();
- assertEquals(nonCoveredKeys.size(), errors.getRowErrors().length);
- for (RowError error : errors.getRowErrors()) {
- assertTrue(error.getErrorStatus().isNotFound());
- }
-
- // Insert a batch of some valid and some invalid.
- for (int key = 90; key < 110; key++) {
- session.apply(createBasicSchemaInsert(table, key));
- }
- session.flush();
-
- errors = session.getPendingErrors();
- assertEquals(10, errors.getRowErrors().length);
- for (RowError error : errors.getRowErrors()) {
- assertTrue(error.getErrorStatus().isNotFound());
- }
- }
-
- private Insert createInsert(int key) {
- return createBasicSchemaInsert(table, key);
- }
-
- private Upsert createUpsert(int key, int secondVal, boolean hasNull) {
- Upsert upsert = table.newUpsert();
- PartialRow row = upsert.getRow();
- row.addInt(0, key);
- row.addInt(1, secondVal);
- row.addInt(2, 3);
- if (hasNull) {
- row.setNull(3);
- } else {
- row.addString(3, "a string");
- }
- row.addBoolean(4, true);
- return upsert;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestKuduTable.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestKuduTable.java b/java/kudu-client/src/test/java/org/kududb/client/TestKuduTable.java
deleted file mode 100644
index 4e41a29..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestKuduTable.java
+++ /dev/null
@@ -1,301 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import org.junit.Rule;
-import org.junit.rules.TestName;
-import org.kududb.ColumnSchema;
-import org.kududb.Schema;
-import org.kududb.Type;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-public class TestKuduTable extends BaseKuduTest {
- private static final Logger LOG = LoggerFactory.getLogger(TestKuduTable.class);
-
- @Rule
- public TestName name = new TestName();
-
- private static Schema schema = getBasicSchema();
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BaseKuduTest.setUpBeforeClass();
- }
-
- @Test(timeout = 100000)
- public void testAlterTable() throws Exception {
- String tableName = name.getMethodName();
- createTable(tableName, basicSchema, getBasicCreateTableOptions());
- try {
-
- // Add a col.
- AlterTableOptions ato = new AlterTableOptions().addColumn("testaddint", Type.INT32, 4);
- submitAlterAndCheck(ato, tableName);
-
- // Rename that col.
- ato = new AlterTableOptions().renameColumn("testaddint", "newtestaddint");
- submitAlterAndCheck(ato, tableName);
-
- // Delete it.
- ato = new AlterTableOptions().dropColumn("newtestaddint");
- submitAlterAndCheck(ato, tableName);
-
- String newTableName = tableName +"new";
-
- // Rename our table.
- ato = new AlterTableOptions().renameTable(newTableName);
- submitAlterAndCheck(ato, tableName, newTableName);
-
- // Rename it back.
- ato = new AlterTableOptions().renameTable(tableName);
- submitAlterAndCheck(ato, newTableName, tableName);
-
- // Try adding two columns, where one is nullable.
- ato = new AlterTableOptions()
- .addColumn("testaddmulticolnotnull", Type.INT32, 4)
- .addNullableColumn("testaddmulticolnull", Type.STRING);
- submitAlterAndCheck(ato, tableName);
-
-
- // Try altering a table that doesn't exist.
- String nonExistingTableName = "table_does_not_exist";
- try {
- syncClient.alterTable(nonExistingTableName, ato);
- fail("Shouldn't be able to alter a table that doesn't exist");
- } catch (KuduException ex) {
- assertTrue(ex.getStatus().isNotFound());
- }
-
- try {
- syncClient.isAlterTableDone(nonExistingTableName);
- fail("Shouldn't be able to query if an alter table is done here");
- } catch (KuduException ex) {
- assertTrue(ex.getStatus().isNotFound());
- }
- } finally {
- // Normally Java tests accumulate tables without issue, deleting them all
- // when shutting down the mini cluster at the end of every test class.
- // However, testGetLocations below expects a certain table count, so
- // we'll delete our table to ensure there's no interaction between them.
- syncClient.deleteTable(tableName);
- }
- }
-
- /**
- * Helper method to submit an Alter and wait for it to happen, using the default table name to
- * check.
- */
- private void submitAlterAndCheck(AlterTableOptions ato, String tableToAlter)
- throws Exception {
- submitAlterAndCheck(ato, tableToAlter, tableToAlter);
- }
-
- private void submitAlterAndCheck(AlterTableOptions ato,
- String tableToAlter, String tableToCheck) throws
- Exception {
- if (masterHostPorts.size() > 1) {
- LOG.info("Alter table is not yet supported with multiple masters. Specify " +
- "-DnumMasters=1 on the command line to start a single-master cluster to run this test.");
- return;
- }
- AlterTableResponse alterResponse = syncClient.alterTable(tableToAlter, ato);
- boolean done = syncClient.isAlterTableDone(tableToCheck);
- assertTrue(done);
- }
-
- /**
- * Test creating tables of different sizes and see that we get the correct number of tablets back
- * @throws Exception
- */
- @Test
- public void testGetLocations() throws Exception {
- String table1 = name.getMethodName() + System.currentTimeMillis();
-
- // Test a non-existing table
- try {
- openTable(table1);
- fail("Should receive an exception since the table doesn't exist");
- } catch (Exception ex) {
- // expected
- }
- // Test with defaults
- String tableWithDefault = name.getMethodName() + "WithDefault" + System.currentTimeMillis();
- CreateTableOptions builder = getBasicCreateTableOptions();
- List<ColumnSchema> columns = new ArrayList<ColumnSchema>(schema.getColumnCount());
- int defaultInt = 30;
- String defaultString = "data";
- for (ColumnSchema columnSchema : schema.getColumns()) {
-
- Object defaultValue;
-
- if (columnSchema.getType() == Type.INT32) {
- defaultValue = defaultInt;
- } else if (columnSchema.getType() == Type.BOOL) {
- defaultValue = true;
- } else {
- defaultValue = defaultString;
- }
- columns.add(
- new ColumnSchema.ColumnSchemaBuilder(columnSchema.getName(), columnSchema.getType())
- .key(columnSchema.isKey())
- .nullable(columnSchema.isNullable())
- .defaultValue(defaultValue).build());
- }
- Schema schemaWithDefault = new Schema(columns);
- KuduTable kuduTable = createTable(tableWithDefault, schemaWithDefault, builder);
- assertEquals(defaultInt, kuduTable.getSchema().getColumnByIndex(0).getDefaultValue());
- assertEquals(defaultString,
- kuduTable.getSchema().getColumnByIndex(columns.size() - 2).getDefaultValue());
- assertEquals(true,
- kuduTable.getSchema().getColumnByIndex(columns.size() - 1).getDefaultValue());
-
- // Make sure the table's schema includes column IDs.
- assertTrue(kuduTable.getSchema().hasColumnIds());
-
- // Test we can open a table that was already created.
- openTable(tableWithDefault);
-
- // Test splitting and reading those splits
- KuduTable kuduTableWithoutDefaults = createTableWithSplitsAndTest(0);
- // finish testing read defaults
- assertNull(kuduTableWithoutDefaults.getSchema().getColumnByIndex(0).getDefaultValue());
- createTableWithSplitsAndTest(3);
- createTableWithSplitsAndTest(10);
-
- KuduTable table = createTableWithSplitsAndTest(30);
-
- List<LocatedTablet>tablets = table.getTabletsLocations(null, getKeyInBytes(9), DEFAULT_SLEEP);
- assertEquals(9, tablets.size());
- assertEquals(9, table.asyncGetTabletsLocations(null, getKeyInBytes(9), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(0), getKeyInBytes(9), DEFAULT_SLEEP);
- assertEquals(9, tablets.size());
- assertEquals(9, table.asyncGetTabletsLocations(getKeyInBytes(0), getKeyInBytes(9), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(5), getKeyInBytes(9), DEFAULT_SLEEP);
- assertEquals(4, tablets.size());
- assertEquals(4, table.asyncGetTabletsLocations(getKeyInBytes(5), getKeyInBytes(9), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(5), getKeyInBytes(14), DEFAULT_SLEEP);
- assertEquals(9, tablets.size());
- assertEquals(9, table.asyncGetTabletsLocations(getKeyInBytes(5), getKeyInBytes(14), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(5), getKeyInBytes(31), DEFAULT_SLEEP);
- assertEquals(26, tablets.size());
- assertEquals(26, table.asyncGetTabletsLocations(getKeyInBytes(5), getKeyInBytes(31), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(5), null, DEFAULT_SLEEP);
- assertEquals(26, tablets.size());
- assertEquals(26, table.asyncGetTabletsLocations(getKeyInBytes(5), null, DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(null, getKeyInBytes(10000), DEFAULT_SLEEP);
- assertEquals(31, tablets.size());
- assertEquals(31, table.asyncGetTabletsLocations(null, getKeyInBytes(10000), DEFAULT_SLEEP).join().size());
-
- tablets = table.getTabletsLocations(getKeyInBytes(20), getKeyInBytes(10000), DEFAULT_SLEEP);
- assertEquals(11, tablets.size());
- assertEquals(11, table.asyncGetTabletsLocations(getKeyInBytes(20), getKeyInBytes(10000), DEFAULT_SLEEP).join().size());
-
- // Test listing tables.
- assertEquals(0, client.getTablesList(table1).join(DEFAULT_SLEEP).getTablesList().size());
- assertEquals(1, client.getTablesList(tableWithDefault)
- .join(DEFAULT_SLEEP).getTablesList().size());
- assertEquals(5, client.getTablesList().join(DEFAULT_SLEEP).getTablesList().size());
- assertFalse(client.getTablesList(tableWithDefault).
- join(DEFAULT_SLEEP).getTablesList().isEmpty());
-
- assertFalse(client.tableExists(table1).join(DEFAULT_SLEEP));
- assertTrue(client.tableExists(tableWithDefault).join(DEFAULT_SLEEP));
- }
-
- @Test(timeout = 100000)
- public void testLocateTableNonCoveringRange() throws Exception {
- String tableName = name.getMethodName();
- syncClient.createTable(tableName, basicSchema, getBasicTableOptionsWithNonCoveredRange());
- KuduTable table = syncClient.openTable(tableName);
-
- List<LocatedTablet> tablets;
-
- // all tablets
- tablets = table.getTabletsLocations(null, null, 100000);
- assertEquals(3, tablets.size());
- assertArrayEquals(getKeyInBytes(0), tablets.get(0).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(50), tablets.get(0).getPartition().getPartitionKeyEnd());
- assertArrayEquals(getKeyInBytes(50), tablets.get(1).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(100), tablets.get(1).getPartition().getPartitionKeyEnd());
- assertArrayEquals(getKeyInBytes(200), tablets.get(2).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(300), tablets.get(2).getPartition().getPartitionKeyEnd());
-
- // key < 50
- tablets = table.getTabletsLocations(null, getKeyInBytes(50), 100000);
- assertEquals(1, tablets.size());
- assertArrayEquals(getKeyInBytes(0), tablets.get(0).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(50), tablets.get(0).getPartition().getPartitionKeyEnd());
-
- // key >= 300
- tablets = table.getTabletsLocations(getKeyInBytes(300), null, 100000);
- assertEquals(0, tablets.size());
-
- // key >= 299
- tablets = table.getTabletsLocations(getKeyInBytes(299), null, 100000);
- assertEquals(1, tablets.size());
- assertArrayEquals(getKeyInBytes(200), tablets.get(0).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(300), tablets.get(0).getPartition().getPartitionKeyEnd());
-
- // key >= 150 && key < 250
- tablets = table.getTabletsLocations(getKeyInBytes(150), getKeyInBytes(250), 100000);
- assertEquals(1, tablets.size());
- assertArrayEquals(getKeyInBytes(200), tablets.get(0).getPartition().getPartitionKeyStart());
- assertArrayEquals(getKeyInBytes(300), tablets.get(0).getPartition().getPartitionKeyEnd());
- }
-
- public byte[] getKeyInBytes(int i) {
- PartialRow row = schema.newPartialRow();
- row.addInt(0, i);
- return row.encodePrimaryKey();
- }
-
- public KuduTable createTableWithSplitsAndTest(int splitsCount) throws Exception {
- String tableName = name.getMethodName() + System.currentTimeMillis();
- CreateTableOptions builder = getBasicCreateTableOptions();
-
- if (splitsCount != 0) {
- for (int i = 1; i <= splitsCount; i++) {
- PartialRow row = schema.newPartialRow();
- row.addInt(0, i);
- builder.addSplitRow(row);
- }
- }
- KuduTable table = createTable(tableName, schema, builder);
-
- List<LocatedTablet> tablets = table.getTabletsLocations(DEFAULT_SLEEP);
- assertEquals(splitsCount + 1, tablets.size());
- assertEquals(splitsCount + 1, table.asyncGetTabletsLocations(DEFAULT_SLEEP).join().size());
- for (LocatedTablet tablet : tablets) {
- assertEquals(3, tablet.getReplicas().size());
- }
- return table;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestLeaderFailover.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestLeaderFailover.java b/java/kudu-client/src/test/java/org/kududb/client/TestLeaderFailover.java
deleted file mode 100644
index 49ac502..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestLeaderFailover.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class TestLeaderFailover extends BaseKuduTest {
-
- private static final String TABLE_NAME =
- TestLeaderFailover.class.getName() + "-" + System.currentTimeMillis();
- private static KuduTable table;
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BaseKuduTest.setUpBeforeClass();
-
- CreateTableOptions builder = getBasicCreateTableOptions();
- createTable(TABLE_NAME, basicSchema, builder);
-
- table = openTable(TABLE_NAME);
- }
-
- /**
- * This test writes 3 rows, kills the leader, then tries to write another 3 rows. Finally it
- * counts to make sure we have 6 of them.
- *
- * This test won't run if we didn't start the cluster.
- */
- @Test(timeout = 100000)
- public void testFailover() throws Exception {
- KuduSession session = syncClient.newSession();
- for (int i = 0; i < 3; i++) {
- session.apply(createBasicSchemaInsert(table, i));
- }
-
- // Make sure the rows are in there before messing things up.
- AsyncKuduScanner scanner = client.newScannerBuilder(table).build();
- assertEquals(3, countRowsInScan(scanner));
-
- killTabletLeader(table);
-
- for (int i = 3; i < 6; i++) {
- OperationResponse resp = session.apply(createBasicSchemaInsert(table, i));
- if (resp.hasRowError()) {
- fail("Encountered a row error " + resp.getRowError());
- }
- }
-
- scanner = client.newScannerBuilder(table).build();
- assertEquals(6, countRowsInScan(scanner));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestMasterFailover.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestMasterFailover.java b/java/kudu-client/src/test/java/org/kududb/client/TestMasterFailover.java
deleted file mode 100644
index 2f91a6e..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestMasterFailover.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.Assert.assertEquals;
-
-
-/**
- * Tests {@link AsyncKuduClient} with multiple masters.
- */
-public class TestMasterFailover extends BaseKuduTest {
- private static final Logger LOG = LoggerFactory.getLogger(TestMasterFailover.class);
- private static final String TABLE_NAME =
- TestMasterFailover.class.getName() + "-" + System.currentTimeMillis();
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BaseKuduTest.setUpBeforeClass();
- createTable(TABLE_NAME, basicSchema, getBasicCreateTableOptions());
- }
-
- /**
- * This test is disabled as we're not supporting multi-master just yet.
- */
- @Test(timeout = 30000)
- @Ignore
- public void testKillLeader() throws Exception {
- int countMasters = masterHostPorts.size();
- if (countMasters < 3) {
- LOG.info("This test requires at least 3 master servers, but only " + countMasters +
- " are specified.");
- return;
- }
- killMasterLeader();
-
- // Test that we can open a previously created table after killing the leader master.
- KuduTable table = openTable(TABLE_NAME);
- assertEquals(0, countRowsInScan(client.newScannerBuilder(table).build()));
-
- // Test that we can create a new table when one of the masters is down.
- String newTableName = TABLE_NAME + "-afterLeaderIsDead";
- createTable(newTableName, basicSchema, new CreateTableOptions());
- table = openTable(newTableName);
- assertEquals(0, countRowsInScan(client.newScannerBuilder(table).build()));
-
- // Test that we can initialize a client when one of the masters specified in the
- // connection string is down.
- AsyncKuduClient newClient = new AsyncKuduClient.AsyncKuduClientBuilder(masterAddresses).build();
- table = newClient.openTable(newTableName).join(DEFAULT_SLEEP);
- assertEquals(0, countRowsInScan(newClient.newScannerBuilder(table).build()));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestMiniKuduCluster.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestMiniKuduCluster.java b/java/kudu-client/src/test/java/org/kududb/client/TestMiniKuduCluster.java
deleted file mode 100644
index 82ffacb..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestMiniKuduCluster.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. See accompanying LICENSE file.
- */
-package org.kududb.client;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.net.Socket;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class TestMiniKuduCluster {
-
- private static final int NUM_TABLET_SERVERS = 3;
- private static final int DEFAULT_NUM_MASTERS = 1;
-
- private MiniKuduCluster cluster;
-
- @Before
- public void before() throws Exception {
- cluster = new MiniKuduCluster.MiniKuduClusterBuilder()
- .numMasters(DEFAULT_NUM_MASTERS)
- .numTservers(NUM_TABLET_SERVERS)
- .build();
- assertTrue(cluster.waitForTabletServers(NUM_TABLET_SERVERS));
- }
-
- @After
- public void after() {
- if (cluster != null) {
- cluster.shutdown();
- }
- }
-
- @Test(timeout = 50000)
- public void test() throws Exception {
-
- assertEquals(DEFAULT_NUM_MASTERS, cluster.getMasterProcesses().size());
- assertEquals(NUM_TABLET_SERVERS, cluster.getTabletServerProcesses().size());
-
- {
- // Kill the master.
- int masterPort = cluster.getMasterProcesses().keySet().iterator().next();
- testPort(masterPort, true, 1000);
- cluster.killMasterOnPort(masterPort);
-
- testPort(masterPort, false, 2000);
-
- // Restart the master.
- cluster.restartDeadMasterOnPort(masterPort);
-
- // Test we can reach it.
- testPort(masterPort, true, 3000);
- }
-
-
- {
- // Kill the first TS.
- int tsPort = cluster.getTabletServerProcesses().keySet().iterator().next();
- testPort(tsPort, true, 1000);
- cluster.killTabletServerOnPort(tsPort);
-
- testPort(tsPort, false, 2000);
-
- // Restart it.
- cluster.restartDeadTabletServerOnPort(tsPort);
-
- testPort(tsPort, true, 3000);
- }
-
- assertEquals(DEFAULT_NUM_MASTERS, cluster.getMasterProcesses().size());
- assertEquals(NUM_TABLET_SERVERS, cluster.getTabletServerProcesses().size());
- }
-
- /**
- * Test without the specified is open or closed, waiting up to a certain time.
- * The longer you expect it might for the socket to become open or closed.
- * @param port the port to test
- * @param testIsOpen true if we should want it to be open, false if we want it closed
- * @param timeout how long we're willing to wait before it happens
- * @throws InterruptedException
- */
- private void testPort(int port, boolean testIsOpen, long timeout) throws InterruptedException {
- DeadlineTracker tracker = new DeadlineTracker();
- while (tracker.getElapsedMillis() < timeout) {
- try {
- Socket socket = new Socket(TestUtils.getUniqueLocalhost(), port);
- socket.close();
- if (testIsOpen) {
- return;
- }
- } catch (IOException e) {
- if (!testIsOpen) {
- return;
- }
- }
- Thread.sleep(200);
- }
- fail("Port " + port + " is still " + (testIsOpen ? "closed " : "open"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestOperation.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestOperation.java b/java/kudu-client/src/test/java/org/kududb/client/TestOperation.java
deleted file mode 100644
index f305fbf..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestOperation.java
+++ /dev/null
@@ -1,166 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-
-import org.junit.Test;
-import org.kududb.ColumnSchema;
-import org.kududb.Schema;
-import org.kududb.Type;
-import org.kududb.WireProtocol.RowOperationsPB;
-import org.kududb.client.Operation.ChangeType;
-import org.kududb.tserver.Tserver.WriteRequestPBOrBuilder;
-import org.mockito.Mockito;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.primitives.Longs;
-
-/**
- * Unit tests for Operation
- */
-public class TestOperation {
-
- private Schema createManyStringsSchema() {
- ArrayList<ColumnSchema> columns = new ArrayList<ColumnSchema>(4);
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c0", Type.STRING).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c1", Type.STRING).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c2", Type.STRING).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c3", Type.STRING).nullable(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c4", Type.STRING).nullable(true).build());
- return new Schema(columns);
- }
-
- @Test
- public void testSetStrings() {
- KuduTable table = Mockito.mock(KuduTable.class);
- Mockito.doReturn(createManyStringsSchema()).when(table).getSchema();
- Insert insert = new Insert(table);
- PartialRow row = insert.getRow();
- row.addString("c0", "c0_val");
- row.addString("c2", "c2_val");
- row.addString("c1", "c1_val");
- row.addString("c3", "c3_val");
- row.addString("c4", "c4_val");
-
- {
- WriteRequestPBOrBuilder pb =
- Operation.createAndFillWriteRequestPB(ImmutableList.<Operation>of(insert));
- RowOperationsPB rowOps = pb.getRowOperations();
- assertEquals(6 * 5, rowOps.getIndirectData().size());
- assertEquals("c0_valc1_valc2_valc3_valc4_val", rowOps.getIndirectData().toStringUtf8());
- byte[] rows = rowOps.getRows().toByteArray();
- assertEquals(ChangeType.INSERT.toEncodedByte(), rows[0]);
- // The "isset" bitset should have 5 bits set
- assertEquals(0x1f, rows[1]);
- // The "null" bitset should have no bits set
- assertEquals(0, rows[2]);
-
- // Check the strings.
- int offset = 3;
- for (int i = 0; i <= 4; i++) {
- // The offset into the indirect buffer
- assertEquals(6 * i, Bytes.getLong(rows, offset));
- offset += Longs.BYTES;
- // The length of the pointed-to string.
- assertEquals(6, Bytes.getLong(rows, offset));
- offset += Longs.BYTES;
- }
-
- // Should have used up whole buffer.
- assertEquals(rows.length, offset);
- }
-
- // Setting a field to NULL should add to the null bitmap and remove
- // the old value from the indirect buffer.
- row.setNull("c3");
- {
- WriteRequestPBOrBuilder pb =
- Operation.createAndFillWriteRequestPB(ImmutableList.<Operation>of(insert));
- RowOperationsPB rowOps = pb.getRowOperations();
- assertEquals(6 * 4, rowOps.getIndirectData().size());
- assertEquals("c0_valc1_valc2_valc4_val", rowOps.getIndirectData().toStringUtf8());
- byte[] rows = rowOps.getRows().toByteArray();
- assertEquals(ChangeType.INSERT.toEncodedByte(), rows[0]);
- // The "isset" bitset should have 5 bits set
- assertEquals(0x1f, rows[1]);
- // The "null" bitset should have 1 bit set for the null column
- assertEquals(1 << 3, rows[2]);
-
- // Check the strings.
- int offset = 3;
- int indirOffset = 0;
- for (int i = 0; i <= 4; i++) {
- if (i == 3) continue;
- // The offset into the indirect buffer
- assertEquals(indirOffset, Bytes.getLong(rows, offset));
- indirOffset += 6;
- offset += Longs.BYTES;
- // The length of the pointed-to string.
- assertEquals(6, Bytes.getLong(rows, offset));
- offset += Longs.BYTES;
- }
- // Should have used up whole buffer.
- assertEquals(rows.length, offset);
- }
- }
-
- private Schema createAllTypesKeySchema() {
- ArrayList<ColumnSchema> columns = new ArrayList<ColumnSchema>(7);
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c0", Type.INT8).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c1", Type.INT16).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c2", Type.INT32).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c3", Type.INT64).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c4", Type.TIMESTAMP).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c5", Type.STRING).key(true).build());
- columns.add(new ColumnSchema.ColumnSchemaBuilder("c6", Type.BINARY).key(true).build());
- return new Schema(columns);
- }
-
- @Test
- public void testRowKeyStringify() {
- KuduTable table = Mockito.mock(KuduTable.class);
- Mockito.doReturn(createAllTypesKeySchema()).when(table).getSchema();
- Insert insert = new Insert(table);
- PartialRow row = insert.getRow();
- row.addByte("c0", (byte) 1);
- row.addShort("c1", (short) 2);
- row.addInt("c2", 3);
- row.addLong("c3", 4);
- row.addLong("c4", 5);
- row.addString("c5", "c5_val");
- row.addBinary("c6", Bytes.fromString("c6_val"));
-
- assertEquals("(int8 c0=1, int16 c1=2, int32 c2=3, int64 c3=4, timestamp c4=5, string" +
- " c5=c5_val, binary c6=\"c6_val\")",
- insert.getRow().stringifyRowKey());
-
- // Test an incomplete row key.
- insert = new Insert(table);
- row = insert.getRow();
- row.addByte("c0", (byte) 1);
- try {
- row.stringifyRowKey();
- fail("Should not be able to stringifyRowKey when not all keys are specified");
- } catch (IllegalStateException ise) {
- // Expected.
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestRequestTracker.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestRequestTracker.java b/java/kudu-client/src/test/java/org/kududb/client/TestRequestTracker.java
deleted file mode 100644
index 7528de6..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestRequestTracker.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-public class TestRequestTracker {
-
- @Test(timeout = 10000)
- public void test() {
- RequestTracker tracker = new RequestTracker("test");
-
- // A new tracker should have no incomplete RPCs.
- assertEquals(RequestTracker.NO_SEQ_NO, tracker.firstIncomplete());
-
- int max = 10;
-
- for (int i = 0; i < max; i++) {
- tracker.newSeqNo();
- }
-
- // The first RPC is the incomplete one.
- assertEquals(1, tracker.firstIncomplete());
-
- // Mark the first as complete, incomplete should advance by 1.
- tracker.rpcCompleted(1);
- assertEquals(2, tracker.firstIncomplete());
-
- // Mark the RPC in the middle as complete, first incomplete doesn't change.
- tracker.rpcCompleted(5);
- assertEquals(2, tracker.firstIncomplete());
-
- // Mark the first half as complete.
- // Note that we're also testing that rpcCompleted is idempotent.
- for (int i = 1; i < max / 2; i++) {
- tracker.rpcCompleted(i);
- }
-
- assertEquals(6, tracker.firstIncomplete());
-
- // Get a few more sequence numbers.
- long lastSeqNo = 0;
- for (int i = max / 2; i <= max; i++) {
- lastSeqNo = tracker.newSeqNo();
- }
-
- // Mark them all as complete except the last one.
- while (tracker.firstIncomplete() != lastSeqNo) {
- tracker.rpcCompleted(tracker.firstIncomplete());
- }
-
- assertEquals(lastSeqNo, tracker.firstIncomplete());
- tracker.rpcCompleted(lastSeqNo);
-
- // Test that we get back to NO_SEQ_NO after marking them all.
- assertEquals(RequestTracker.NO_SEQ_NO, tracker.firstIncomplete());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestRowErrors.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestRowErrors.java b/java/kudu-client/src/test/java/org/kududb/client/TestRowErrors.java
deleted file mode 100644
index 90d11aa..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestRowErrors.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-import com.google.common.collect.ImmutableList;
-
-public class TestRowErrors extends BaseKuduTest {
-
- private static KuduTable table;
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BaseKuduTest.setUpBeforeClass();
-
- }
-
- @Test(timeout = 100000)
- public void singleTabletTest() throws Exception {
- String tableName = TestRowErrors.class.getName() + "-" + System.currentTimeMillis();
- createTable(tableName, basicSchema, getBasicCreateTableOptions());
- table = openTable(tableName);
- AsyncKuduSession session = client.newSession();
-
- // Insert 3 rows to play with.
- for (int i = 0; i < 3; i++) {
- session.apply(createInsert(i)).join(DEFAULT_SLEEP);
- }
-
- // Try a single dupe row insert with AUTO_FLUSH_SYNC.
- Insert dupeForZero = createInsert(0);
- OperationResponse resp = session.apply(dupeForZero).join(DEFAULT_SLEEP);
- assertTrue(resp.hasRowError());
- assertTrue(resp.getRowError().getOperation() == dupeForZero);
-
- // Now try inserting two dupes and one good row, make sure we get only two errors back.
- dupeForZero = createInsert(0);
- Insert dupeForTwo = createInsert(2);
- session.setFlushMode(AsyncKuduSession.FlushMode.MANUAL_FLUSH);
- session.apply(dupeForZero);
- session.apply(dupeForTwo);
- session.apply(createInsert(4));
-
- List<OperationResponse> responses = session.flush().join(DEFAULT_SLEEP);
- List<RowError> errors = OperationResponse.collectErrors(responses);
- assertEquals(2, errors.size());
- assertTrue(errors.get(0).getOperation() == dupeForZero);
- assertTrue(errors.get(1).getOperation() == dupeForTwo);
- }
-
- /**
- * Test collecting errors from multiple tablets.
- * @throws Exception
- */
- @Test(timeout = 100000)
- public void multiTabletTest() throws Exception {
- String tableName = TestRowErrors.class.getName() + "-" + System.currentTimeMillis();
- createFourTabletsTableWithNineRows(tableName);
- table = openTable(tableName);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(KuduSession.FlushMode.AUTO_FLUSH_BACKGROUND);
-
- int dupRows = 3;
- session.apply(createInsert(12));
- session.apply(createInsert(22));
- session.apply(createInsert(32));
-
- session.flush();
-
- RowErrorsAndOverflowStatus reos = session.getPendingErrors();
- assertEquals(dupRows, reos.getRowErrors().length);
- assertEquals(0, session.countPendingErrors());
- }
-
- private Insert createInsert(int key) {
- return createBasicSchemaInsert(table, key);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestRowResult.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestRowResult.java b/java/kudu-client/src/test/java/org/kududb/client/TestRowResult.java
deleted file mode 100644
index 1b302c1..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestRowResult.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.kududb.client;
-
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.kududb.Type;
-
-import java.nio.ByteBuffer;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class TestRowResult extends BaseKuduTest {
-
- // Generate a unique table name
- private static final String TABLE_NAME =
- TestRowResult.class.getName() + "-" + System.currentTimeMillis();
-
- private static KuduTable table;
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BaseKuduTest.setUpBeforeClass();
- createTable(TABLE_NAME, allTypesSchema, getAllTypesCreateTableOptions());
- table = openTable(TABLE_NAME);
- }
-
- @Test(timeout = 10000)
- public void test() throws Exception {
- Insert insert = table.newInsert();
- PartialRow row = insert.getRow();
-
- row.addByte(0, (byte) 1);
- row.addShort(1, (short) 2);
- row.addInt(2, 3);
- row.addLong(3, 4l);
- row.addBoolean(4, true);
- row.addFloat(5, 5.6f);
- row.addDouble(6, 7.8);
- row.addString(7, "string-value");
- row.addBinary(8, "binary-array".getBytes());
- ByteBuffer bb = ByteBuffer.wrap("binary-bytebuffer".getBytes());
- bb.position(7); // We're only inserting the bytebuffer part of the original array.
- row.addBinary(9, bb);
- row.setNull(10);
- row.addLong(11, 11l);
-
- KuduSession session = syncClient.newSession();
- session.apply(insert);
-
- KuduScanner scanner = syncClient.newScannerBuilder(table).build();
- while (scanner.hasMoreRows()) {
- RowResultIterator it = scanner.nextRows();
- assertTrue(it.hasNext());
- RowResult rr = it.next();
-
- assertEquals((byte) 1, rr.getByte(0));
- assertEquals((byte) 1, rr.getByte(allTypesSchema.getColumnByIndex(0).getName()));
-
- assertEquals((short) 2, rr.getShort(1));
- assertEquals((short) 2, rr.getShort(allTypesSchema.getColumnByIndex(1).getName()));
-
- assertEquals(3, rr.getInt(2));
- assertEquals(3, rr.getInt(allTypesSchema.getColumnByIndex(2).getName()));
-
- assertEquals(4, rr.getLong(3));
- assertEquals(4, rr.getLong(allTypesSchema.getColumnByIndex(3).getName()));
-
- assertEquals(true, rr.getBoolean(4));
- assertEquals(true, rr.getBoolean(allTypesSchema.getColumnByIndex(4).getName()));
-
- assertEquals(5.6f, rr.getFloat(5), .001f);
- assertEquals(5.6f, rr.getFloat(allTypesSchema.getColumnByIndex(5).getName()), .001f);
-
- assertEquals(7.8, rr.getDouble(6), .001);
- assertEquals(7.8, rr.getDouble(allTypesSchema.getColumnByIndex(6).getName()), .001f);
-
- assertEquals("string-value", rr.getString(7));
- assertEquals("string-value", rr.getString(allTypesSchema.getColumnByIndex(7).getName()));
-
- assertArrayEquals("binary-array".getBytes(), rr.getBinaryCopy(8));
- assertArrayEquals("binary-array".getBytes(),
- rr.getBinaryCopy(allTypesSchema.getColumnByIndex(8).getName()));
-
- ByteBuffer buffer = rr.getBinary(8);
- assertEquals(buffer, rr.getBinary(allTypesSchema.getColumnByIndex(8).getName()));
- byte[] binaryValue = new byte[buffer.remaining()];
- buffer.get(binaryValue);
- assertArrayEquals("binary-array".getBytes(), binaryValue);
-
- assertArrayEquals("bytebuffer".getBytes(), rr.getBinaryCopy(9));
-
- assertEquals(true, rr.isNull(10));
- assertEquals(true, rr.isNull(allTypesSchema.getColumnByIndex(10).getName()));
-
- assertEquals(11, rr.getLong(11));
- assertEquals(11, rr.getLong(allTypesSchema.getColumnByIndex(11).getName()));
-
- // We test with the column name once since it's the same method for all types, unlike above.
- assertEquals(Type.INT8, rr.getColumnType(allTypesSchema.getColumnByIndex(0).getName()));
- assertEquals(Type.INT8, rr.getColumnType(0));
- assertEquals(Type.INT16, rr.getColumnType(1));
- assertEquals(Type.INT32, rr.getColumnType(2));
- assertEquals(Type.INT64, rr.getColumnType(3));
- assertEquals(Type.BOOL, rr.getColumnType(4));
- assertEquals(Type.FLOAT, rr.getColumnType(5));
- assertEquals(Type.DOUBLE, rr.getColumnType(6));
- assertEquals(Type.STRING, rr.getColumnType(7));
- assertEquals(Type.BINARY, rr.getColumnType(8));
- assertEquals(Type.TIMESTAMP, rr.getColumnType(11));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5c305689/java/kudu-client/src/test/java/org/kududb/client/TestScanPredicate.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/kududb/client/TestScanPredicate.java b/java/kudu-client/src/test/java/org/kududb/client/TestScanPredicate.java
deleted file mode 100644
index d67380b..0000000
--- a/java/kudu-client/src/test/java/org/kududb/client/TestScanPredicate.java
+++ /dev/null
@@ -1,609 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.kududb.client;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSortedSet;
-import org.junit.Assert;
-import org.junit.Test;
-import org.kududb.ColumnSchema;
-import org.kududb.Schema;
-import org.kududb.Type;
-import org.kududb.client.KuduPredicate.ComparisonOp;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NavigableSet;
-import java.util.TreeSet;
-
-public class TestScanPredicate extends BaseKuduTest {
-
- private Schema createTableSchema(Type type) {
- ColumnSchema key = new ColumnSchema.ColumnSchemaBuilder("key", Type.INT64).key(true).build();
- ColumnSchema val = new ColumnSchema.ColumnSchemaBuilder("value", type).nullable(true).build();
- return new Schema(ImmutableList.of(key, val));
- }
-
- private static CreateTableOptions createTableOptions() {
- return new CreateTableOptions().setRangePartitionColumns(ImmutableList.of("key"));
- }
-
- private int countRows(KuduTable table, KuduPredicate... predicates) throws Exception {
- KuduScanner.KuduScannerBuilder scanBuilder = new KuduScanner.KuduScannerBuilder(client, table);
- for (KuduPredicate predicate : predicates) {
- scanBuilder.addPredicate(predicate);
- }
-
- KuduScanner scanner = scanBuilder.build();
-
- int count = 0;
- while (scanner.hasMoreRows()) {
- count += scanner.nextRows().getNumRows();
- }
- return count;
- }
-
- private NavigableSet<Long> createIntegerValues(Type type) {
- NavigableSet<Long> values = new TreeSet<>();
- for (long i = -50; i < 50; i++) {
- values.add(i);
- }
- values.add(KuduPredicate.minIntValue(type));
- values.add(KuduPredicate.minIntValue(type) + 1);
- values.add(KuduPredicate.maxIntValue(type) - 1);
- values.add(KuduPredicate.maxIntValue(type));
- return values;
- }
-
- private List<Long> createIntegerTestValues(Type type) {
- return ImmutableList.of(
- KuduPredicate.minIntValue(type),
- KuduPredicate.minIntValue(type) + 1,
- -51L,
- 50L,
- 0L,
- 49L,
- 50L,
- KuduPredicate.maxIntValue(type) - 1,
- KuduPredicate.maxIntValue(type));
- }
-
- private NavigableSet<Float> createFloatValues() {
- NavigableSet<Float> values = new TreeSet<>();
- for (long i = -50; i < 50; i++) {
- values.add((float) i + (float) i / 100.0F);
- }
-
- values.add(Float.NEGATIVE_INFINITY);
- values.add(-Float.MAX_VALUE);
- values.add(-Float.MIN_NORMAL);
- values.add(-Float.MIN_VALUE);
- values.add(Float.MIN_VALUE);
- values.add(Float.MIN_NORMAL);
- values.add(Float.MAX_VALUE);
- values.add(Float.POSITIVE_INFINITY);
-
- // TODO: uncomment after fixing KUDU-1386
- // values.add(Float.NaN);
- return values;
- }
-
- private List<Float> createFloatTestValues() {
- return ImmutableList.of(
- Float.NEGATIVE_INFINITY,
- -Float.MAX_VALUE,
- -100.0F,
- -1.1F,
- -1.0F,
- -Float.MIN_NORMAL,
- -Float.MIN_VALUE,
- 0.0F,
- Float.MIN_VALUE,
- Float.MIN_NORMAL,
- 1.0F,
- 1.1F,
- 100.0F,
- Float.MAX_VALUE,
- Float.POSITIVE_INFINITY
-
- // TODO: uncomment after fixing KUDU-1386
- // Float.NaN
- );
- }
-
- private NavigableSet<Double> createDoubleValues() {
- NavigableSet<Double> values = new TreeSet<>();
- for (long i = -50; i < 50; i++) {
- values.add((double) i + (double) i / 100.0);
- }
-
- values.add(Double.NEGATIVE_INFINITY);
- values.add(-Double.MAX_VALUE);
- values.add(-Double.MIN_NORMAL);
- values.add(-Double.MIN_VALUE);
- values.add(Double.MIN_VALUE);
- values.add(Double.MIN_NORMAL);
- values.add(Double.MAX_VALUE);
- values.add(Double.POSITIVE_INFINITY);
-
- // TODO: uncomment after fixing KUDU-1386
- // values.add(Double.NaN);
- return values;
- }
-
- private List<Double> createDoubleTestValues() {
- return ImmutableList.of(
- Double.NEGATIVE_INFINITY,
- -Double.MAX_VALUE,
- -100.0,
- -1.1,
- -1.0,
- -Double.MIN_NORMAL,
- -Double.MIN_VALUE,
- 0.0,
- Double.MIN_VALUE,
- Double.MIN_NORMAL,
- 1.0,
- 1.1,
- 100.0,
- Double.MAX_VALUE,
- Double.POSITIVE_INFINITY
-
- // TODO: uncomment after fixing KUDU-1386
- // Double.NaN
- );
- }
-
- private NavigableSet<String> createStringValues() {
- return ImmutableSortedSet.of("", "\0", "\0\0", "a", "a\0", "a\0a", "aa\0");
- }
-
- private List<String> createStringTestValues() {
- List<String> values = new ArrayList<>(createStringValues());
- values.add("aa");
- values.add("\1");
- values.add("a\1");
- return values;
- }
-
- private void checkIntPredicates(KuduTable table,
- NavigableSet<Long> values,
- List<Long> testValues) throws Exception {
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
- for (long v : testValues) {
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.contains(v) ? 1 : 0, countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(v).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(v, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(v, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(v).size(), countRows(table, less));
- }
- }
-
- @Test
- public void testBoolPredicates() throws Exception {
- Schema schema = createTableSchema(Type.BOOL);
- syncClient.createTable("bool-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("bool-table");
-
- NavigableSet<Boolean> values = ImmutableSortedSet.of(false, true);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (boolean value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addBoolean("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
-
- for (boolean v : values) {
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.contains(v) ? 1 : 0, countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(v).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(v, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(v, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(v).size(), countRows(table, less));
- }
- }
-
- @Test
- public void testBytePredicates() throws Exception {
- Schema schema = createTableSchema(Type.INT8);
- syncClient.createTable("byte-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("byte-table");
-
- NavigableSet<Long> values = createIntegerValues(Type.INT8);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (long value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addByte("value", (byte) value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- checkIntPredicates(table, values, createIntegerTestValues(Type.INT8));
- }
-
- @Test
- public void testShortPredicates() throws Exception {
- Schema schema = createTableSchema(Type.INT16);
- syncClient.createTable("short-table", schema,
- new CreateTableOptions().setRangePartitionColumns(
- ImmutableList.<String>of()));
- KuduTable table = syncClient.openTable("short-table");
-
- NavigableSet<Long> values = createIntegerValues(Type.INT16);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (long value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addShort("value", (short) value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- checkIntPredicates(table, values, createIntegerTestValues(Type.INT16));
- }
-
- @Test
- public void testIntPredicates() throws Exception {
- Schema schema = createTableSchema(Type.INT32);
- syncClient.createTable("int-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("int-table");
-
- NavigableSet<Long> values = createIntegerValues(Type.INT32);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (long value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addInt("value", (int) value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- checkIntPredicates(table, values, createIntegerTestValues(Type.INT32));
- }
-
- @Test
- public void testLongPredicates() throws Exception {
- Schema schema = createTableSchema(Type.INT64);
- syncClient.createTable("long-table", schema,
- new CreateTableOptions().setRangePartitionColumns(
- ImmutableList.<String>of()));
- KuduTable table = syncClient.openTable("long-table");
-
- NavigableSet<Long> values = createIntegerValues(Type.INT64);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (long value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addLong("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- checkIntPredicates(table, values, createIntegerTestValues(Type.INT64));
- }
-
- @Test
- public void testTimestampPredicate() throws Exception {
- Schema schema = createTableSchema(Type.INT64);
- syncClient.createTable("timestamp-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("timestamp-table");
-
- NavigableSet<Long> values = createIntegerValues(Type.INT64);
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (long value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addLong("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- checkIntPredicates(table, values, createIntegerTestValues(Type.INT64));
- }
-
- @Test
- public void testFloatPredicates() throws Exception {
- Schema schema = createTableSchema(Type.FLOAT);
- syncClient.createTable("float-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("float-table");
-
- NavigableSet<Float> values = createFloatValues();
- List<Float> testValues = createFloatTestValues();
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (float value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addFloat("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
-
- for (float v : testValues) {
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.subSet(v, true, v, true).size(), countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(v).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(v, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(v, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(v).size(), countRows(table, less));
- }
- }
-
- @Test
- public void testDoublePredicates() throws Exception {
- Schema schema = createTableSchema(Type.DOUBLE);
- syncClient.createTable("double-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("double-table");
-
- NavigableSet<Double> values = createDoubleValues();
- List<Double> testValues = createDoubleTestValues();
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (double value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addDouble("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
-
- for (double v : testValues) {
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.subSet(v, true, v, true).size(), countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(v).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(v, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(v, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(v).size(), countRows(table, less));
- }
- }
-
- @Test
- public void testStringPredicates() throws Exception {
- Schema schema = createTableSchema(Type.STRING);
- syncClient.createTable("string-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("string-table");
-
- NavigableSet<String> values = createStringValues();
- List<String> testValues = createStringTestValues();
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (String value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addString("value", value);
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
-
- for (String v : testValues) {
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.subSet(v, true, v, true).size(), countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(v).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(v, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(v, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(v).size(), countRows(table, less));
- }
- }
-
- @Test
- public void testBinaryPredicates() throws Exception {
- Schema schema = createTableSchema(Type.BINARY);
- syncClient.createTable("binary-table", schema, createTableOptions());
- KuduTable table = syncClient.openTable("binary-table");
-
- NavigableSet<String> values = createStringValues();
- List<String> testValues = createStringTestValues();
- KuduSession session = syncClient.newSession();
- session.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
- long i = 0;
- for (String value : values) {
- Insert insert = table.newInsert();
- insert.getRow().addLong("key", i++);
- insert.getRow().addBinary("value", Bytes.fromString(value));
- session.apply(insert);
- }
- Insert nullInsert = table.newInsert();
- nullInsert.getRow().addLong("key", i++);
- nullInsert.getRow().setNull("value");
- session.apply(nullInsert);
- session.flush();
-
- ColumnSchema col = table.getSchema().getColumn("value");
- Assert.assertEquals(values.size() + 1, countRows(table));
-
- for (String s : testValues) {
- byte[] v = Bytes.fromString(s);
- // value = v
- KuduPredicate equal = KuduPredicate.newComparisonPredicate(col, ComparisonOp.EQUAL, v);
- Assert.assertEquals(values.subSet(s, true, s, true).size(), countRows(table, equal));
-
- // value >= v
- KuduPredicate greaterEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER_EQUAL, v);
- Assert.assertEquals(values.tailSet(s).size(), countRows(table, greaterEqual));
-
- // value <= v
- KuduPredicate lessEqual =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS_EQUAL, v);
- Assert.assertEquals(values.headSet(s, true).size(), countRows(table, lessEqual));
-
- // value > v
- KuduPredicate greater =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.GREATER, v);
- Assert.assertEquals(values.tailSet(s, false).size(), countRows(table, greater));
-
- // value < v
- KuduPredicate less =
- KuduPredicate.newComparisonPredicate(col, ComparisonOp.LESS, v);
- Assert.assertEquals(values.headSet(s).size(), countRows(table, less));
- }
- }
-}