Skip to content

Commit

Permalink
IGNITE-8863 Tx rollback can cause remote tx hang. - Fixes apache#4262.
Browse files Browse the repository at this point in the history
Signed-off-by: Ivan Rakov <irakov@apache.org>

(cherry picked from commit 6440e0c)
  • Loading branch information
ascherbakoff authored and mcherkasov committed Aug 9, 2018
1 parent d31917f commit 53adf82
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 12 deletions.
Expand Up @@ -29,6 +29,7 @@
import org.apache.ignite.internal.util.GridLongList;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
Expand Down Expand Up @@ -473,6 +474,11 @@ public void needReturnValue(boolean retVal) {
return 27;
}

/** {@inheritDoc} */
@Override public int partition() {
return U.safeAbs(version().hashCode());
}

/** {@inheritDoc} */
@Override public String toString() {
return S.toString(GridDhtTxFinishRequest.class, this, super.toString());
Expand Down
Expand Up @@ -368,11 +368,6 @@ public Map<IgniteTxKey, GridCacheVersion> owned() {
}
}

/** {@inheritDoc} */
@Override public String toString() {
return S.toString(GridDhtTxPrepareRequest.class, this, "super", super.toString());
}

/** {@inheritDoc} */
@Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
writer.setBuffer(buf);
Expand Down Expand Up @@ -586,4 +581,14 @@ public Map<IgniteTxKey, GridCacheVersion> owned() {
@Override public byte fieldsCount() {
return 32;
}

/** {@inheritDoc} */
@Override public int partition() {
return U.safeAbs(version().hashCode());
}

/** {@inheritDoc} */
@Override public String toString() {
return S.toString(GridDhtTxPrepareRequest.class, this, "super", super.toString());
}
}
Expand Up @@ -705,9 +705,6 @@ private void finish(int miniId, GridDistributedTxMapping m, boolean commit) {
if (m.explicitLock())
syncMode = FULL_SYNC;

// Version to be added in completed versions on primary node.
GridCacheVersion completedVer = !commit && tx.timeout() > 0 ? tx.xidVersion() : null;

GridNearTxFinishRequest req = new GridNearTxFinishRequest(
futId,
tx.xidVersion(),
Expand All @@ -720,7 +717,7 @@ private void finish(int miniId, GridDistributedTxMapping m, boolean commit) {
m.explicitLock(),
tx.storeEnabled(),
tx.topologyVersion(),
completedVer, // Reuse 'baseVersion' to do not add new fields in message.
null,
null,
null,
tx.size(),
Expand Down
Expand Up @@ -26,6 +26,7 @@
import org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxFinishRequest;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.util.tostring.GridToStringBuilder;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
Expand Down Expand Up @@ -216,6 +217,11 @@ public void miniId(int miniId) {
return 22;
}

/** {@inheritDoc} */
@Override public int partition() {
return U.safeAbs(version().hashCode());
}

/** {@inheritDoc} */
@Override public String toString() {
return GridToStringBuilder.toString(GridNearTxFinishRequest.class, this, "super", super.toString());
Expand Down
Expand Up @@ -30,6 +30,7 @@
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
Expand Down Expand Up @@ -415,6 +416,11 @@ private boolean isFlag(int mask) {
return 26;
}

/** {@inheritDoc} */
@Override public int partition() {
return U.safeAbs(version().hashCode());
}

/** {@inheritDoc} */
@Override public String toString() {
StringBuilder flags = new StringBuilder();
Expand Down
Expand Up @@ -800,9 +800,9 @@ else if (txFinishMsgLog.isDebugEnabled()) {
if (locTx != null)
req.txState(locTx.txState());

// 'baseVersion' message field is re-used for version to be added in completed versions.
if (!req.commit() && req.baseVersion() != null)
ctx.tm().addRolledbackTx(null, req.baseVersion());
// Always add near version to rollback history to prevent races with rollbacks.
if (!req.commit())
ctx.tm().addRolledbackTx(null, req.version());

// Transaction on local cache only.
if (locTx != null && !locTx.nearLocallyMapped() && !locTx.colocatedLocallyMapped())
Expand Down

0 comments on commit 53adf82

Please sign in to comment.