/** * Builds a {@link KuduScanner} using the passed configurations. * @return a new {@link KuduScanner} */ @Override public KuduScanner build() { return new KuduScanner(new AsyncKuduScanner( client, table, projectedColumnNames, projectedColumnIndexes, readMode, isFaultTolerant, scanRequestTimeout, predicates, limit, cacheBlocks, prefetching, lowerBoundPrimaryKey, upperBoundPrimaryKey, htTimestamp, batchSizeBytes, PartitionPruner.create(this), replicaSelection)); } }
@Test(timeout = 100000) @Ignore("TODO(KUDU-2415)") // not fixed yet! public void testReadYourWritesFreshClientFreshTable() throws Exception { // NOTE: this test fails because the first tablet in the table // is empty and has never been written to. // Perform scan in READ_YOUR_WRITES mode. Before the scan, verify that the // propagated timestamp is unset, since this is a fresh client. AsyncKuduScanner scanner = asyncClient.newScannerBuilder(table) .readMode(AsyncKuduScanner.ReadMode.READ_YOUR_WRITES) .build(); KuduScanner syncScanner = new KuduScanner(scanner); assertEquals(scanner.getReadMode(), syncScanner.getReadMode()); assertEquals(AsyncKuduClient.NO_TIMESTAMP, asyncClient.getLastPropagatedTimestamp()); assertEquals(AsyncKuduClient.NO_TIMESTAMP, scanner.getSnapshotTimestamp()); assertEquals(9, countRowsInScan(syncScanner)); }
@Test(timeout = 100000) public void testScanTokenPropagatesTimestamp() throws Exception { // Initially, the client does not have the timestamp set. assertEquals(AsyncKuduClient.NO_TIMESTAMP, asyncClient.getLastPropagatedTimestamp()); assertEquals(KuduClient.NO_TIMESTAMP, client.getLastPropagatedTimestamp()); AsyncKuduScanner scanner = asyncClient.newScannerBuilder(table).build(); KuduScanner syncScanner = new KuduScanner(scanner); // Let the client receive the propagated timestamp in the scanner response. syncScanner.nextRows().getNumRows(); final long tsPrev = asyncClient.getLastPropagatedTimestamp(); final long tsPropagated = tsPrev + 1000000; ScanTokenPB.Builder pbBuilder = ScanTokenPB.newBuilder(); pbBuilder.setTableName(table.getName()); pbBuilder.setPropagatedTimestamp(tsPropagated); Client.ScanTokenPB scanTokenPB = pbBuilder.build(); final byte[] serializedToken = KuduScanToken.serialize(scanTokenPB); // Deserialize scan tokens and make sure the client's last propagated // timestamp is updated accordingly. assertEquals(tsPrev, asyncClient.getLastPropagatedTimestamp()); KuduScanToken.deserializeIntoScanner(serializedToken, client); assertEquals(tsPropagated, asyncClient.getLastPropagatedTimestamp()); }
.replicaSelection(replicaSelection) .build(); KuduScanner syncScanner = new KuduScanner(scanner); long preTs = asyncClient.getLastPropagatedTimestamp(); assertNotEquals(AsyncKuduClient.NO_TIMESTAMP,
@Test(timeout = 100000) public void testReadAtSnapshotNoTimestamp() throws Exception { // Perform scan in READ_AT_SNAPSHOT mode with no snapshot timestamp // specified. Verify that the scanner timestamp is set from the tablet // server response. AsyncKuduScanner scanner = asyncClient.newScannerBuilder(table) .readMode(AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT) .build(); assertEquals(AsyncKuduClient.NO_TIMESTAMP, scanner.getSnapshotTimestamp()); KuduScanner syncScanner = new KuduScanner(scanner); assertEquals(scanner.getReadMode(), syncScanner.getReadMode()); assertTrue(syncScanner.hasMoreRows()); assertEquals(AsyncKuduClient.NO_TIMESTAMP, scanner.getSnapshotTimestamp()); int rowCount = syncScanner.nextRows().getNumRows(); // At this point, the call to the first tablet server should have been // done already, so check the snapshot timestamp. final long tsRef = scanner.getSnapshotTimestamp(); assertNotEquals(AsyncKuduClient.NO_TIMESTAMP, tsRef); assertTrue(syncScanner.hasMoreRows()); while (syncScanner.hasMoreRows()) { rowCount += syncScanner.nextRows().getNumRows(); assertEquals(tsRef, scanner.getSnapshotTimestamp()); } assertEquals(9, rowCount); }
.readMode(AsyncKuduScanner.ReadMode.READ_YOUR_WRITES) .build(); KuduScanner syncScanner = new KuduScanner(scanner); assertEquals(scanner.getReadMode(), syncScanner.getReadMode()); assertEquals(AsyncKuduClient.NO_TIMESTAMP, scanner.getSnapshotTimestamp()); .readMode(AsyncKuduScanner.ReadMode.READ_YOUR_WRITES) .build(); syncScanner = new KuduScanner(scanner); assertTrue(preTs < asyncClient.getLastPropagatedTimestamp()); preTs = asyncClient.getLastPropagatedTimestamp();
KuduScanner syncScanner = new KuduScanner(scanner);