public ICollection <CuratorTransactionResult> commit() { CheckAlreadyCommited(); isCommitted = true; AtomicBoolean firstTime = new AtomicBoolean(true); List <OpResult> resultList = RetryLoop.callWithRetry ( client.getZookeeperClient(), CallableUtils.FromFunc(() => doOperation(firstTime))); if (resultList.Count != transaction.metadataSize()) { throw new InvalidOperationException(String.Format("Result size ({0}) doesn't match input size ({1})", resultList.Count, transaction.metadataSize())); } var builder = new ReadOnlyCollectionBuilder <CuratorTransactionResult>(); for (int i = 0; i < resultList.Count; ++i) { OpResult opResult = resultList[i]; CuratorMultiTransactionRecord.TypeAndPath metadata = transaction.getMetadata(i); CuratorTransactionResult curatorResult = makeCuratorResult(opResult, metadata); builder.Add(curatorResult); } return(builder.ToReadOnlyCollection()); }
private CuratorTransactionResult makeCuratorResult(OpResult opResult, CuratorMultiTransactionRecord.TypeAndPath metadata) { String resultPath = null; Stat resultStat = null; if (opResult is OpResult.CreateResult) { OpResult.CreateResult createResult = (OpResult.CreateResult)opResult; resultPath = client.unfixForNamespace(createResult.getPath()); } else if (opResult is OpResult.SetDataResult) { OpResult.SetDataResult setDataResult = (OpResult.SetDataResult)opResult; resultStat = setDataResult.getStat(); } return(new CuratorTransactionResult(metadata.type, metadata.forPath, resultPath, resultStat)); }