private static DittoRuntimeException getThingUnavailableException(final RetrieveThing command) { // reset command headers so that correlation-id etc. is preserved return ThingUnavailableException.newBuilder(command.getThingId()) .dittoHeaders(command.getDittoHeaders()) .build(); }
private static DittoRuntimeException getThingUnavailableException(final RetrieveThing command) { // reset command headers so that correlation-id etc. is preserved return ThingUnavailableException.newBuilder(command.getThingId()) .dittoHeaders(command.getDittoHeaders()) .build(); }
/** * Retrieve inlined policy after retrieving a thing. Do not report errors. * * @param retrieveThing the original command. * @param retrievePolicy the command to retrieve the thing's policy. * @return future response from policies-shard-region. */ private CompletionStage<Optional<RetrievePolicyResponse>> retrieveInlinedPolicyForThing( final RetrieveThing retrieveThing, final RetrievePolicy retrievePolicy) { return blockCachedNamespaces.apply(retrievePolicy) .thenCompose(msg -> PatternsCS.ask(policiesShardRegion, msg, getAskTimeout())) .handleAsync((response, error) -> { LOGGER.debug("Response of policiesShardRegion: <{}>", response); if (response instanceof RetrievePolicyResponse) { return Optional.of((RetrievePolicyResponse) response); } else if (error != null) { log(error).error(error, "retrieving inlined policy after RetrieveThing"); } else { log(response).info( "No authorized response when retrieving inlined policy <{}> for thing <{}>: {}", retrievePolicy.getId(), retrieveThing.getThingId(), response); } return Optional.empty(); }, getEnforcementExecutor()); }
/** * Retrieve a thing before retrieving its inlined policy. Report errors to sender. * * @param retrieveThing the command. * @param sender whom to report errors to. * @return future response from things-shard-region. */ private CompletionStage<Optional<RetrieveThingResponse>> retrieveThingBeforePolicy( final RetrieveThing retrieveThing, final ActorRef sender) { return PatternsCS.ask(thingsShardRegion, retrieveThing, getAskTimeout().toMillis()) .handleAsync((response, error) -> { if (response instanceof RetrieveThingResponse) { return Optional.of((RetrieveThingResponse) response); } else if (response instanceof ThingErrorResponse || response instanceof DittoRuntimeException) { replyToSender(response, sender); } else if (isAskTimeoutException(response, error)) { reportThingUnavailable(retrieveThing.getThingId(), retrieveThing.getDittoHeaders(), sender); } else { reportUnexpectedErrorOrResponse("retrieving thing before inlined policy", sender, response, error, retrieveThing.getDittoHeaders()); } return Optional.empty(); }, getEnforcementExecutor()); }
.schemaVersion(JsonSchemaVersion.V_1) .build(); final RetrieveThing retrieveThingV1 = RetrieveThing.getBuilder(retrieveThing.getThingId(), dittoHeaders) .withSelectedFields(jsonFieldSelectorBuilder.build()) .build(); final Policy policy = PoliciesAclMigrations.accessControlListToPolicyEntries(aclOptional.get(), retrieveThing.getThingId(), subjectIssuersForPolicyMigration); reportAggregatedThingAndPolicy(retrieveThing, retrieveThingResponse.setDittoHeaders(retrieveThing.getDittoHeaders()), replyToSender(withDittoHeaders.setDittoHeaders(retrieveThing.getDittoHeaders()), sender); } else if (isAskTimeoutException(response, error)) { reportThingUnavailable(retrieveThing.getThingId(), retrieveThing.getDittoHeaders(), sender); } else { reportUnexpectedErrorOrResponse("retrieving thing for ACL migration",