You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Denis Magda <dm...@apache.org> on 2019/11/01 17:23:58 UTC

Re: TransactionOptimisticException: Failed to prepare transaction, read/write conflict

This is not supposed to happen if a record is not updated in parallel.
Could you prepare a reproducer?

In general, an optimistic transaction fails if any of the records within a
transaction gets modified concurrently.

-
Denis


On Thu, Oct 31, 2019 at 8:46 AM Prasad Bhalerao <
prasadbhalerao1983@gmail.com> wrote:

> Can someone from community advise?
>
> On Wed, Oct 30, 2019 at 7:28 PM Prasad Bhalerao <
> prasadbhalerao1983@gmail.com> wrote:
>
>> Hi,
>> Ignite version: 2.6.0
>>
>> I am getting following exception while committing a transaction inside
>> IgniteRunnable task.
>> Transaction is
>>
>> try (Transaction tx = transactions.txStart(TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE)) {
>>
>> ....
>>
>> ..
>>
>> }
>>
>>
>> As per the ignite doc
>> <https://apacheignite.readme.io/docs/concurrency-modes-and-isolation-levels#section-optimistic-transactions> if
>> the transaction isolation level is serializable,
>> Ignite will fail a transaction at the commit stage if the Ignite engine
>> detects that at least one of the entries used as part of the initiated
>> transaction has been modified.
>>
>> But inside transaction I am just reading SubscriptionData from
>> Sunsbscription cache, I am not modifying this data inside transaction. Also
>> this SubscriptionData is not being modified in some other request
>> outside the mentioned transaction.
>>
>> Then what could be the reason for this transaction failure?
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *Caused by:
>> org.apache.ignite.transactions.TransactionOptimisticException: Failed to
>> prepare transaction, read/write conflict
>> [key=com.xyz.grid.data.key.DefaultDataKey@fe220,
>> keyCls=com.xyz.grid.data.key.DefaultDataKey,
>> val=SubscriptionData{subscriptionId=1040928, companyName='test-cmp',
>> expirationDate=1592092799000, activatedModules={100=1592006400000,
>> 101=1592006400000, 102=1592006400000, 107=1592006400000, 112=1592006400000,
>> 145=1592006400000, 114=1592006400000, 117=1592006400000,
>> 1206=1592006400000, 119=1592006400000, 1207=1592006400000,
>> 121=1592006400000, 1210=1592006400000, 9211=1592006400000}, enforced=false,
>> ipv6Enabled=false}, valCls=com.xyz.grid.data.SubscriptionData,
>> cache=SUBSCRIPTION_CACHE, thread=IgniteThread [compositeRwLockIdx=22,
>> stripe=10, plc=-1, name=sys-stripe-10-#11%springDataNode%]]        at
>> org.apache.ignite.internal.util.IgniteUtils$14.apply(IgniteUtils.java:905)
>> at
>> org.apache.ignite.internal.util.IgniteUtils$14.apply(IgniteUtils.java:903)
>> at
>> org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:985)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl.commit(TransactionProxyImpl.java:305)
>> at
>> com.xyz.task.ignite.AbstractModuleIpAdderIgniteTask.addIps(AbstractModuleIpAdderIgniteTask.java:148)
>> at
>> com.xyz.task.ignite.AbstractModuleIpAdderIgniteTask.run(AbstractModuleIpAdderIgniteTask.java:93)
>> at
>> org.apache.ignite.internal.processors.closure.GridClosureProcessor$C4.execute(GridClosureProcessor.java:1944)
>> at
>> org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:568)
>> at
>> org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6695)
>> at
>> org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:562)
>> at
>> org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:491)
>> at
>> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>> ... 3 common frames omittedCaused by:
>> org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException:
>> Failed to prepare transaction, read/write conflict
>> [key=com.xyz.grid.data.key.DefaultDataKey@fe220,
>> keyCls=com.xyz.grid.data.key.DefaultDataKey,
>> val=SubscriptionData{subscriptionId=1040928, companyName='test-cmp',
>> expirationDate=1592092799000, activatedModules={100=1592006400000,
>> 101=1592006400000, 102=1592006400000, 107=1592006400000, 112=1592006400000,
>> 145=1592006400000, 114=1592006400000, 117=1592006400000,
>> 1206=1592006400000, 119=1592006400000, 1207=1592006400000,
>> 121=1592006400000, 1210=1592006400000, 9211=1592006400000}, enforced=false,
>> ipv6Enabled=false}, valCls=com.xyz.grid.data.SubscriptionData,
>> cache=SUBSCRIPTION_CACHE, thread=IgniteThread [compositeRwLockIdx=22,
>> stripe=10, plc=-1, name=sys-stripe-10-#11%springDataNode%]]        at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.versionCheckError(GridDhtTxPrepareFuture.java:1190)
>> at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.checkReadConflict(GridDhtTxPrepareFuture.java:1138)
>> at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare0(GridDhtTxPrepareFuture.java:1205)
>> at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.mapIfLocked(GridDhtTxPrepareFuture.java:671)
>> at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare(GridDhtTxPrepareFuture.java:1048)
>> at
>> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal.prepareAsync(GridDhtTxLocal.java:397)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:516)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest0(IgniteTxHandler.java:157)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest(IgniteTxHandler.java:135)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.access$000(IgniteTxHandler.java:97)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:177)
>> at
>> org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:175)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1054)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:579)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99)
>> at
>> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293)
>> at
>> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556)
>> at
>> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1184)
>> at
>> org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:125)
>> at
>> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1091)
>> at
>> org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:511)
>> ... 1 common frames omitted*
>>
>> Thanks,
>> Prasad
>>
>