[jgroups-users] Split cluster not merging properly after heavy load

Questions/problems related to using JGroups <[email protected]>
Newsgroups gmane.comp.java.javagroups.general
Organization Shock Media B.V.
Message-ID <[email protected]>
Hello,

I have a strange problem when in some (rare) conditions a split cluster won't merge any more. I have traced it down to MERGE_RSP from the cluster/node that's not the merge leader not getting to the merge leader. The problem is hard to reproduce but I'll do my best to describe the situation.

Set-up: two node cluster (lets call them node1 and node2). I start our application (using TCP with MPING discovery) on node2 later on node1. Both nodes find each other (this never fails) and form one cluster. On node2 I start a heavy stress test (linux: stress --io 64 --hdd 64) and wait until the cluster splits. The split is caused by very long garbage collect cycles, caused by the stress test. When the cluster split I stop the stress test.

Once in a while the clusters aren't able to merge any more. As far as I can tell this is happening when node1 is the merge leader, but i'm not 100% certain of this. I enabled tracelogging and put some extra log statements to track down this bug. On node one I see the following relevant log statements (sending MERGE_REQ is a log statement I added myself in Merger#getMergeDataFromSubgroupCoordinators):

node1=bramws
node2=testnode2

14:45:30.755 680842 [ViewHandler,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.GMS - bramws-60382: I will be the merge leader. Starting the merge task. Views: {bramws-60382=MergeView::[bramws-60382|10] (1) [bramws-60382], 1 subgroups: [bramws-60382|9] (1) [bramws-60382], testnode2-33255=[testnode2-33255|2] (1) [testnode2-33255]}
14:45:30.758 680845 [MergeTask,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.STABLE - suspending message garbage collection
14:45:30.760 680847 [MergeTask,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.STABLE - bramws-60382: resume task started, max_suspend_time=220000
14:45:30.760 680847 [MergeTask,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.GMS - bramws-60382: merge task bramws-60382::9 started with 2 participants
14:45:30.760 680847 [MergeTask,bram,bramws-60382] TRACE org.jgroups.protocols.pbcast.GMS - bramws-60382: sending MERGE_REQ to [bramws-60382, testnode2-33255]

On node2 I see the following relevent stuff:

14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.UNICAST3 - testnode2-33255 <-- DATA(bramws-60382: #1, conn_id=10, first)
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.UNICAST3 - testnode2-33255: conn_id=10 != 9; resetting receiver window
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.UNICAST3 - testnode2-33255: created receiver window for bramws-60382 at seqno=#1 for conn-id=10
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.UNICAST3 - testnode2-33255: delivering bramws-60382#1
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] INFO n.s.c.c.c.NodeAuthenticatorImpl - Successfully authenticated node 1 with address bramws-60382.
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] DEBUG org.jgroups.protocols.pbcast.GMS - Received MERGE_REQ from bramws-60382
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] DEBUG org.jgroups.protocols.pbcast.GMS - Handling merge request
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] DEBUG org.jgroups.protocols.pbcast.STABLE - suspending message garbage collection
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] DEBUG org.jgroups.protocols.pbcast.STABLE - testnode2-33255: resume task started, max_suspend_time=220000
14:45:30.762 703525 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.pbcast.GMS - testnode2-33255: got merge request from bramws-60382, merge_id=bramws-60382::9, mbrs=[testnode2-33255]
14:45:30.763 703526 [Incoming-1,bram,testnode2-33255] DEBUG org.jgroups.protocols.pbcast.GMS - Sent merge response to 'bramws-60382' for merge 'bramws-60382::9' with view '[testnode2-33255|2] (1) [testnode2-33255]'
14:45:30.763 703526 [Incoming-1,bram,testnode2-33255] TRACE org.jgroups.protocols.UNICAST3 - testnode2-33255 --> DATA(bramws-60382: #1786, conn_id=1)

This should mean the MERGE_RSP is sent back to node1 however, node1 never seems to receive this causing the merge to fail:

....
14:45:30.761 680848 [Incoming-2,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.GMS - Received MERGE_REQ from bramws-60382
...
14:45:35.763 685850 [MergeTask,bram,bramws-60382] TRACE org.jgroups.protocols.pbcast.GMS - bramws-60382: collected 1 merge response(s) in 5003 ms
14:45:35.763 685850 [MergeTask,bram,bramws-60382] DEBUG org.jgroups.protocols.pbcast.GMS - bramws-60382: merge leader bramws-60382 did not get responses from all 2 partition coordinators; missing responses from 1 members, removing them from the merge

The above sequence keeps repeating itself, I have to restart the application to form one cluster again. Enabling trace logging adds allot of stuff to the logs. Is there something I can look for? I can see traffic is received from node2 on node1, I have a (temp) custom filter in place to filter out locking requests from nodes not present in the current view to prevent deadlocks. Log from node1 showing incoming traffic from node2:

14:45:35.628 685715 [Incoming-2,bram,bramws-60382] ERROR n.s.c.j.p.g.GarbageFilterProtocol - Got message from 'shockvm-tn3-33255' with headers 'CENTRAL_LOCK: [LockingHeader], UNICAST3: DATA, seqno=1741, conn_id=1, first, 1201: [ApplicationVersionHeader]' but source not known in our view - dropping message

Its very hard to reproduce this bug and its basically just restarting the application and running the stress test over and over until I hit the bug.

-- 
Met vriendelijke groet / Kind regards,
Bram Klein Gunnewiek | Shock Media B.V.

Tel: +31 (0)546 - 714360
Fax: +31 (0)546 - 714361
Web: https://www.shockmedia.nl/

------------------------------------------------------------------------------

_______________________________________________
javagroups-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/javagroups-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.