use of com.hazelcast.concurrent.lock.InternalLockNamespace in project hazelcast by hazelcast.
the class ConditionAwaitMessageTask method prepareOperation.
@Override
protected Operation prepareOperation() {
final Data key = serializationService.toData(parameters.lockName);
final InternalLockNamespace namespace = new InternalLockNamespace(parameters.lockName);
return new AwaitOperation(namespace, key, parameters.threadId, parameters.timeout, parameters.name, parameters.referenceId);
}
use of com.hazelcast.concurrent.lock.InternalLockNamespace in project hazelcast by hazelcast.
the class ConditionBeforeAwaitMessageTask method prepareOperation.
@Override
protected Operation prepareOperation() {
final Data key = serializationService.toData(parameters.lockName);
final InternalLockNamespace namespace = new InternalLockNamespace(parameters.lockName);
return new BeforeAwaitOperation(namespace, key, parameters.threadId, parameters.name, parameters.referenceId);
}
use of com.hazelcast.concurrent.lock.InternalLockNamespace in project hazelcast by hazelcast.
the class ConditionSignalMessageTask method prepareOperation.
@Override
protected Operation prepareOperation() {
final Data key = serializationService.toData(parameters.lockName);
final InternalLockNamespace namespace = new InternalLockNamespace(parameters.lockName);
return new SignalOperation(namespace, key, parameters.threadId, parameters.name, false);
}
use of com.hazelcast.concurrent.lock.InternalLockNamespace in project hazelcast by hazelcast.
the class Invocation_BlockingTest method sync_whenOperationTimeout.
// ====================================================================
//
// ====================================================================
@Test
public void sync_whenOperationTimeout() {
int callTimeout = 5000;
Config config = new Config().setProperty(OPERATION_CALL_TIMEOUT_MILLIS.getName(), "" + callTimeout);
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(2);
HazelcastInstance local = factory.newHazelcastInstance(config);
HazelcastInstance remote = factory.newHazelcastInstance(config);
warmUpPartitions(factory.getAllHazelcastInstances());
NodeEngineImpl nodeEngine = getNodeEngineImpl(local);
String key = generateKeyOwnedBy(remote);
InternalLockNamespace namespace = new InternalLockNamespace(key);
int partitionId = nodeEngine.getPartitionService().getPartitionId(key);
// first we lock the lock by another thread
InternalOperationService opService = nodeEngine.getOperationService();
int otherThreadId = 2;
opService.invokeOnPartition(new LockOperation(namespace, nodeEngine.toData(key), otherThreadId, -1, -1).setPartitionId(partitionId)).join();
// then we execute a lock operation that won't be executed because lock is already acquired
// we are going to do some waiting (3x call timeout)
int threadId = 1;
Operation op = new LockOperation(namespace, nodeEngine.toData(key), threadId, -1, 3 * callTimeout).setPartitionId(partitionId);
final InternalCompletableFuture<Object> future = opService.invokeOnPartition(op);
assertTrueEventually(new AssertTask() {
@Override
public void run() throws Exception {
assertTrue(future.isDone());
}
});
assertEquals(Boolean.FALSE, future.join());
}
use of com.hazelcast.concurrent.lock.InternalLockNamespace in project hazelcast by hazelcast.
the class Invocation_BlockingTest method sync_whenHeartbeatTimeout.
// ============================ heartbeat timeout =============================================================================
//
// ===========================================================================================================================
@Test
public void sync_whenHeartbeatTimeout() {
int callTimeout = 5000;
Config config = new Config().setProperty(OPERATION_CALL_TIMEOUT_MILLIS.getName(), "" + callTimeout);
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(2);
HazelcastInstance local = factory.newHazelcastInstance(config);
HazelcastInstance remote = factory.newHazelcastInstance(config);
warmUpPartitions(factory.getAllHazelcastInstances());
NodeEngineImpl nodeEngine = getNodeEngineImpl(local);
String key = generateKeyOwnedBy(remote);
int partitionId = nodeEngine.getPartitionService().getPartitionId(key);
// first we execute an operation that stall the partition.
InternalOperationService opService = nodeEngine.getOperationService();
opService.invokeOnPartition(null, new SlowOperation(5 * callTimeout), partitionId);
// then we execute a lock operation that won't be executed because the partition is blocked.
LockOperation op = new LockOperation(new InternalLockNamespace(key), nodeEngine.toData(key), 1, -1, -1);
InternalCompletableFuture<Object> future = opService.createInvocationBuilder(null, op, partitionId).setCallTimeout(callTimeout).invoke();
try {
future.join();
fail("Invocation should failed with timeout!");
} catch (OperationTimeoutException expected) {
ignore(expected);
}
IsLockedOperation isLockedOperation = new IsLockedOperation(new InternalLockNamespace(key), nodeEngine.toData(key), 1);
Boolean isLocked = (Boolean) opService.createInvocationBuilder(null, isLockedOperation, partitionId).setCallTimeout(10 * callTimeout).invoke().join();
assertFalse(isLocked);
}
Aggregations