@Override public void start() { if (partitions.length == 0) { // partitions may be empty if the node has joined and didn't get any partitions yet // a generic operation may already execute on it. sendResponse(EMPTY_RESPONSE); return; } PartitionAwareOperationFactory partitionAwareFactory = extractPartitionAware(operationFactory); if (partitionAwareFactory == null) { executeOperations(); } else { executeOperations(partitionAwareFactory); } }
@Override public CallStatus call() { return new OffloadImpl(); }
private void sendResponse() { Object[] results = new Object[partitions.length]; for (int k = 0; k < partitions.length; k++) { int partitionId = partitions[k]; Object response = responseArray.get(partitionId); results[k] = response == NULL ? null : response; } PartitionIteratingOperation.this.sendResponse(new PartitionResponse(partitions, results)); } }
private void executeOperations(PartitionAwareOperationFactory givenFactory) { final NodeEngine nodeEngine = getNodeEngine(); final PartitionAwareOperationFactory factory = givenFactory.createFactoryOnRunner(nodeEngine, partitions); final OperationResponseHandler responseHandler = new OperationResponseHandlerImpl(partitions); final Object service = getServiceName() == null ? null : getService(); PartitionTaskFactory f = new PartitionTaskFactory() { @Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } }; getOperationService().executeOnPartitions(f, toPartitionBitSet()); }
@Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } };
@Override public void onExecutionFailure(Throwable cause) { // we also send a response so that the caller doesn't wait indefinitely. sendResponse(new ErrorResponse(cause, getCallId(), isUrgent())); getLogger().severe(cause); }
@Override public void logError(Throwable e) { if (backupOp != null) { // Ensure that backup operation is initialized. // If there is an exception before `run` (for example caller is not valid anymore), // backup operation will not be initialized. ensureBackupOperationInitialized(); backupOp.logError(e); } else { ReplicaErrorLogger.log(e, getLogger()); } }
private String extractCallerUuid() { // Clients callerUUID can be set already. See OperationFactoryWrapper usage. if (operationFactory instanceof OperationFactoryWrapper) { return ((OperationFactoryWrapper) operationFactory).getUuid(); } // Members UUID return getCallerUuid(); } }
private InternalOperationService getOperationService() { return (InternalOperationService) getNodeEngine().getOperationService(); }
private void executeOperations(PartitionAwareOperationFactory givenFactory) { final NodeEngine nodeEngine = getNodeEngine(); final PartitionAwareOperationFactory factory = givenFactory.createFactoryOnRunner(nodeEngine, partitions); final OperationResponseHandler responseHandler = new OperationResponseHandlerImpl(partitions); final Object service = getServiceName() == null ? null : getService(); PartitionTaskFactory f = new PartitionTaskFactory() { @Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } }; getOperationService().executeOnPartitions(f, toPartitionBitSet()); }
@Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } };
@Override public void onExecutionFailure(Throwable cause) { // we also send a response so that the caller doesn't wait indefinitely. sendResponse(new ErrorResponse(cause, getCallId(), isUrgent())); getLogger().severe(cause); }
@Override public void start() { if (partitions.length == 0) { // partitions may be empty if the node has joined and didn't get any partitions yet // a generic operation may already execute on it. sendResponse(EMPTY_RESPONSE); return; } PartitionAwareOperationFactory partitionAwareFactory = extractPartitionAware(operationFactory); if (partitionAwareFactory == null) { executeOperations(); } else { executeOperations(partitionAwareFactory); } }
private void sendResponse() { Object[] results = new Object[partitions.length]; for (int k = 0; k < partitions.length; k++) { int partitionId = partitions[k]; Object response = responseArray.get(partitionId); results[k] = response == NULL ? null : response; } PartitionIteratingOperation.this.sendResponse(new PartitionResponse(partitions, results)); } }
@Override public void logError(Throwable e) { if (backupOp != null) { // Ensure that backup operation is initialized. // If there is an exception before `run` (for example caller is not valid anymore), // backup operation will not be initialized. ensureBackupOperationInitialized(); backupOp.logError(e); } else { ReplicaErrorLogger.log(e, getLogger()); } }
@Override public CallStatus call() { return new OffloadImpl(); }
private String extractCallerUuid() { // Clients callerUUID can be set already. See OperationFactoryWrapper usage. if (operationFactory instanceof OperationFactoryWrapper) { return ((OperationFactoryWrapper) operationFactory).getUuid(); } // Members UUID return getCallerUuid(); } }
private InternalOperationService getOperationService() { return (InternalOperationService) getNodeEngine().getOperationService(); }
private void executeOperations() { PartitionTaskFactory f = new PartitionTaskFactory() { private final NodeEngine nodeEngine = getNodeEngine(); private final OperationResponseHandler responseHandler = new OperationResponseHandlerImpl(partitions); private final Object service = getServiceName() == null ? null : getService(); @Override public Operation create(int partitionId) { Operation op = operationFactory.createOperation() .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } }; getOperationService().executeOnPartitions(f, toPartitionBitSet()); }
private void executeOperations() { PartitionTaskFactory f = new PartitionTaskFactory() { private final NodeEngine nodeEngine = getNodeEngine(); private final OperationResponseHandler responseHandler = new OperationResponseHandlerImpl(partitions); private final Object service = getServiceName() == null ? null : getService(); @Override public Operation create(int partitionId) { Operation op = operationFactory.createOperation() .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } }; getOperationService().executeOnPartitions(f, toPartitionBitSet()); }