use of com.hazelcast.core.ILock in project sonarqube by SonarSource.
the class AppStateClusterImpl method tryToLockWebLeader.
@Override
public boolean tryToLockWebLeader() {
IAtomicReference<String> leader = hzInstance.getAtomicReference(LEADER);
if (leader.get() == null) {
ILock lock = hzInstance.getLock(LEADER);
lock.lock();
try {
if (leader.get() == null) {
leader.set(getLocalUuid());
return true;
} else {
return false;
}
} finally {
lock.unlock();
}
} else {
return false;
}
}
use of com.hazelcast.core.ILock in project sonarqube by SonarSource.
the class AppStateClusterImpl method registerSonarQubeVersion.
@Override
public void registerSonarQubeVersion(String sonarqubeVersion) {
IAtomicReference<String> sqVersion = hzInstance.getAtomicReference(SONARQUBE_VERSION);
if (sqVersion.get() == null) {
ILock lock = hzInstance.getLock(SONARQUBE_VERSION);
lock.lock();
try {
if (sqVersion.get() == null) {
sqVersion.set(sonarqubeVersion);
}
} finally {
lock.unlock();
}
}
String clusterVersion = sqVersion.get();
if (!sqVersion.get().equals(sonarqubeVersion)) {
hzInstance.shutdown();
throw new IllegalStateException(String.format("The local version %s is not the same as the cluster %s", sonarqubeVersion, clusterVersion));
}
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class ClientRegressionWithMockNetworkTest method testLock_WhenClientAndOwnerNodeDiesTogether.
private void testLock_WhenClientAndOwnerNodeDiesTogether(boolean smart) throws InterruptedException {
hazelcastFactory.newHazelcastInstance();
final ClientConfig clientConfig = new ClientConfig();
clientConfig.getNetworkConfig().setSmartRouting(smart);
final int tryCount = 5;
for (int i = 0; i < tryCount; i++) {
final HazelcastInstance instance = hazelcastFactory.newHazelcastInstance();
final HazelcastInstance client = hazelcastFactory.newHazelcastClient(clientConfig);
final ILock lock = client.getLock("lock");
assertTrue(lock.tryLock(1, TimeUnit.MINUTES));
//with client is dead, lock should be released.
client.getLifecycleService().terminate();
instance.getLifecycleService().terminate();
}
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class LegacyClientConditionTest method testDestroyLockWhenOtherWaitingOnConditionAwait.
@Test(expected = DistributedObjectDestroyedException.class)
public void testDestroyLockWhenOtherWaitingOnConditionAwait() {
final ILock lock = client.getLock("testDestroyLockWhenOtherWaitingOnConditionAwait");
final ICondition condition = lock.newCondition("condition");
final CountDownLatch latch = new CountDownLatch(1);
new Thread(new Runnable() {
public void run() {
try {
latch.await(30, TimeUnit.SECONDS);
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.destroy();
}
}).start();
lock.lock();
try {
latch.countDown();
condition.await();
} catch (InterruptedException e) {
}
lock.unlock();
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class LegacyClientConditionTest method testLockConditionSimpleUsage.
@Test
public void testLockConditionSimpleUsage() throws InterruptedException {
final String name = randomString();
final ILock lock = client.getLock(name);
final ICondition condition = lock.newCondition(randomString());
final AtomicInteger count = new AtomicInteger(0);
final CountDownLatch threadGetTheLock = new CountDownLatch(1);
Thread t = new Thread(new Runnable() {
public void run() {
lock.lock();
threadGetTheLock.countDown();
try {
if (lock.isLockedByCurrentThread()) {
count.incrementAndGet();
}
condition.await();
if (lock.isLockedByCurrentThread()) {
count.incrementAndGet();
}
} catch (InterruptedException ignored) {
} finally {
lock.unlock();
}
}
});
t.start();
assertOpenEventually(threadGetTheLock);
lock.lock();
assertEquals(true, lock.isLocked());
condition.signal();
lock.unlock();
t.join();
assertEquals(2, count.get());
}
Aggregations