[JBoss JIRA] (ISPN-5274) Inconsistent data after transaction rollback (with success on originator)
by Matej Čimbora (JIRA)
Matej Čimbora created ISPN-5274:
-----------------------------------
Summary: Inconsistent data after transaction rollback (with success on originator)
Key: ISPN-5274
URL: https://issues.jboss.org/browse/ISPN-5274
Project: Infinispan
Issue Type: Bug
Components: Core
Reporter: Matej Čimbora
Assignee: Dan Berindei
Scenario
Nodes edg-perf[10-13], partition handling on
1.Transaction is started on edg-perf10
{code}
10:24:48,228 TRACE [org.infinispan.transaction.xa.TransactionXaAdapter] (DefaultStressor-6) start called on tx GlobalTransaction:<edg-perf10-20667>:38910:local
{code}
2. Value of key_000000000000065B is updated within the transaction
{code}
10:24:48,405 TRACE [org.radargun.service.InfinispanOperations$Cache] (DefaultStressor-6) PUT cache=testCache key=key_000000000000065B value=[6 #15: 296, 501, 1109, 1119, 1459, 1544, 1999, 2083, 2130, 2257, 2298, 2784, 2941, 3009, 3147, ]
{code}
3. Transaction is successfully prepared on edg-perf11 & edg-perf12
{code}
10:24:48,559 TRACE [org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher] (DefaultStressor-6) Responses: [sender=edg-perf11-61837, received=true, suspected=false]
[sender=edg-perf12-7305, received=true, suspected=false]
{code}
4. Transaction commit is issued
{code}
10:24:48,562 TRACE [org.infinispan.transaction.TransactionCoordinator] (DefaultStressor-6) Committing transaction GlobalTransaction:<edg-perf10-20667>:38910:local
{code}
5. Other participating nodes (edg-perf11 & edg-perf12) are suspected...
{code}
10:24:52,705 TRACE [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (DefaultStressor-6) Target node edg-perf11-61837 left during remote call, ignoring
10:24:52,716 TRACE [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (DefaultStressor-6) Target node edg-perf12-7305 left during remote call, ignoring
{code}
... as they received a new view (without edg-perf10) meanwhile.
{code}
10:24:48,547 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-1,edg-perf12-7305) ISPN000093: Received new, MERGED cluster view: MergeView::[edg-perf12-7305|20] (3) [edg-perf12-7305, edg-perf11-61837, edg-perf13-25187], 2 subgroups: [edg-perf13-25187|8] (1) [edg-perf13-25187], [edg-perf13-25187|19] (1) [edg-perf13-25187]
{code}
Still, the transaction is commited on edg-perf10 & updated entry is stored locally
{code}
10:24:52,894 TRACE [org.infinispan.statetransfer.CommitManager] (DefaultStressor-6) Trying to commit. Key=key_000000000000065B. Operation Flag=null, L1 invalidation=false
10:24:52,896 TRACE [org.infinispan.statetransfer.CommitManager] (DefaultStressor-6) Committing key=key_000000000000065B. It is a L1 invalidation or a normal put and no tracking is enabled!
10:24:52,908 TRACE [org.infinispan.container.DefaultDataContainer] (DefaultStressor-6) Creating new ICE for writing. Existing=ImmortalCacheEntry{key=key_000000000000065B, value=[6 #14: 296, 501, 1109, 1119, 1459, 1544, 1999, 2083, 2130, 2257, 2298, 2784, 2941, 3009, ]}, metadata=EmbeddedMetadata{version=null}, new value=[6 #15: 296, 501, 1109, 1119, 1459, 1544, 1999, 2083, 2130, 2257, 2298, 2784, 2941, 3009, 3147, ]
{code}
6. Other nodes rollback the transaction
{code}
10:24:50,376 DEBUG [org.infinispan.transaction.TransactionTable] (transport-thread-10) Rolling back transaction GlobalTransaction:<edg-perf10-20667>:38910:remote because originator edg-perf10-20667 left the cluster
{code}
7. edg-perf10 receives a new view, containing nodes edg-perf[10,11,13]. Incoming state transfer overwrites the updated value
{code}
10:25:09,614 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-2,edg-perf10-20667) ISPN000093: Received new, MERGED cluster view: MergeView::[edg-perf10-20667|22] (3) [edg-perf10-20667, edg-perf11-61837, edg-perf13-25187], 4 subgroups: [edg-perf10-20667|15] (2) [edg-perf10-20667, edg-perf11-61837], [edg-perf10-20667|19] (3) [edg-perf10-20667, edg-perf12-7305, edg-perf11-61837], [edg-perf10-20667|18] (1) [edg-perf10-20667], [edg-perf10-20667|21] (2) [edg-perf10-20667, edg-perf13-25187]
{code}
8. get operation returns outdated value
{code}
10:26:21,020 TRACE [org.infinispan.remoting.rpc.RpcManagerImpl] (DefaultStressor-6) Response(s) to ClusteredGetCommand{key=key_000000000000065B, flags=null} is {edg-perf12-7305=SuccessfulResponse{responseValue=ImmortalCacheValue {value=[6 #14: 296, 501, 1109, 1119, 1459, 1544, 1999, 2083, 2130, 2257, 2298, 2784, 2941, 3009, ]}} }
{code}
>From client perspective, this behavior is not transparent. Provided the transaction ended up successfully, presence of the updated entry can be assumed.
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month
[JBoss JIRA] (ISPN-5273) Add more test scenarios for HR event listeners
by Vojtech Juranek (JIRA)
Vojtech Juranek created ISPN-5273:
-------------------------------------
Summary: Add more test scenarios for HR event listeners
Key: ISPN-5273
URL: https://issues.jboss.org/browse/ISPN-5273
Project: Infinispan
Issue Type: Task
Components: Test Suite - Core
Reporter: Vojtech Juranek
Assignee: Vojtech Juranek
Add following test scenarios:
* custom events can contain more information than key, value and metadata
* client can recognize the order of changes on given key
* client receive failover event upon failover (already covered in tests) and then starts receiving evens from another server
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month
[JBoss JIRA] (ISPN-4973) DataRehashed an CacheEntryInvalidated events are not fired on cache
by Jakub Markos (JIRA)
[ https://issues.jboss.org/browse/ISPN-4973?page=com.atlassian.jira.plugin.... ]
Jakub Markos closed ISPN-4973.
------------------------------
Resolution: Cannot Reproduce Bug
This was a test issue.
> DataRehashed an CacheEntryInvalidated events are not fired on cache
> -------------------------------------------------------------------
>
> Key: ISPN-4973
> URL: https://issues.jboss.org/browse/ISPN-4973
> Project: Infinispan
> Issue Type: Bug
> Components: Core
> Affects Versions: 7.0.0.CR1, 7.0.0.CR2, 7.0.0.Final
> Reporter: Vitalii Chepeliuk
> Assignee: William Burns
>
> Two async listeners created {InvalidationListener, DistributionListener} and check if async events are fired on cache
> * InvalidationListener
> {code}
> /**
> * Custom listener for handling notification events.
> */
> @Listener(sync=false)
> public class InvalidationListener {
> public AtomicInteger keyId = new AtomicInteger();
> public String nodeName;
> public Thread threadRunningNotif;
> public volatile boolean isInvalidated = false;
> public InvalidationListener(final String nodeName) {
> this.nodeName = nodeName;
> }
> /**
> * Handles the entry created event.
> * @param event
> */
> @CacheEntryCreated
> public void handleCreationAndModification(Event event) {
> if(event.isPre()) {
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> /**
> * Handles the entry invalidated event.
> * @param event
> */
> @CacheEntryInvalidated
> public void handleInvalidation(CacheEntryInvalidatedEvent event) {
> if (event.isPre()) {
> System.out.println("Data is invalidated.");
> isInvalidated = true;
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> {code}
> * DistributionListener
> {code}
> /**
> * Custom listener for verifying all notificaitions.
> */
> @Listener(sync=false)
> public class DistributionListener {
> public AtomicInteger keyId = new AtomicInteger();
> public String nodeName;
> public Thread topologyThreadRunningNotif = null;
> public Thread threadRunningNotif;
> public volatile boolean isRehashed= false;
> public volatile boolean isTopologyChanged = false;
> public DistributionListener(final String nodeName) {
> this.nodeName = nodeName;
> }
> /**
> * Handling data creation event.
> * @param event
> */
> @CacheEntryCreated
> public void handleCreationAndModification(Event event) {
> if(event.isPre()) {
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> /**
> * Handles data rehashed event.
> * @param evn
> */
> @DataRehashed
> public void handleDataRehash(Event evn) {
> if(evn.isPre()) {
> System.out.println("Data Rehashed on " + nodeName);
> isRehashed = true;
> threadRunningNotif = Thread.currentThread();
> }
> }
> /**
> * Handles cluster topology changed event.
> * @param event
> */
> @TopologyChanged
> public void handleTopologyChange(TopologyChangedEvent event) {
> if(!event.isPre()) {
> System.out.println("Topology changed." + nodeName);
> isTopologyChanged = true;
> topologyThreadRunningNotif = Thread.currentThread();
> }
> }
> }
> {code}
> no CacheEntryInvalidated event is fired
> {code}
> /**
> * Checks that the cache on node1 is invalidated and the CacheInvalidated event is fired and the notification went
> * asynchronously.
> *
> * @throws Exception
> */
> @Test
> @OperateOnDeployment("node1")
> @InSequence(3)
> public void testNode1Invalidation() throws Exception {
> eventually("The elements should be invalidated.", new Condition() {
> @Override
> public boolean isSatisfied() throws Exception {
> return listenerNode1.isInvalidated;
> }
> }, 15000, 15);
> assertTrue("The invalidation should be done asynchronously", listenerNode1.threadRunningNotif != Thread.currentThread());
> assertTrue("The number of called invalidation method should be <= 50, but is " + listenerNode1.keyId.get(), listenerNode1.keyId.get() <= 50);
> }
> {code}
> No DataRehashed event is fired
> {code}
> /**
> * Verifying that the data has been rehashed on node1, the event DataRehashed was fired and the notification was
> * asynchronous.
> * @throws Exception
> */
> @Test
> @OperateOnDeployment("node1")
> @InSequence(3)
> public void testDataRehashEventNode1Verifying() throws Exception {
> eventually("The rehash should happen.", new Condition() {
> @Override
> public boolean isSatisfied() throws Exception {
> return listenerNode1.isRehashed;
> }
> }, 15000, 15);
> assertTrue("The rehash listener thread should be different rather than the current.", Thread.currentThread() != listenerNode1.threadRunningNotif);
> assertTrue("The topology should be changed so far on node1.", listenerNode1.isTopologyChanged);
> assertTrue("The topology should be changed with different thread rather than this one on node1.", listenerNode1.topologyThreadRunningNotif != Thread.currentThread());
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month
[JBoss JIRA] (ISPN-4973) DataRehashed an CacheEntryInvalidated events are not fired on cache
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-4973?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration commented on ISPN-4973:
-----------------------------------------------
Jakub Markos <jmarkos(a)redhat.com> changed the Status of [bug 1163340|https://bugzilla.redhat.com/show_bug.cgi?id=1163340] from NEW to CLOSED
> DataRehashed an CacheEntryInvalidated events are not fired on cache
> -------------------------------------------------------------------
>
> Key: ISPN-4973
> URL: https://issues.jboss.org/browse/ISPN-4973
> Project: Infinispan
> Issue Type: Bug
> Components: Core
> Affects Versions: 7.0.0.CR1, 7.0.0.CR2, 7.0.0.Final
> Reporter: Vitalii Chepeliuk
> Assignee: William Burns
>
> Two async listeners created {InvalidationListener, DistributionListener} and check if async events are fired on cache
> * InvalidationListener
> {code}
> /**
> * Custom listener for handling notification events.
> */
> @Listener(sync=false)
> public class InvalidationListener {
> public AtomicInteger keyId = new AtomicInteger();
> public String nodeName;
> public Thread threadRunningNotif;
> public volatile boolean isInvalidated = false;
> public InvalidationListener(final String nodeName) {
> this.nodeName = nodeName;
> }
> /**
> * Handles the entry created event.
> * @param event
> */
> @CacheEntryCreated
> public void handleCreationAndModification(Event event) {
> if(event.isPre()) {
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> /**
> * Handles the entry invalidated event.
> * @param event
> */
> @CacheEntryInvalidated
> public void handleInvalidation(CacheEntryInvalidatedEvent event) {
> if (event.isPre()) {
> System.out.println("Data is invalidated.");
> isInvalidated = true;
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> {code}
> * DistributionListener
> {code}
> /**
> * Custom listener for verifying all notificaitions.
> */
> @Listener(sync=false)
> public class DistributionListener {
> public AtomicInteger keyId = new AtomicInteger();
> public String nodeName;
> public Thread topologyThreadRunningNotif = null;
> public Thread threadRunningNotif;
> public volatile boolean isRehashed= false;
> public volatile boolean isTopologyChanged = false;
> public DistributionListener(final String nodeName) {
> this.nodeName = nodeName;
> }
> /**
> * Handling data creation event.
> * @param event
> */
> @CacheEntryCreated
> public void handleCreationAndModification(Event event) {
> if(event.isPre()) {
> threadRunningNotif = Thread.currentThread();
> keyId.getAndIncrement();
> }
> }
> /**
> * Handles data rehashed event.
> * @param evn
> */
> @DataRehashed
> public void handleDataRehash(Event evn) {
> if(evn.isPre()) {
> System.out.println("Data Rehashed on " + nodeName);
> isRehashed = true;
> threadRunningNotif = Thread.currentThread();
> }
> }
> /**
> * Handles cluster topology changed event.
> * @param event
> */
> @TopologyChanged
> public void handleTopologyChange(TopologyChangedEvent event) {
> if(!event.isPre()) {
> System.out.println("Topology changed." + nodeName);
> isTopologyChanged = true;
> topologyThreadRunningNotif = Thread.currentThread();
> }
> }
> }
> {code}
> no CacheEntryInvalidated event is fired
> {code}
> /**
> * Checks that the cache on node1 is invalidated and the CacheInvalidated event is fired and the notification went
> * asynchronously.
> *
> * @throws Exception
> */
> @Test
> @OperateOnDeployment("node1")
> @InSequence(3)
> public void testNode1Invalidation() throws Exception {
> eventually("The elements should be invalidated.", new Condition() {
> @Override
> public boolean isSatisfied() throws Exception {
> return listenerNode1.isInvalidated;
> }
> }, 15000, 15);
> assertTrue("The invalidation should be done asynchronously", listenerNode1.threadRunningNotif != Thread.currentThread());
> assertTrue("The number of called invalidation method should be <= 50, but is " + listenerNode1.keyId.get(), listenerNode1.keyId.get() <= 50);
> }
> {code}
> No DataRehashed event is fired
> {code}
> /**
> * Verifying that the data has been rehashed on node1, the event DataRehashed was fired and the notification was
> * asynchronous.
> * @throws Exception
> */
> @Test
> @OperateOnDeployment("node1")
> @InSequence(3)
> public void testDataRehashEventNode1Verifying() throws Exception {
> eventually("The rehash should happen.", new Condition() {
> @Override
> public boolean isSatisfied() throws Exception {
> return listenerNode1.isRehashed;
> }
> }, 15000, 15);
> assertTrue("The rehash listener thread should be different rather than the current.", Thread.currentThread() != listenerNode1.threadRunningNotif);
> assertTrue("The topology should be changed so far on node1.", listenerNode1.isTopologyChanged);
> assertTrue("The topology should be changed with different thread rather than this one on node1.", listenerNode1.topologyThreadRunningNotif != Thread.currentThread());
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month
[JBoss JIRA] (ISPN-5087) CacheContainerStatsMBeanTest.testClusterStats() is failing
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-5087?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration commented on ISPN-5087:
-----------------------------------------------
Martin Gencur <mgencur(a)redhat.com> changed the Status of [bug 1194355|https://bugzilla.redhat.com/show_bug.cgi?id=1194355] from ON_QA to VERIFIED
> CacheContainerStatsMBeanTest.testClusterStats() is failing
> ----------------------------------------------------------
>
> Key: ISPN-5087
> URL: https://issues.jboss.org/browse/ISPN-5087
> Project: Infinispan
> Issue Type: Feature Request
> Components: Test Suite - Core
> Affects Versions: 7.1.0.Alpha1
> Reporter: Pedro Ruivo
> Assignee: Vladimir Blagojevic
> Priority: Blocker
> Fix For: 7.1.0.Beta1, 7.1.0.Final
>
>
> The test is always failing:
> {code}
> testClusterStats(org.infinispan.jmx.CacheContainerStatsMBeanTest) Time elapsed: 0.017 sec <<< FAILURE!
> java.lang.AssertionError: expecting 0 for AverageWriteTime, to be greater than0
> at org.infinispan.jmx.CacheContainerStatsMBeanTest.assertAttributeValueGreaterThan(CacheContainerStatsMBeanTest.java:100)
> at org.infinispan.jmx.CacheContainerStatsMBeanTest.testClusterStats(CacheContainerStatsMBeanTest.java:86)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month
[JBoss JIRA] (ISPN-5180) Hot Rod type converter in Compatibility should not marshall a byte[] again
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-5180?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration commented on ISPN-5180:
-----------------------------------------------
Martin Gencur <mgencur(a)redhat.com> changed the Status of [bug 1196277|https://bugzilla.redhat.com/show_bug.cgi?id=1196277] from ON_QA to VERIFIED
> Hot Rod type converter in Compatibility should not marshall a byte[] again
> --------------------------------------------------------------------------
>
> Key: ISPN-5180
> URL: https://issues.jboss.org/browse/ISPN-5180
> Project: Infinispan
> Issue Type: Bug
> Components: Remote Protocols
> Affects Versions: 7.0.3.Final, 7.1.0.CR2
> Reporter: Galder Zamarreño
> Assignee: Galder Zamarreño
> Priority: Critical
> Labels: compatibility
> Fix For: 7.1.0.Final
>
>
> When compatibility is enabled, storing a java serialized object with REST, and then retrieving it with Hot Rod results in byte[] being returned instead of the deserilialized object:
> {code}java.lang.AssertionError:
> Expected :org.infinispan.it.compatibility.EmbeddedRestHotRodTest$Person@22cd6f
> Actual :[B@2ff9eb2a
> at org.testng.AssertJUnit.fail(AssertJUnit.java:59)
> at org.testng.AssertJUnit.failNotEquals(AssertJUnit.java:364)
> at org.testng.AssertJUnit.assertEquals(AssertJUnit.java:80)
> at org.testng.AssertJUnit.assertEquals(AssertJUnit.java:88)
> at org.infinispan.it.compatibility.EmbeddedRestHotRodTest.testCustomObjectRestPutHotRodEmbeddedGet(EmbeddedRestHotRodTest.java:217)
> {code}
> This is because when the entry is retrieved by Hot Rod and it's going to marshall it for sending it back to the client, it should check if the entry is already a byte[], in which case it should not touch it.
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
11 years, 1 month