[jboss-jira] [JBoss JIRA] (JGRP-2103) GroupRequest times out when the only recipient leaves too soon
Bela Ban (JIRA)
issues at jboss.org
Wed Sep 28 10:44:00 EDT 2016
[ https://issues.jboss.org/browse/JGRP-2103?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bela Ban updated JGRP-2103:
---------------------------
Fix Version/s: 3.6.12
> GroupRequest times out when the only recipient leaves too soon
> --------------------------------------------------------------
>
> Key: JGRP-2103
> URL: https://issues.jboss.org/browse/JGRP-2103
> Project: JGroups
> Issue Type: Bug
> Affects Versions: 3.6.10
> Reporter: Dan Berindei
> Assignee: Bela Ban
> Fix For: 3.6.12
>
>
> There is a concurrency issue when a user calls {{messageDispatcher.cast(dests, msg, options, block_for_results, null)}} and adds a listener later with {{req.setListener(listener)}}.
> If the node installs a new view between {{cast()}} and {{setListener()}} that removes all the {{dests}} nodes, the listener is never called. This test fails:
> {code}
> public void testCastToMissingNode() throws Exception {
> d1.setRequestHandler(new MyHandler(new byte[10]));
> b = createChannel(a);
> b.setName("B");
> final CountDownLatch targetLatch = new CountDownLatch(1);
> d2 = new MessageDispatcher(b, null, null, new RequestHandler() {
> @Override
> public Object handle(Message msg) throws Exception {
> targetLatch.await();
> return null;
> }
> });
> b.connect("MessageDispatcherUnitTest");
> Assert.assertEquals(2, b.getView().size());
> final CountDownLatch futureLatch = new CountDownLatch(1);
> FutureListener listener = new FutureListener() {
> @Override
> public void futureDone(Future future) {
> futureLatch.countDown();
> }
> };
> List<Address> dests = Collections.singletonList(b.getAddress());
> byte[] buf = new byte[1];
> Message msg = new Message();
> msg.setBuffer(buf);
> NotifyingFuture<RspList<Object>> future = d1.castMessageWithFuture(dests, msg, RequestOptions.SYNC(), null);
> b.disconnect();
> Thread.sleep(100);
> future.setListener(listener);
> assertTrue(futureLatch.await(10, TimeUnit.SECONDS));
> targetLatch.countDown();
> }
> {code}
> If I change the {{d1.castMessageWithFuture(dests, msg, RequestOptions.SYNC(), null)}} with {{d1.castMessageWithFuture(dests, msg, RequestOptions.SYNC(), listener)}} and comment out the {{future.setListener(listener)}} line, the test passes.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the jboss-jira
mailing list