use of com.hazelcast.spi.impl.operationservice.OperationService in project hazelcast by hazelcast.
the class FinalizeJoinOp method sendPostJoinOperationsBackToMaster.
private void sendPostJoinOperationsBackToMaster() {
final ClusterServiceImpl clusterService = getService();
final NodeEngineImpl nodeEngine = clusterService.getNodeEngine();
// Post join operations must be lock free; means no locks at all;
// no partition locks, no key-based locks, no service level locks!
Collection<Operation> postJoinOperations = nodeEngine.getPostJoinOperations();
if (postJoinOperations != null && !postJoinOperations.isEmpty()) {
final OperationService operationService = nodeEngine.getOperationService();
// send post join operations to master and it will broadcast it to all members
Address masterAddress = clusterService.getMasterAddress();
OnJoinOp operation = new OnJoinOp(postJoinOperations);
operationService.invokeOnTarget(ClusterServiceImpl.SERVICE_NAME, operation, masterAddress);
}
}
use of com.hazelcast.spi.impl.operationservice.OperationService in project hazelcast by hazelcast.
the class OnJoinOp method run.
@Override
public void run() throws Exception {
if (!operations.isEmpty()) {
SecurityConfig securityConfig = getNodeEngine().getConfig().getSecurityConfig();
boolean runPermissionUpdates = securityConfig.getOnJoinPermissionOperation() == OnJoinPermissionOperationName.RECEIVE;
for (Operation op : operations) {
if ((op instanceof UpdatePermissionConfigOperation) && !runPermissionUpdates) {
continue;
}
try {
// not running via OperationService since we don't want any restrictions like cluster state check etc.
runDirect(op);
} catch (Exception e) {
getLogger().warning("Error while running post-join operation: " + op, e);
}
}
final ClusterService clusterService = getService();
// if executed on master, broadcast to all other members except sender (joining member)
if (clusterService.isMaster()) {
final OperationService operationService = getNodeEngine().getOperationService();
for (Member member : clusterService.getMembers()) {
if (!member.localMember() && !member.getUuid().equals(getCallerUuid())) {
OnJoinOp operation = new OnJoinOp(operations);
operationService.invokeOnTarget(getServiceName(), operation, member.getAddress());
}
}
}
}
}
use of com.hazelcast.spi.impl.operationservice.OperationService in project hazelcast by hazelcast.
the class InvocationFuture_GetNewInstanceTest method invocationToLocalMember.
@Test
public void invocationToLocalMember() throws ExecutionException, InterruptedException {
Node localNode = getNode(local);
Data response = localNode.nodeEngine.toData(new DummyObject());
Operation op = new OperationWithResponse(response);
OperationService service = getOperationService(local);
Future future = service.createInvocationBuilder(null, op, localNode.address).invoke();
Object instance1 = future.get();
Object instance2 = future.get();
assertNotNull(instance1);
assertNotNull(instance2);
assertTrue(instance1 instanceof DummyObject);
assertTrue(instance2 instanceof DummyObject);
assertNotSame(instance1, instance2);
assertNotSame(instance1, response);
assertNotSame(instance2, response);
}
use of com.hazelcast.spi.impl.operationservice.OperationService in project hazelcast by hazelcast.
the class InvocationFuture_GetNewInstanceTest method invocationToRemoteMember.
@Test
public void invocationToRemoteMember() throws ExecutionException, InterruptedException {
Node localNode = getNode(local);
Data response = localNode.nodeEngine.toData(new DummyObject());
Operation op = new OperationWithResponse(response);
Address remoteAddress = getAddress(remote);
OperationService operationService = getOperationService(local);
Future future = operationService.createInvocationBuilder(null, op, remoteAddress).invoke();
Object instance1 = future.get();
Object instance2 = future.get();
assertNotNull(instance1);
assertNotNull(instance2);
assertTrue(instance1 instanceof DummyObject);
assertTrue(instance2 instanceof DummyObject);
assertNotSame(instance1, instance2);
assertNotSame(instance1, response);
assertNotSame(instance2, response);
}
use of com.hazelcast.spi.impl.operationservice.OperationService in project hazelcast by hazelcast.
the class Invocation_DetectHeartbeatTimeoutTest method whenCallTimeoutNotExpired.
@Test
public void whenCallTimeoutNotExpired() {
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(2);
HazelcastInstance local = factory.newHazelcastInstance();
HazelcastInstance remote = factory.newHazelcastInstance();
OperationService opService = getOperationService(local);
Operation operation = new SlowOperation(SECONDS.toMillis(60));
InvocationFuture future = (InvocationFuture) opService.invokeOnPartition(null, operation, getPartitionId(remote));
Invocation invocation = future.invocation;
assertEquals(NO_TIMEOUT__CALL_TIMEOUT_NOT_EXPIRED, invocation.detectTimeout(SECONDS.toMillis(1)));
assertFalse(future.isDone());
}
Aggregations