[
https://issues.apache.org/jira/browse/CURATOR-595?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Francesco Nigro updated CURATOR-595:
------------------------------------
Description:
I'm not sure this is the right place to raise this, but I've added this test on
TestInterProcessSemaphore:
{code:java}
@Test
public void testAcquireAfterLostServerOnRestart() throws Exception {
final int sessionTimout = 4000;
final int connectionTimout = 2000;
try (CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
connectionTimout, new RetryNTimes(0, 1))) {
client.start();
client.blockUntilConnected();
final InterProcessSemaphoreV2 semaphore = new
InterProcessSemaphoreV2(client, "/1", 1);
assertNotNull(semaphore.acquire());
CountDownLatch lost = new CountDownLatch(1);
client.getConnectionStateListenable().addListener((client1,
newState) -> {
if (newState == ConnectionState.LOST) {
lost.countDown();
}
});
server.stop();
lost.await();
}
server.restart();
try (CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
connectionTimout, new RetryNTimes(0, 1))) {
client.start();
client.blockUntilConnected();
final InterProcessSemaphoreV2 semaphore = new
InterProcessSemaphoreV2(client, "/1", 1);
final int serverTick = ZooKeeperServer.DEFAULT_TICK_TIME
Thread.sleep(sessionTimout + serverTick);
assertNotNull(semaphore.acquire(0, TimeUnit.SECONDS));
}
}
{code}
And this is not passing: the doc of InterProcessSemaphoreV2 state that a LOST
lease is available to other clients to be acquired, maybe I'm missing something
obvious.
was:
I'm not sure this is the right place to raise this, but I've added this test on
TestInterProcessSemaphore:
{code:java}
@Test
public void testAcquireAfterLostServerOnRestart() throws Exception {
final int sessionTimout = 2000;
final int connectionTimout = 4000;
try (CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
connectionTimout, new RetryNTimes(0, 1))) {
client.start();
client.blockUntilConnected();
final InterProcessSemaphoreV2 semaphore = new
InterProcessSemaphoreV2(client, "/1", 1);
assertNotNull(semaphore.acquire());
CountDownLatch lost = new CountDownLatch(1);
client.getConnectionStateListenable().addListener((client1,
newState) -> {
if (newState == ConnectionState.LOST) {
lost.countDown();
}
});
server.stop();
lost.await();
}
server.restart();
try (CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
connectionTimout, new RetryNTimes(0, 1))) {
client.start();
client.blockUntilConnected();
final InterProcessSemaphoreV2 semaphore = new
InterProcessSemaphoreV2(client, "/1", 1);
final int serverTick = ZooKeeperServer.DEFAULT_TICK_TIME
Thread.sleep(sessionTimout + serverTick);
assertNotNull(semaphore.acquire(0, TimeUnit.SECONDS));
}
}
{code}
And this is not passing: the doc of InterProcessSemaphoreV2 state that a LOST
lease is available to other clients to be acquired, maybe I'm missing something
obvious.
> InterProcessSemaphoreV2 LOST isn't releasing permits for other clients
> ----------------------------------------------------------------------
>
> Key: CURATOR-595
> URL: https://issues.apache.org/jira/browse/CURATOR-595
> Project: Apache Curator
> Issue Type: Bug
> Components: Recipes
> Affects Versions: 5.1.0
> Reporter: Francesco Nigro
> Priority: Major
>
> I'm not sure this is the right place to raise this, but I've added this test
> on TestInterProcessSemaphore:
> {code:java}
> @Test
> public void testAcquireAfterLostServerOnRestart() throws Exception {
> final int sessionTimout = 4000;
> final int connectionTimout = 2000;
> try (CuratorFramework client =
> CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
> connectionTimout, new RetryNTimes(0, 1))) {
> client.start();
> client.blockUntilConnected();
> final InterProcessSemaphoreV2 semaphore = new
> InterProcessSemaphoreV2(client, "/1", 1);
> assertNotNull(semaphore.acquire());
> CountDownLatch lost = new CountDownLatch(1);
> client.getConnectionStateListenable().addListener((client1,
> newState) -> {
> if (newState == ConnectionState.LOST) {
> lost.countDown();
> }
> });
> server.stop();
> lost.await();
> }
> server.restart();
> try (CuratorFramework client =
> CuratorFrameworkFactory.newClient(server.getConnectString(), sessionTimout,
> connectionTimout, new RetryNTimes(0, 1))) {
> client.start();
> client.blockUntilConnected();
> final InterProcessSemaphoreV2 semaphore = new
> InterProcessSemaphoreV2(client, "/1", 1);
> final int serverTick = ZooKeeperServer.DEFAULT_TICK_TIME
> Thread.sleep(sessionTimout + serverTick);
> assertNotNull(semaphore.acquire(0, TimeUnit.SECONDS));
> }
> }
> {code}
> And this is not passing: the doc of InterProcessSemaphoreV2 state that a LOST
> lease is available to other clients to be acquired, maybe I'm missing
> something obvious.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)