Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GridCacheStore operations are not eligible to join JTA transaction with write-behind disabled #69

Open
markathomas opened this issue Jun 21, 2014 · 9 comments
Labels

Comments

@markathomas
Copy link

From testing I have found that by the time the methods in my GridCacheStore implementation are invoked by GridGain the JTA TX is already in the COMMITTING state thus changes made through my cache store (JPA operations w/ Hibernate) fail to actually commit to the database. For reference I am using GridGain 6.1.6 with Spring 4.0.5 and Hibernate 4.3.5 (JPA 2.1). TX Manager is Narayana (JBoss) 5.0.2 using JTA 1.2. I have a debug log I'd be happy to share but github won't allow me to upload a text file. Here's the relevant part:

[testng:testng] 2014-06-21 10:54:39,525 [main] [DEBUG] [org.gridgain.grid.logger.log4j.GridLog4jLogger.debug(GridLog4jLogger.java:465)] Changed transaction state [prev=PREPARED, new=COMMITTING, tx=GridNearTxLocal [prepFut=GridNearTxPrepareFuture [futId=b29722fb641-a85171e5-b74f-4a73-b07b-b1ac7b686542, trackable=true, txMapping=null, super=GridCompoundIdentityFuture [super=GridCompoundFuture [lsnrCalls=0, finished=false, rdc=org.gridgain.grid.kernal.processors.cache.distributed.near.GridNearTxPrepareFuture$1@4ea11eff, init=false, res=java.util.concurrent.atomic.AtomicMarkableReference@33fa1fad, err=null, done=true, cancelled=false, err=null, futs=[]]]], commitFut=GridNearTxFinishFuture [futId=c29722fb641-a85171e5-b74f-4a73-b07b-b1ac7b686542, commit=true, err=null, trackable=true, super=GridCompoundIdentityFuture [super=GridCompoundFuture [lsnrCalls=0, finished=false, rdc=org.gridgain.grid.util.lang.GridFunc$58@6a35b183, init=false, res=java.util.concurrent.atomic.AtomicMarkableReference@6b1945ee, err=null, done=false, cancelled=false, err=null, futs=[]]]], rollbackFut=null, topSnapshot=GridDiscoveryTopologySnapshot [topVer=1, topNodes=[GridTcpDiscoveryNode [id=12760c5c-5536-41a3-bbde-a71158355bb7, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47500], discPort=47500, order=1, loc=true, ver=GridProductVersion [major=6, minor=1, maintenance=6, revTs=1401960823]]]], syncCommit=true, syncRollback=true, mappings=[12760c5c-5536-41a3-bbde-a71158355bb7], super=GridCacheTxLocalAdapter [completedBase=null, partLock=false, sndTransformedVals=false, super=GridCacheTxAdapter [xidVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], writeVer=null, implicit=false, implicitSingle=false, loc=true, threadId=1, startTime=1403366079404, nodeId=12760c5c-5536-41a3-bbde-a71158355bb7, startVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], endVer=null, isolation=REPEATABLE_READ, concurrency=PESSIMISTIC, timeout=30000, sysInvalidate=false, commitVer=null, finalizing=NONE, preparing=false, state=COMMITTING, timedOut=false, topVer=1, duration=121ms, grpLock=false, onePhaseCommit=false], size=1]]]
[testng:testng] 2014-06-21 10:54:39,525 [main] [DEBUG] [org.gridgain.grid.logger.log4j.GridLog4jLogger.debug(GridLog4jLogger.java:465)] <realtime> Added transaction to committed version set: GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302]
[testng:testng] 2014-06-21 10:54:39,526 [main] [DEBUG] [org.gridgain.grid.logger.log4j.GridLog4jLogger.debug(GridLog4jLogger.java:465)] <realtime> Storing value in cache store [key=6dbb13c9-5d04-4472-9d98-ed49f4a377c7, val=com.clj2.business.model.realtime.RealtimeCall@6d41eb4d[
[testng:testng]   uuid=6dbb13c9-5d04-4472-9d98-ed49f4a377c7
[testng:testng] ]]
[testng:testng] 2014-06-21 10:54:39,579 [main] [DEBUG] [com.clj2.business.lib.grid.storage.MySQLBasedGridCacheStore.put(MySQLBasedGridCacheStore.java:174)] MySQLBasedGridCacheStore: saving object of type `com.clj2.business.model.realtime.RealtimeCall' with id `6dbb13c9-5d04-4472-9d98-ed49f4a377c7'
[testng:testng] 2014-06-21 10:54:39,579 [main] [DEBUG] [org.springframework.orm.jpa.EntityManagerFactoryUtils.doGetTransactionalEntityManager(EntityManagerFactoryUtils.java:272)] Opening JPA EntityManager
[testng:testng] 2014-06-21 10:54:39,579 [main] [DEBUG] [org.springframework.orm.jpa.EntityManagerFactoryUtils.doGetTransactionalEntityManager(EntityManagerFactoryUtils.java:290)] Registering transaction synchronization for JPA EntityManager
[testng:testng] 2014-06-21 10:54:39,580 [main] [TRACE] [org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(TransactionSynchronizationManager.java:193)] Bound value [org.springframework.orm.jpa.EntityManagerHolder@76cdc9fb] for key [com.clj2.business.dao.impl.HibernateEntityManagerFactoryBean@3a71a6d6] to thread [main]
[testng:testng] 2014-06-21 10:54:39,593 [main] [DEBUG] [org.gridgain.grid.logger.log4j.GridLog4jLogger.debug(GridLog4jLogger.java:465)] <realtime> Stored value in cache store [key=6dbb13c9-5d04-4472-9d98-ed49f4a377c7, val=com.clj2.business.model.realtime.RealtimeCall@6d41eb4d[
[testng:testng]   uuid=6dbb13c9-5d04-4472-9d98-ed49f4a377c7
[testng:testng] ]]
[testng:testng] 2014-06-21 10:54:39,593 [main] [DEBUG] [com.clj2.business.lib.grid.storage.MySQLBasedGridCacheStore.txEnd(MySQLBasedGridCacheStore.java:222)] MySQLBasedGridCacheStore: TX was successful
[testng:testng] 2014-06-21 10:54:39,594 [main] [DEBUG] [org.gridgain.grid.logger.log4j.GridLog4jLogger.debug(GridLog4jLogger.java:465)] Evicting dht-local entry from near cache [entry=GridNearCacheEntry [primaryNodeId=12760c5c-5536-41a3-bbde-a71158355bb7, dhtVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046304], part=5509, super=GridDistributedCacheEntry [super=GridCacheMapEntry [key=6dbb13c9-5d04-4472-9d98-ed49f4a377c7, val=null, startVer=1403366046303, ver=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], hash=1556302946, valPtr=0, extras=GridCacheMvccEntryExtras [mvcc=GridCacheMvcc [locs=[GridCacheMvccCandidate [nodeId=12760c5c-5536-41a3-bbde-a71158355bb7, ver=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], timeout=29990, ts=1403366079414, threadId=1, id=5, topVer=1, reentry=null, otherNodeId=12760c5c-5536-41a3-bbde-a71158355bb7, otherVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046305], mappedNodeIds=null, ownerVer=null, key=6dbb13c9-5d04-4472-9d98-ed49f4a377c7, masks=local=1|owner=1|ready=1|reentry=0|used=0|tx=1|single_implicit=0|dht_local=0|near_local=1|removed=0, prevVer=null, nextVer=null]], rmts=null]], flags=0]]], tx=GridNearTxLocal [prepFut=GridNearTxPrepareFuture [futId=b29722fb641-a85171e5-b74f-4a73-b07b-b1ac7b686542, trackable=true, txMapping=null, super=GridCompoundIdentityFuture [super=GridCompoundFuture [lsnrCalls=0, finished=false, rdc=org.gridgain.grid.kernal.processors.cache.distributed.near.GridNearTxPrepareFuture$1@4ea11eff, init=false, res=java.util.concurrent.atomic.AtomicMarkableReference@33fa1fad, err=null, done=true, cancelled=false, err=null, futs=[]]]], commitFut=GridNearTxFinishFuture [futId=c29722fb641-a85171e5-b74f-4a73-b07b-b1ac7b686542, commit=true, err=null, trackable=true, super=GridCompoundIdentityFuture [super=GridCompoundFuture [lsnrCalls=0, finished=false, rdc=org.gridgain.grid.util.lang.GridFunc$58@6a35b183, init=false, res=java.util.concurrent.atomic.AtomicMarkableReference@6b1945ee, err=null, done=false, cancelled=false, err=null, futs=[]]]], rollbackFut=null, topSnapshot=GridDiscoveryTopologySnapshot [topVer=1, topNodes=[GridTcpDiscoveryNode [id=12760c5c-5536-41a3-bbde-a71158355bb7, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47500], discPort=47500, order=1, loc=true, ver=GridProductVersion [major=6, minor=1, maintenance=6, revTs=1401960823]]]], syncCommit=true, syncRollback=true, mappings=[12760c5c-5536-41a3-bbde-a71158355bb7], super=GridCacheTxLocalAdapter [completedBase=null, partLock=false, sndTransformedVals=false, super=GridCacheTxAdapter [xidVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], writeVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046306], implicit=false, implicitSingle=false, loc=true, threadId=1, startTime=1403366079404, nodeId=12760c5c-5536-41a3-bbde-a71158355bb7, startVer=GridCacheVersion [topVer=14846047, nodeOrderDrId=1, globalTime=0, order=1403366046302], endVer=null, isolation=REPEATABLE_READ, concurrency=PESSIMISTIC, timeout=30000, sysInvalidate=false, commitVer=null, finalizing=NONE, preparing=false, state=COMMITTING, timedOut=false, topVer=1, duration=181ms, grpLock=false, onePhaseCommit=false], size=1]]]
@dsetrakyan
Copy link

Can we move this discussion to StackOverflow? Please provide the code and configuration. You can use http://pastebin.com/ to paste code or logs.

@dsetrakyan
Copy link

I have responded on StackOverflow. Any reason you are not using GridGain Hibernate L2 Cache integration here?

@dsetrakyan dsetrakyan added bug and removed duplicate labels Jun 25, 2014
@markathomas
Copy link
Author

I have responded on SO. Regardless of whether or not I use the GridGain L2 cache implementation it doesn't address the issue I've brought up here with JTA and GridCacheStore.

@dsetrakyan
Copy link

Just one more question. Do you have more than one data source? If yes, can you tell us what they are?

@markathomas
Copy link
Author

Yes, I have a MysqlXADataSource for JTA in REPEATABLE_READ and a BoneCPDataSource for reporting in READ_UNCOMMITTED

@markathomas
Copy link
Author

JPA uses MysqlXADataSource

@dsetrakyan dsetrakyan added bug and removed question labels Jun 30, 2014
@dsetrakyan
Copy link

We have reproduced the issue and are fixing it. I will update this issue with GridGain version that will contain the fix.

@markathomas
Copy link
Author

Awesome. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants