@Override public Iterable<BatchingVisitable<RowResult<byte[]>>> getRanges(TableReference tableRef, Iterable<RangeRequest> rangeRequests) { checkTableName(tableRef); return delegate().getRanges(tableRef, rangeRequests); }
@Before public void setUp() throws Exception { delegateTransaction = Mockito.mock(AbstractTransaction.class); SweepStrategyManager sweepStrategies = Mockito.mock(SweepStrategyManager.class); when(sweepStrategies.get()).thenReturn(ImmutableMap.of( DUMMY_CONSERVATIVE_TABLE, TableMetadataPersistence.SweepStrategy.CONSERVATIVE, DUMMY_THOROUGH_TABLE, TableMetadataPersistence.SweepStrategy.THOROUGH)); readTransaction = new ReadTransaction(delegateTransaction, sweepStrategies); }
@Test public void notAllowColumnRangeGets() { checkThrowsAndNoInteraction(() -> readTransaction.getRowsColumnRange( DUMMY_THOROUGH_TABLE, ImmutableList.of(EMPTY_BYTES), new ColumnRangeSelection(EMPTY_BYTES, EMPTY_BYTES), 1), IllegalStateException.class, "Cannot read"); }
@Test public void allowGetsOnConservativeTables() { ImmutableSet<Cell> cellToGet = ImmutableSet.of(DUMMY_CELL); readTransaction.get(DUMMY_CONSERVATIVE_TABLE, cellToGet); Mockito.verify(delegateTransaction, times(1)).get(eq(DUMMY_CONSERVATIVE_TABLE), eq(cellToGet)); }
@Test public void notAllowPuts() { checkThrowsAndNoInteraction(() -> readTransaction.put( DUMMY_CONSERVATIVE_TABLE, ImmutableMap.of(DUMMY_CELL, "value".getBytes())), IllegalArgumentException.class, "is a read only transaction"); }
@Test public void notAllowDeletes() { checkThrowsAndNoInteraction(() -> readTransaction.delete( DUMMY_CONSERVATIVE_TABLE, ImmutableSet.of(DUMMY_CELL)), IllegalArgumentException.class, "is a read only transaction"); }
@Override public <T, C extends PreCommitCondition, E extends Exception> T runTaskWithConditionReadOnly(C condition, ConditionAwareTransactionTask<T, C, E> task) throws E { checkOpen(); SnapshotTransaction txn = new ShouldNotDeleteAndRollbackTransaction( metricsManager, keyValueService, transactionService, startTimestamp.get(), constraintCheckingMode, readSentinelBehavior, allowHiddenTableAccess, timestampValidationReadCache, MoreExecutors.newDirectExecutorService(), defaultGetRangesConcurrency, transactionConfig); return runTaskThrowOnConflict((transaction) -> task.execute(transaction, condition), new ReadTransaction(txn, txn.sweepStrategyManager)); } }
@Test public void notAllowBatchColumnRangeGets() { checkThrowsAndNoInteraction(() -> readTransaction.getRowsColumnRange( DUMMY_THOROUGH_TABLE, ImmutableList.of(EMPTY_BYTES), BatchColumnRangeSelection.create(EMPTY_BYTES, EMPTY_BYTES, 1)), IllegalStateException.class, "Cannot read"); }
@Override public <T> Stream<T> getRanges( final TableReference tableRef, Iterable<RangeRequest> rangeRequests, BiFunction<RangeRequest, BatchingVisitable<RowResult<byte[]>>, T> visitableProcessor) { checkTableName(tableRef); return delegate().getRanges(tableRef, rangeRequests, visitableProcessor); }
try { return runTaskThrowOnConflict(txn -> task.execute(txn, condition), new ReadTransaction(transaction, sweepStrategyManager)); } finally { condition.cleanup();
@Override public SortedMap<byte[], RowResult<byte[]>> getRows(TableReference tableRef, Iterable<byte[]> rows, ColumnSelection columnSelection) { checkTableName(tableRef); return delegate().getRows(tableRef, rows, columnSelection); }
@Override public <T, C extends PreCommitCondition, E extends Exception> T runTaskWithConditionReadOnly(C condition, ConditionAwareTransactionTask<T, C, E> task) throws E { checkOpen(); SnapshotTransaction txn = new ShouldNotDeleteAndRollbackTransaction( metricsManager, keyValueService, transactionService, startTimestamp.get(), constraintCheckingMode, readSentinelBehavior, allowHiddenTableAccess, timestampValidationReadCache, MoreExecutors.newDirectExecutorService(), defaultGetRangesConcurrency, transactionConfig); return runTaskThrowOnConflict((transaction) -> task.execute(transaction, condition), new ReadTransaction(txn, txn.sweepStrategyManager)); } }
@Override public BatchingVisitable<RowResult<byte[]>> getRange(TableReference tableRef, RangeRequest rangeRequest) { checkTableName(tableRef); return delegate().getRange(tableRef, rangeRequest); }
try { return runTaskThrowOnConflict(txn -> task.execute(txn, condition), new ReadTransaction(transaction, sweepStrategyManager)); } finally { condition.cleanup();
@Override public Map<byte[], BatchingVisitable<Map.Entry<Cell, byte[]>>> getRowsColumnRange(TableReference tableRef, Iterable<byte[]> rows, BatchColumnRangeSelection columnRangeSelection) { checkTableName(tableRef); return delegate().getRowsColumnRange(tableRef, rows, columnRangeSelection); }
@Override public Map<Cell, byte[]> get(TableReference tableRef, Set<Cell> cells) { checkTableName(tableRef); return delegate().get(tableRef, cells); }
@Override public Stream<BatchingVisitable<RowResult<byte[]>>> getRangesLazy( final TableReference tableRef, Iterable<RangeRequest> rangeRequests) { checkTableName(tableRef); return delegate().getRangesLazy(tableRef, rangeRequests); }
@Override public <T> Stream<T> getRanges( final TableReference tableRef, Iterable<RangeRequest> rangeRequests, int concurrencyLevel, BiFunction<RangeRequest, BatchingVisitable<RowResult<byte[]>>, T> visitableProcessor) { checkTableName(tableRef); return delegate().getRanges(tableRef, rangeRequests, concurrencyLevel, visitableProcessor); }
@Override public Iterator<Map.Entry<Cell, byte[]>> getRowsColumnRange(TableReference tableRef, Iterable<byte[]> rows, ColumnRangeSelection columnRangeSelection, int batchHint) { checkTableName(tableRef); return delegate().getRowsColumnRange(tableRef, rows, columnRangeSelection, batchHint); }
@Override public <T> Stream<T> getRanges( final TableReference tableRef, Iterable<RangeRequest> rangeRequests, int concurrencyLevel, BiFunction<RangeRequest, BatchingVisitable<RowResult<byte[]>>, T> visitableProcessor) { checkTableName(tableRef); return delegate().getRanges(tableRef, rangeRequests, concurrencyLevel, visitableProcessor); }