Hi, We'll check this case. Please, share a reproducer if possible.
On Tue, Jun 5, 2018 at 3:53 PM, Prasad Bhalerao < [email protected]> wrote: > Hi, > > In my case only one transaction is in progress. In this transaction I > update few entries in cache and then re-read these entries and updates it > again in some other method. > When I read the entry after first update operations, transaction entry > read version(IgniteTxEntry-entryReadVersion) changes. This version is > validated in GridDhtTxPrepareFuture::checkReadConflict method. > > But I don't understand why transaction fails if the entry is modified > after read operation in same transaction? > > Thanks, > Prasad > > On Tue, Jun 5, 2018 at 6:07 PM, Andrey Mashenkov < > [email protected]> wrote: > >> Hi, >> >> It is ok, Optimistic transaction failed on commit >> with TransactionOptimisticException due to write\read conflict. >> See javadoc [1] and documentation [2] for details. >> >> Javadoc says: >> * However, in {@link TransactionConcurrency#OPTIMISTIC} mode, if some >> transactions cannot be serially isolated >> * from each other, then one winner will be picked and the other >> transactions in conflict will result in >> * {@link TransactionOptimisticException} being thrown. >> >> [1] https://github.com/apache/ignite/blob/master/modules/cor >> e/src/main/java/org/apache/ignite/transactions/Transaction.java >> [2] https://apacheignite.readme.io/docs/transactions#section >> -optimistic-transactions >> >> On Tue, Jun 5, 2018 at 3:19 PM, Prasad Bhalerao < >> [email protected]> wrote: >> >>> Hi, >>> I tried this with simple code and it works fine. >>> But in my application when I do similar thing I get following exception >>> when I do commit. I am getting transaction as follows. >>> >>> IgniteTransactions igniteTx = getServiceContext().getGridSer >>> vice().getTransaction(); >>> try (Transaction transaction = igniteTx >>> .txStart(TransactionConcurrency.OPTIMISTIC, >>> TransactionIsolation.SERIALIZABLE)) { >>> >>> Can you please advise? >>> >>> Caused by: org.apache.ignite.transactions.TransactionOptimisticException: >>> Failed to prepare transaction, read/write conflict >>> [key=DefaultDataAffinityKey{id=1556524, affinityId=1}, >>> keyCls=com.qls.agms.grid.data.key.DefaultDataAffinityKey, val=null, >>> cache=IPV4_ASSET_GROUP_DETAIL_CACHE, thread=IgniteThread >>> [compositeRwLockIdx=7, stripe=-1, plc=0, name=pub-#53%springDataNode%]] >>> at org.apache.ignite.internal.uti >>> l.IgniteUtils$14.apply(IgniteUtils.java:895) >>> at org.apache.ignite.internal.uti >>> l.IgniteUtils$14.apply(IgniteUtils.java:893) >>> at org.apache.ignite.internal.uti >>> l.IgniteUtils.convertException(IgniteUtils.java:975) >>> at org.apache.ignite.internal.pro >>> cessors.cache.transactions.TransactionProxyImpl.commit(Trans >>> actionProxyImpl.java:296) >>> at com.qls.agms.task.ignite.EditA >>> ssetGroupIgniteTask.run(EditAssetGroupIgniteTask.java:44) >>> at org.apache.ignite.internal.pro >>> cessors.closure.GridClosureProcessor$C4.execute(GridClosureP >>> rocessor.java:1944) >>> at org.apache.ignite.internal.processors.job.GridJobWorker$ >>> 2.call(GridJobWorker.java:566) >>> at org.apache.ignite.internal.uti >>> l.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6623) >>> at org.apache.ignite.internal.pro >>> cessors.job.GridJobWorker.execute0(GridJobWorker.java:560) >>> ... 5 common frames omitted >>> Caused by: >>> org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException: >>> Failed to prepare transaction, read/write conflict >>> [key=DefaultDataAffinityKey{id=1556524, affinityId=1}, >>> keyCls=com.qls.agms.grid.data.key.DefaultDataAffinityKey, val=null, >>> cache=IPV4_ASSET_GROUP_DETAIL_CACHE, thread=IgniteThread >>> [compositeRwLockIdx=7, stripe=-1, plc=0, name=pub-#53%springDataNode%]] >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.dht.GridDhtTxPrepareFuture.version >>> CheckError(GridDhtTxPrepareFuture.java:1190) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.dht.GridDhtTxPrepareFuture.checkRe >>> adConflict(GridDhtTxPrepareFuture.java:1138) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare >>> 0(GridDhtTxPrepareFuture.java:1205) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.dht.GridDhtTxPrepareFuture.mapIfLo >>> cked(GridDhtTxPrepareFuture.java:671) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare >>> (GridDhtTxPrepareFuture.java:1048) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearTxLocal.prepareAsyncL >>> ocal(GridNearTxLocal.java:3452) >>> at org.apache.ignite.internal.pro >>> cessors.cache.transactions.IgniteTxHandler.prepareColocatedT >>> x(IgniteTxHandler.java:257) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticSerializabl >>> eTxPrepareFuture.prepareLocal(GridNearOptimisticSerializable >>> TxPrepareFuture.java:580) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticSerializabl >>> eTxPrepareFuture.prepare(GridNearOptimisticSerializableTxPre >>> pareFuture.java:494) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticSerializabl >>> eTxPrepareFuture.prepare(GridNearOptimisticSerializableTxPre >>> pareFuture.java:408) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticSerializabl >>> eTxPrepareFuture.prepare0(GridNearOptimisticSerializableTxPr >>> epareFuture.java:315) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticTxPrepareFu >>> tureAdapter.prepareOnTopology(GridNearOptimisticTxPrepareFut >>> ureAdapter.java:137) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearOptimisticTxPrepareFu >>> tureAdapter.prepare(GridNearOptimisticTxPrepareFutureAdapter.java:74) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearTxLocal.prepareNearTx >>> Local(GridNearTxLocal.java:3161) >>> at org.apache.ignite.internal.pro >>> cessors.cache.distributed.near.GridNearTxLocal.commitNearTxL >>> ocalAsync(GridNearTxLocal.java:3221) >>> at org.apache.ignite.internal.pro >>> cessors.cache.GridCacheAdapter.commitTxAsync(GridCacheAdapter.java:4019) >>> at org.apache.ignite.internal.pro >>> cessors.cache.GridCacheSharedContext.commitTxAsync(GridCache >>> SharedContext.java:975) >>> at org.apache.ignite.internal.pro >>> cessors.cache.transactions.TransactionProxyImpl.commit(Trans >>> actionProxyImpl.java:288) >>> ... 10 common frames omitted >>> >>> Thanks, >>> Prasad >>> >>> On Tue, Jun 5, 2018 at 2:18 PM, Andrey Mashenkov < >>> [email protected]> wrote: >>> >>>> Hi, >>>> >>>> Sure, multiple actions with same query within same transaction should >>>> work. >>>> >>>> Please, let us know if you observe unexpected behavior. >>>> Any reproducer will be appreciated. >>>> >>>> >>>> On Tue, Jun 5, 2018 at 10:36 AM, Prasad Bhalerao < >>>> [email protected]> wrote: >>>> >>>>> Hi, >>>>> >>>>> Can I update the same entry multiple time inside ignite transaction? >>>>> Or >>>>> Can I update an entry and then remove the same entry in ignite >>>>> transaction? >>>>> >>>>> Thanks, >>>>> Prasad >>>>> >>>> >>>> >>>> >>>> -- >>>> Best regards, >>>> Andrey V. Mashenkov >>>> >>> >>> >> >> >> -- >> Best regards, >> Andrey V. Mashenkov >> > > -- Best regards, Andrey V. Mashenkov
