tkalkirill commented on code in PR #1938:
URL: https://github.com/apache/ignite-3/pull/1938#discussion_r1169542976
##########
modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/ReadOnlyTransactionImpl.java:
##########
@@ -17,85 +17,84 @@
package org.apache.ignite.internal.tx.impl;
+import static java.util.concurrent.CompletableFuture.completedFuture;
+
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.ignite.internal.hlc.HybridTimestamp;
import org.apache.ignite.internal.replicator.ReplicationGroupId;
-import org.apache.ignite.internal.tx.TxManager;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.network.ClusterNode;
-import org.jetbrains.annotations.NotNull;
/**
* The read-only implementation of an internal transaction.
*/
-public class ReadOnlyTransactionImpl extends IgniteAbstractTransactionImpl {
+class ReadOnlyTransactionImpl extends IgniteAbstractTransactionImpl {
/** The read timestamp. */
private final HybridTimestamp readTimestamp;
+ /** Prevents double finish of the transaction. */
+ private final AtomicBoolean finishGuard = new AtomicBoolean();
+
/**
* The constructor.
*
* @param txManager The tx manager.
* @param id The id.
* @param readTimestamp The read timestamp.
*/
- public ReadOnlyTransactionImpl(
- TxManager txManager,
- @NotNull UUID id,
- HybridTimestamp readTimestamp
- ) {
+ ReadOnlyTransactionImpl(TxManagerImpl txManager, UUID id, HybridTimestamp
readTimestamp) {
super(txManager, id);
+
this.readTimestamp = readTimestamp;
}
- /** {@inheritDoc} */
@Override
public boolean isReadOnly() {
return true;
}
- /** {@inheritDoc} */
@Override
public HybridTimestamp readTimestamp() {
return readTimestamp;
}
- /** {@inheritDoc} */
@Override
public IgniteBiTuple<ClusterNode, Long> enlist(ReplicationGroupId
replicationGroupId, IgniteBiTuple<ClusterNode, Long> nodeAndTerm) {
// TODO: IGNITE-17666 Close cursor tx finish and do it on the first
finish invocation only.
return null;
}
- /** {@inheritDoc} */
@Override
public IgniteBiTuple<ClusterNode, Long>
enlistedNodeAndTerm(ReplicationGroupId replicationGroupId) {
return null;
}
- /** {@inheritDoc} */
@Override
public boolean assignCommitPartition(ReplicationGroupId
replicationGroupId) {
return true;
}
- /** {@inheritDoc} */
@Override
public ReplicationGroupId commitPartition() {
return null;
}
- /** {@inheritDoc} */
@Override
public void enlistResultFuture(CompletableFuture<?> resultFuture) {
// No-op.
}
- /** {@inheritDoc} */
@Override
+ // TODO: IGNITE-17666 Close cursor tx finish and do it on the first finish
invocation only.
protected CompletableFuture<Void> finish(boolean commit) {
- // TODO: IGNITE-17666 Close cursor tx finish and do it on the first
finish invocation only.
- return CompletableFuture.completedFuture(null);
+ if (!finishGuard.compareAndSet(false, true)) {
+ return completedFuture(null);
+ }
+
+ ((TxManagerImpl)
txManager).completeReadOnlyTransactionFuture(readTimestamp);
+
+ return completedFuture(null);
Review Comment:
It doesn't matter to me, let the future return.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]