/** * Create a failed operation. * * @param operation the operation * @param t the throwable * @param <T> the operation type * @return the failed operation */ public static <T extends TransactionalProtocolClient.Operation> TransactionalProtocolClient.PreparedOperation<T> create(final T operation, final Throwable t) { final String failureDescription = t.getLocalizedMessage() == null ? t.getClass().getName() : t.getLocalizedMessage(); return create(operation, failureDescription); }
/** * Create a failed operation. * * @param operation the operation * @param failureDescription the failure description * @param <T> the operation type * @return the failed operation */ public static <T extends TransactionalProtocolClient.Operation> TransactionalProtocolClient.PreparedOperation<T> create(final T operation, final String failureDescription) { final ModelNode failedResult = new ModelNode(); failedResult.get(ModelDescriptionConstants.OUTCOME).set(ModelDescriptionConstants.FAILED); failedResult.get(FAILURE_DESCRIPTION).set(failureDescription); return new FailedOperation<T>(operation, failedResult, false); }
} catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), transformationResult); final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT, OperationTransformer.DEFAULT_REJECTION_POLICY);
} catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), transformationResult); final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT, OperationTransformer.DEFAULT_REJECTION_POLICY);
} catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), transformationResult); final TransactionalProtocolClient.PreparedOperation<ProxyOperation> result = BlockingQueueOperationListener.FailedOperation.create(proxyOperation, e); subsystemListener.operationPrepared(result); return new ExecutedHostRequest(result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT, OperationTransformer.DEFAULT_REJECTION_POLICY);
/** * Execute the operation. * * @param listener the transactional operation listener * @param client the transactional protocol client * @param identity the server identity * @param operation the operation * @param transformer the operation result transformer * @return whether the operation was executed */ protected boolean executeOperation(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, TransactionalProtocolClient client, final ServerIdentity identity, final ModelNode operation, final OperationResultTransformer transformer) { if(client == null) { return false; } final OperationMessageHandler messageHandler = new DelegatingMessageHandler(context); final OperationAttachments operationAttachments = new DelegatingOperationAttachments(context); final ServerOperation serverOperation = new ServerOperation(identity, operation, messageHandler, operationAttachments, transformer); try { DomainControllerLogger.HOST_CONTROLLER_LOGGER.tracef("Sending %s to %s", operation, identity); final Future<OperationResponse> result = client.execute(listener, serverOperation); recordExecutedRequest(new ExecutedServerRequest(identity, result, transformer)); } catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), transformer)); } return true; }
/** * Execute the operation. * * @param listener the transactional operation listener * @param client the transactional protocol client * @param identity the server identity * @param operation the operation * @param transformer the operation result transformer * @return whether the operation was executed */ protected boolean executeOperation(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, TransactionalProtocolClient client, final ServerIdentity identity, final ModelNode operation, final OperationResultTransformer transformer) { if(client == null) { return false; } final OperationMessageHandler messageHandler = new DelegatingMessageHandler(context); final OperationAttachments operationAttachments = new DelegatingOperationAttachments(context); final ServerOperation serverOperation = new ServerOperation(identity, operation, messageHandler, operationAttachments, transformer); try { final Future<ModelNode> result = client.execute(listener, serverOperation); recordExecutedRequest(new ExecutedServerRequest(identity, result, transformer)); } catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), transformer)); } return true; }
/** * Execute the operation. * * @param listener the transactional operation listener * @param client the transactional protocol client * @param identity the server identity * @param operation the operation * @param transformer the operation result transformer * @return whether the operation was executed */ protected boolean executeOperation(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, TransactionalProtocolClient client, final ServerIdentity identity, final ModelNode operation, final OperationResultTransformer transformer) { if(client == null) { return false; } final OperationMessageHandler messageHandler = new DelegatingMessageHandler(context); final OperationAttachments operationAttachments = new DelegatingOperationAttachments(context); final ServerOperation serverOperation = new ServerOperation(identity, operation, messageHandler, operationAttachments, transformer); try { DomainControllerLogger.HOST_CONTROLLER_LOGGER.tracef("Sending %s to %s", operation, identity); final Future<OperationResponse> result = client.execute(listener, serverOperation); recordExecutedRequest(new ExecutedServerRequest(identity, result, transformer)); } catch (IOException e) { final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), transformer)); } return true; }
/** * Execute a server task. * * @param listener the transactional server listener * @param task the server task * @return time to wait in ms for a response from the server, or {@code -1} if the task execution failed locally */ public int executeTask(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, final ServerUpdateTask task) { try { return execute(listener, task.getServerIdentity(), task.getOperation()); } catch (OperationFailedException e) { // Handle failures operation transformation failures final ServerIdentity identity = task.getServerIdentity(); final ServerOperation serverOperation = new ServerOperation(identity, task.getOperation(), null, null, OperationResultTransformer.ORIGINAL_RESULT); final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT)); return 1; // 1 ms timeout since there is no reason to wait for the locally stored result } }
/** * Execute a server task. * * @param listener the transactional server listener * @param task the server task * @return time to wait in ms for a response from the server, or {@code -1} if the task execution failed locally */ public int executeTask(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, final ServerUpdateTask task) { try { return execute(listener, task.getServerIdentity(), task.getOperation()); } catch (OperationFailedException e) { // Handle failures operation transformation failures final ServerIdentity identity = task.getServerIdentity(); final ServerOperation serverOperation = new ServerOperation(identity, task.getOperation(), null, null, OperationResultTransformer.ORIGINAL_RESULT); final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT)); return 1; // 1 ms timeout since there is no reason to wait for the locally stored result } }
/** * Execute a server task. * * @param listener the transactional server listener * @param task the server task * @return whether the task was executed or not */ public boolean executeTask(final TransactionalProtocolClient.TransactionalOperationListener<ServerOperation> listener, final ServerUpdateTask task) { try { return execute(listener, task.getServerIdentity(), task.getOperation()); } catch (OperationFailedException e) { // Handle failures operation transformation failures final ServerIdentity identity = task.getServerIdentity(); final ServerOperation serverOperation = new ServerOperation(identity, task.getOperation(), null, null, OperationResultTransformer.ORIGINAL_RESULT); final TransactionalProtocolClient.PreparedOperation<ServerOperation> result = BlockingQueueOperationListener.FailedOperation.create(serverOperation, e); listener.operationPrepared(result); recordExecutedRequest(new ExecutedServerRequest(identity, result.getFinalResult(), OperationResultTransformer.ORIGINAL_RESULT)); } return true; }
void handlePreparePhaseTimeout(ServerIdentity identity, ServerUpdateTask task, long timeout) { blockingTimeout.proxyTimeoutDetected(identity.toPathAddress()); // Record a synthetic prepared result so the timeout can impact the updatePolicy and // possibly trigger a ServerRequestRestartTask if the overall rollout isn't rolled back final ServerTaskExecutor.ServerOperation serverOperation = new ServerTaskExecutor.ServerOperation(identity, task.getOperation(), null, null, OperationResultTransformer.ORIGINAL_RESULT); final String failureMsg = ControllerLogger.ROOT_LOGGER.proxiedOperationTimedOut(task.getOperation().get(OP).asString(), identity.toPathAddress(), timeout); final ModelNode failureNode = new ModelNode(); failureNode.get(OUTCOME).set(FAILED); failureNode.get(FAILURE_DESCRIPTION).set(failureMsg); final BlockingQueueOperationListener.FailedOperation<ServerTaskExecutor.ServerOperation> prepared = new BlockingQueueOperationListener.FailedOperation<>(serverOperation, failureNode, true); final ModelNode preparedResult = prepared.getPreparedResult(); updatePolicy.recordServerResult(identity, preparedResult); executor.recordOperationPrepareTimeout(prepared); } }
void handlePreparePhaseTimeout(ServerIdentity identity, ServerUpdateTask task, long timeout) { blockingTimeout.proxyTimeoutDetected(identity.toPathAddress()); // Record a synthetic prepared result so the timeout can impact the updatePolicy and // possibly trigger a ServerRequestRestartTask if the overall rollout isn't rolled back final ServerTaskExecutor.ServerOperation serverOperation = new ServerTaskExecutor.ServerOperation(identity, task.getOperation(), null, null, OperationResultTransformer.ORIGINAL_RESULT); final String failureMsg = ControllerLogger.ROOT_LOGGER.proxiedOperationTimedOut(task.getOperation().get(OP).asString(), identity.toPathAddress(), timeout); final ModelNode failureNode = new ModelNode(); failureNode.get(OUTCOME).set(FAILED); failureNode.get(FAILURE_DESCRIPTION).set(failureMsg); final BlockingQueueOperationListener.FailedOperation<ServerTaskExecutor.ServerOperation> prepared = new BlockingQueueOperationListener.FailedOperation<>(serverOperation, failureNode, true); final ModelNode preparedResult = prepared.getPreparedResult(); updatePolicy.recordServerResult(identity, preparedResult); executor.recordOperationPrepareTimeout(prepared); } }
/** * Create a failed operation. * * @param operation the operation * @param failureDescription the failure description * @param <T> the operation type * @return the failed operation */ public static <T extends TransactionalProtocolClient.Operation> TransactionalProtocolClient.PreparedOperation<T> create(final T operation, final String failureDescription) { final ModelNode failedResult = new ModelNode(); failedResult.get(ModelDescriptionConstants.OUTCOME).set(ModelDescriptionConstants.FAILED); failedResult.get(ModelDescriptionConstants.FAILURE_DESCRIPTION).set(failureDescription); return new FailedOperation<T>(operation, failedResult); }
/** * Record a prepare operation timeout. * * @param failedOperation the prepared operation */ void recordOperationPrepareTimeout(final BlockingQueueOperationListener.FailedOperation<ServerOperation> failedOperation) { recordPreparedTask(new ServerTaskExecutor.ServerPreparedResponse(failedOperation)); // Swap out the submitted task so we don't wait for the final result. Use a future the returns // prepared response ServerIdentity identity = failedOperation.getOperation().getIdentity(); AsyncFuture<OperationResponse> finalResult = failedOperation.getFinalResult(); synchronized (submittedTasks) { submittedTasks.put(identity, new ServerTaskExecutor.ExecutedServerRequest(identity, finalResult)); } }
@Override public void operationFailed(T operation, ModelNode result) { queue.offer(new FailedOperation<T>(operation, result)); }
/** * Record a prepare operation timeout. * * @param failedOperation the prepared operation */ void recordOperationPrepareTimeout(final BlockingQueueOperationListener.FailedOperation<ServerOperation> failedOperation) { recordPreparedTask(new ServerTaskExecutor.ServerPreparedResponse(failedOperation)); // Swap out the submitted task so we don't wait for the final result. Use a future the returns // prepared response ServerIdentity identity = failedOperation.getOperation().getIdentity(); AsyncFuture<OperationResponse> finalResult = failedOperation.getFinalResult(); synchronized (submittedTasks) { submittedTasks.put(identity, new ServerTaskExecutor.ExecutedServerRequest(identity, finalResult)); } }
public FailedOperation(final T operation, final ModelNode finalResult) { this(operation, finalResult, isTimeoutFailureDescription(finalResult)); }
/** * Create a failed operation. * * @param operation the operation * @param failureDescription the failure description * @param <T> the operation type * @return the failed operation */ public static <T extends TransactionalProtocolClient.Operation> TransactionalProtocolClient.PreparedOperation<T> create(final T operation, final String failureDescription) { final ModelNode failedResult = new ModelNode(); failedResult.get(ModelDescriptionConstants.OUTCOME).set(ModelDescriptionConstants.FAILED); failedResult.get(ModelDescriptionConstants.FAILURE_DESCRIPTION).set(failureDescription); return new FailedOperation<T>(operation, failedResult); }
/** * Create a failed operation. * * @param operation the operation * @param failureDescription the failure description * @param <T> the operation type * @return the failed operation */ public static <T extends TransactionalProtocolClient.Operation> TransactionalProtocolClient.PreparedOperation<T> create(final T operation, final String failureDescription) { final ModelNode failedResult = new ModelNode(); failedResult.get(ModelDescriptionConstants.OUTCOME).set(ModelDescriptionConstants.FAILED); failedResult.get(FAILURE_DESCRIPTION).set(failureDescription); return new FailedOperation<T>(operation, failedResult, false); }