public class RollbackProhibitedException extends RestartRequiredException
ReplicationConfig.TXN_ROLLBACK_LIMIT
.
It is rare for committed transactions to be rolled back during a
sync-up. One way this can happen is if a replication group has been
executing with a Durability
policy that specifies a
ReplicaAckPolicy
of
NONE.
When ReplicaAckPolicy.NONE is specified, transactions can commit on the master without receiving any acknowledgments from replica nodes. Using that policy, it is possible that if the master node crashes at a given time, and the group fails over and continues on with a new master, the old master's environment will have transactions on disk that were never replicated and received by other nodes. When this old master comes back up and rejoins the group as a replica, it will have committed transactions that need to be rolled back.
If the number of committed transactions to be rolled back is less than or
equal to the limit specified by ReplicationConfig.TXN_ROLLBACK_LIMIT
, JE will automatically truncate the
environment log to remove the unreplicated transactions, and will throw a
RollbackException
. The application only needs to reinstantiate the
ReplicatedEnvironment and proceed on. If the limit specified by ReplicationConfig.TXN_ROLLBACK_LIMIT
is exceeded, the application will
receive a RollbackProhibitedException to indicate that manual intervention
is required.
The RollbackProhibitedException lets the user interject application specific
processing before the log is truncated. The exception message and getter
methods indicate the number of transactions that must be rolled back, and
the time and id of the earliest targeted transaction, and the user can use
this information to make any desired application adjustments. The
application may then manually truncate the log using DbTruncateLog
.
Note that any CommitTokens obtained before restarting this
Replica
shouldn't be used after
RollbackProhibitedException
is thrown because the token may no
longer exist on the current Master
node.
Modifier and Type | Method and Description |
---|---|
java.lang.Long |
getEarliestTransactionCommitTime()
Return the time in milliseconds of the earliest transaction commit that
will be rolled back if the log is truncated to the location specified by
getTruncationFileNumber() and getTruncationFileOffset() |
long |
getEarliestTransactionId()
Return the id of the earliest transaction commit that will be
rolled back if the log is truncated to the location specified by
getTruncationFileNumber() and getTruncationFileOffset() |
long |
getTruncationFileNumber() |
long |
getTruncationFileOffset()
The JE log must be truncated to this offset in the specified
file in order for this node to rejoin the group.
|
getMessage, isCorrupted
public long getTruncationFileNumber()
public long getTruncationFileOffset()
public java.lang.Long getEarliestTransactionCommitTime()
getTruncationFileNumber()
and getTruncationFileOffset()
public long getEarliestTransactionId()
getTruncationFileNumber()
and getTruncationFileOffset()
Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.