use of com.uber.cadence.InternalServiceError in project cadence-client by uber-java.
the class TestWorkflowMutableStateImpl method reportWorkflowTimeoutToParent.
private void reportWorkflowTimeoutToParent(RequestContext ctx) {
if (!parent.isPresent()) {
return;
}
try {
ChildWorkflowExecutionTimedOutEventAttributes a = new ChildWorkflowExecutionTimedOutEventAttributes().setTimeoutType(TimeoutType.START_TO_CLOSE).setWorkflowType(startRequest.getWorkflowType()).setDomain(ctx.getDomain()).setWorkflowExecution(ctx.getExecution());
parent.get().childWorklfowTimedOut(ctx.getExecutionId().getWorkflowId().getWorkflowId(), a);
} catch (EntityNotExistsError entityNotExistsError) {
// Parent might already close
} catch (BadRequestError | InternalServiceError e) {
log.error("Failure reporting child timing out", e);
}
}
use of com.uber.cadence.InternalServiceError in project cadence-client by uber-java.
the class TestWorkflowMutableStateImpl method heartbeatActivityTask.
@Override
public RecordActivityTaskHeartbeatResponse heartbeatActivityTask(String activityId, RecordActivityTaskHeartbeatRequest request) throws InternalServiceError, EntityNotExistsError, BadRequestError {
RecordActivityTaskHeartbeatResponse result = new RecordActivityTaskHeartbeatResponse();
try {
update(ctx -> {
StateMachine<ActivityTaskData> activity = getActivity(activityId);
activity.action(StateMachines.Action.UPDATE, ctx, request, 0);
if (activity.getState() == StateMachines.State.CANCELLATION_REQUESTED) {
result.setCancelRequested(true);
}
ActivityTaskData data = activity.getData();
data.lastHeartbeatTime = clock.getAsLong();
int startToCloseTimeout = data.scheduledEvent.getStartToCloseTimeoutSeconds();
int heartbeatTimeout = data.scheduledEvent.getHeartbeatTimeoutSeconds();
updateHeartbeatTimer(ctx, activityId, activity, startToCloseTimeout, heartbeatTimeout);
});
} catch (InternalServiceError | EntityNotExistsError e) {
throw e;
} catch (Exception e) {
throw new InternalServiceError(Throwables.getStackTraceAsString(e));
}
return result;
}
use of com.uber.cadence.InternalServiceError in project cadence-client by uber-java.
the class TestWorkflowMutableStateImpl method completeDecisionTask.
@Override
public void completeDecisionTask(int historySize, RespondDecisionTaskCompletedRequest request) throws InternalServiceError, EntityNotExistsError, BadRequestError {
List<Decision> decisions = request.getDecisions();
completeDecisionUpdate(ctx -> {
if (ctx.getInitialEventId() != historySize) {
throw new BadRequestError("Expired decision: expectedHistorySize=" + historySize + "," + " actualHistorySize=" + ctx.getInitialEventId());
}
long decisionTaskCompletedId = ctx.getNextEventId() - 1;
// workflow
if (!concurrentToDecision.isEmpty() && hasCompleteDecision(request.getDecisions())) {
RespondDecisionTaskFailedRequest failedRequest = new RespondDecisionTaskFailedRequest().setCause(DecisionTaskFailedCause.UNHANDLED_DECISION).setIdentity(request.getIdentity());
decision.action(Action.FAIL, ctx, failedRequest, decisionTaskCompletedId);
for (RequestContext deferredCtx : this.concurrentToDecision) {
ctx.add(deferredCtx);
}
this.concurrentToDecision.clear();
scheduleDecision(ctx);
return;
}
if (decision == null) {
throw new EntityNotExistsError("No outstanding decision");
}
decision.action(StateMachines.Action.COMPLETE, ctx, request, 0);
for (Decision d : decisions) {
processDecision(ctx, d, request.getIdentity(), decisionTaskCompletedId);
}
for (RequestContext deferredCtx : this.concurrentToDecision) {
ctx.add(deferredCtx);
}
this.decision = null;
boolean completed = workflow.getState() == StateMachines.State.COMPLETED || workflow.getState() == StateMachines.State.FAILED || workflow.getState() == StateMachines.State.CANCELED;
if (!completed && (ctx.isNeedDecision() || !this.concurrentToDecision.isEmpty())) {
scheduleDecision(ctx);
}
this.concurrentToDecision.clear();
ctx.unlockTimer();
});
lock.lock();
try {
{
if (decision != null && decision.getState() != StateMachines.State.INITIATED) {
throw new InternalServiceError("non null decision after the completion: " + decision.getState());
}
}
} finally {
lock.unlock();
}
}
use of com.uber.cadence.InternalServiceError in project cadence-client by uber-java.
the class ActivityId method toBytes.
/**
* Used for task tokens.
*/
public byte[] toBytes() throws InternalServiceError {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bout);
try {
out.writeUTF(executionId.getDomain());
WorkflowExecution execution = executionId.getExecution();
out.writeUTF(execution.getWorkflowId());
out.writeUTF(execution.getRunId());
out.writeUTF(id);
return bout.toByteArray();
} catch (IOException e) {
throw new InternalServiceError(Throwables.getStackTraceAsString(e));
}
}
use of com.uber.cadence.InternalServiceError in project cadence-client by uber-java.
the class DecisionTaskToken method fromBytes.
static DecisionTaskToken fromBytes(byte[] serialized) throws InternalServiceError {
ByteArrayInputStream bin = new ByteArrayInputStream(serialized);
DataInputStream in = new DataInputStream(bin);
try {
ExecutionId executionId = ExecutionId.readFromBytes(in);
int historySize = in.readInt();
return new DecisionTaskToken(executionId, historySize);
} catch (IOException e) {
throw new InternalServiceError(Throwables.getStackTraceAsString(e));
}
}
Aggregations