Skip to content

Commit

Permalink
Also log signal transformation errors for sudo commands
Browse files Browse the repository at this point in the history
Signed-off-by: David Schwilk <david.schwilk@bosch.io>
  • Loading branch information
DerSchwilk committed Jul 27, 2022
1 parent cd8fab2 commit 768acdf
Showing 1 changed file with 17 additions and 12 deletions.
Expand Up @@ -539,6 +539,7 @@ private void forwardDittoSudoToChildIfAvailable(final WithDittoHeaders withDitto
}
if (withDittoHeaders instanceof Signal<?> signal) {
signalTransformer.apply(signal)
.whenComplete((result, error) -> handleOptionalTransformationException(signal, error, sender))
.thenAccept(transformed -> persistenceActorChild.tell(transformed, sender));
} else {
persistenceActorChild.tell(withDittoHeaders, sender);
Expand All @@ -549,6 +550,21 @@ private void forwardDittoSudoToChildIfAvailable(final WithDittoHeaders withDitto
}
}

private void handleOptionalTransformationException(final Signal<?> signal,
@Nullable final Throwable error, final ActorRef sender) {

if (error != null) {
log.withCorrelationId(signal)
.info("Got error during signal transformation: <{}>", error);
final var dre = DittoRuntimeException.asDittoRuntimeException(error,
reason -> DittoInternalErrorException.newBuilder()
.dittoHeaders(signal.getDittoHeaders())
.cause(reason)
.build());
sender.tell(dre, ActorRef.noSender());
}
}

/**
* Forward all messages to the persistenceActorChild (after applied enforcement) if it is active or by reply
* immediately with an exception if the child has terminated (fail fast).
Expand All @@ -572,18 +588,7 @@ private void enforceAndForwardToTargetActor(final Object message) {
becomeTwinSignalProcessingAwaiting();
}
final CompletionStage<Control> syncCs = signalTransformer.apply(signal)
.whenComplete((result, error) -> {
if (error != null) {
log.withCorrelationId(signal)
.info("Got error during signal transformation: <{}>", error);
final var dre = DittoRuntimeException.asDittoRuntimeException(error,
reason -> DittoInternalErrorException.newBuilder()
.dittoHeaders(signal.getDittoHeaders())
.cause(reason)
.build());
sender.tell(dre, ActorRef.noSender());
}
})
.whenComplete((result, error) -> handleOptionalTransformationException(signal, error, sender))
.thenCompose(transformed -> enforceSignalAndForwardToTargetActor((S) transformed, sender)
.handle((response, throwable) -> {
handleSignalEnforcementResponse(response, throwable, transformed, sender);
Expand Down

0 comments on commit 768acdf

Please sign in to comment.