@Override public CuratorTransaction inTransaction() throws Exception { openConnectionIfNeeded(); return new CuratorTransactionImpl(client); }
static List<CuratorTransactionResult> wrapResults(CuratorFrameworkImpl client, List<OpResult> resultList, CuratorMultiTransactionRecord transaction) { ImmutableList.Builder<CuratorTransactionResult> builder = ImmutableList.builder(); for ( int i = 0; i < resultList.size(); ++i ) { OpResult opResult = resultList.get(i); TypeAndPath metadata = transaction.getMetadata(i); CuratorTransactionResult curatorResult = makeCuratorResult(client, opResult, metadata); builder.add(curatorResult); } return builder.build(); }
@Override public TransactionCheckBuilder<CuratorTransactionBridge> check() { Preconditions.checkState(!isCommitted, "transaction already committed"); CuratorTransactionBridge asBridge = this; return makeTransactionCheckBuilder(client, asBridge, transaction); }
@Override public Collection<CuratorTransactionResult> commit() throws Exception { Preconditions.checkState(!isCommitted, "transaction already committed"); isCommitted = true; List<OpResult> resultList = RetryLoop.callWithRetry ( client.getZookeeperClient(), new Callable<List<OpResult>>() { @Override public List<OpResult> call() throws Exception { return doOperation(); } } ); if ( resultList.size() != transaction.metadataSize() ) { throw new IllegalStateException(String.format("Result size (%d) doesn't match input size (%d)", resultList.size(), transaction.metadataSize())); } return wrapResults(client, resultList, transaction); }
@Override public void processResult(int rc, String path, Object ctx, List<OpResult> opResults) { trace.commit(); List<CuratorTransactionResult> curatorResults = (opResults != null) ? CuratorTransactionImpl.wrapResults(client, opResults, operationAndData.getData()) : null; CuratorEvent event = new CuratorEventImpl(client, CuratorEventType.TRANSACTION, rc, path, null, ctx, null, null, null, null, null, curatorResults); client.processBackgroundOperation(operationAndData, event); } };
@Override public CuratorTransaction inTransaction() { checkState(); return new CuratorTransactionImpl(this); }
CuratorTransactionResult curatorResult = makeCuratorResult(opResult, metadata); builder.add(curatorResult);
private List<CuratorTransactionResult> forOperationsInForeground(final CuratorMultiTransactionRecord record) throws Exception { TimeTrace trace = client.getZookeeperClient().startTracer("CuratorMultiTransactionImpl-Foreground"); List<OpResult> responseData = RetryLoop.callWithRetry ( client.getZookeeperClient(), new Callable<List<OpResult>>() { @Override public List<OpResult> call() throws Exception { return client.getZooKeeper().multi(record); } } ); trace.commit(); return CuratorTransactionImpl.wrapResults(client, responseData, record); } }
@Override public TransactionCheckBuilder<CuratorOp> check() { ExtractingCuratorOp op = new ExtractingCuratorOp(); return CuratorTransactionImpl.<CuratorOp>makeTransactionCheckBuilder(client, op, op.getRecord()); }
@Override public CuratorTransaction inTransaction() throws Exception { openConnectionIfNeeded(); return new CuratorTransactionImpl(client); }
@Override public CuratorTransaction inTransaction() { Preconditions.checkState(getState() == CuratorFrameworkState.STARTED, "instance must be started before calling this method"); return new CuratorTransactionImpl(this); }
@Override public CuratorTransaction inTransaction() { Preconditions.checkState(getState() == CuratorFrameworkState.STARTED, "instance must be started before calling this method"); return new CuratorTransactionImpl(this); }