public BufferedOperation(Deferred<LocatedTablet> tablet, Operation operation) { tabletLookup = AsyncUtil.addBoth(tablet, new Callback<Void, Object>() { @Override public Void call(final Object tablet) { BufferedOperation.this.tablet = tablet; return null; } }); this.operation = Preconditions.checkNotNull(operation); }
/** * Flushes a write buffer. This method takes ownership of the buffer, no other concurrent access * is allowed. * * @param buffer the buffer to flush, must not be modified once passed to this method * @return the operation responses */ private Deferred<List<OperationResponse>> doFlush(Buffer buffer) { LOG.debug("flushing buffer: {}", buffer); if (buffer.getOperations().isEmpty()) { // no-op. return Deferred.<List<OperationResponse>>fromResult(ImmutableList.<OperationResponse>of()); } Deferred<List<BatchResponse>> batchResponses = new Deferred<>(); Callback<Void, Object> tabletLookupCB = new TabletLookupCB(buffer, batchResponses); for (BufferedOperation bufferedOperation : buffer.getOperations()) { AsyncUtil.addBoth(bufferedOperation.getTabletLookup(), tabletLookupCB); } return batchResponses.addCallback(ConvertBatchToListOfResponsesCB.getInstance()); }
AsyncUtil.addBoth( Deferred.group(batchResponses), new Callback<Void, Object>() {