use of com.hazelcast.spi.impl.operationservice.Operation in project hazelcast by hazelcast.
the class QueueService method rollbackTransaction.
@Override
public void rollbackTransaction(UUID transactionId) {
final Set<String> queueNames = containerMap.keySet();
OperationService operationService = nodeEngine.getOperationService();
for (String name : queueNames) {
int partitionId = partitionService.getPartitionId(StringPartitioningStrategy.getPartitionKey(name));
Operation operation = new QueueTransactionRollbackOperation(name, transactionId).setPartitionId(partitionId).setService(this).setNodeEngine(nodeEngine);
operationService.invokeOnPartition(operation);
}
}
use of com.hazelcast.spi.impl.operationservice.Operation 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.Operation 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.Operation in project hazelcast by hazelcast.
the class OnJoinOp method beforeRun.
@Override
public void beforeRun() throws Exception {
if (!operations.isEmpty()) {
NodeEngine nodeEngine = getNodeEngine();
OperationResponseHandler responseHandler = createErrorLoggingResponseHandler(getLogger());
for (Operation op : operations) {
op.setNodeEngine(nodeEngine);
op.setOperationResponseHandler(responseHandler);
OperationAccessor.setCallerAddress(op, getCallerAddress());
OperationAccessor.setConnection(op, getConnection());
}
}
}
use of com.hazelcast.spi.impl.operationservice.Operation in project hazelcast by hazelcast.
the class AbstractMultiTargetMessageTask method processInternal.
@Override
protected CompletableFuture<Object> processInternal() {
Supplier<Operation> operationSupplier = createOperationSupplier();
Collection<Member> targets = getTargets();
CompletableFuture<Object> finalResult = new CompletableFuture<>();
if (targets.isEmpty()) {
finalResult.complete(EMPTY_MAP);
return finalResult;
}
final OperationServiceImpl operationService = nodeEngine.getOperationService();
MultiTargetCallback callback = new MultiTargetCallback(targets, finalResult);
for (Member target : targets) {
Operation op = operationSupplier.get();
op.setCallerUuid(endpoint.getUuid());
InvocationBuilder builder = operationService.createInvocationBuilder(getServiceName(), op, target.getAddress()).setResultDeserialized(false);
InvocationFuture<Object> invocationFuture = builder.invoke();
invocationFuture.whenCompleteAsync(new SingleTargetCallback(target, callback), CALLER_RUNS);
}
return finalResult;
}
Aggregations