Skip to content

Commit

Permalink
Merge pull request #2091 from beyonnex-io/bugfix/wot-validation-inval…
Browse files Browse the repository at this point in the history
…id-path

fix wrongly calculated path in WoT validation errors
  • Loading branch information
thjaeckle authored Jan 15, 2025
2 parents d02b05f + e6b17d7 commit d3d7964
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,11 @@ protected CompletionStage<Signal<?>> performWotBasedSignalValidation(final Signa
)
.start();
return performWotBasedMessageCommandValidation(messageCommand.setDittoHeaders(
DittoHeaders.of(startedSpan.propagateContext(messageCommand.getDittoHeaders())))
).whenComplete((result, error) -> {
DittoHeaders.of(startedSpan.propagateContext(messageCommand.getDittoHeaders()))
.toBuilder()
.putHeader(DittoHeaderDefinition.ENTITY_ID.getKey(), entityId.toString())
.build()
)).whenComplete((result, error) -> {
if (error instanceof DittoRuntimeException dre) {
startedSpan.tagAsFailed(dre.toString());
} else if (null != error) {
Expand Down Expand Up @@ -239,6 +242,9 @@ protected CompletionStage<CommandResponse<?>> performWotBasedResponseValidation(
return performWotBasedMessageCommandResponseValidation(
messageCommandResponse.setDittoHeaders(
DittoHeaders.of(startedSpan.propagateContext(messageCommandResponse.getDittoHeaders()))
.toBuilder()
.putHeader(DittoHeaderDefinition.ENTITY_ID.getKey(), entityId.toString())
.build()
)
)
.whenComplete((result, error) -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public CompletionStage<Void> validateThing(@Nullable final ThingDefinition thing
return provideValidationConfigIfWotValidationEnabled(context)
.map(validationConfig -> fetchResolveAndValidateWith(thingDefinition, dittoHeaders, thingModel ->
doValidateThing(Optional.ofNullable(thingDefinition).orElseThrow(),
thingModel, thing, resourcePath, context, validationConfig
thingModel, thing, context, validationConfig
).handle(applyLogingErrorOnlyStrategy(validationConfig, context, "validateThing"))
))
.orElseGet(DefaultWotThingModelValidator::success);
Expand All @@ -109,7 +109,7 @@ public CompletionStage<Void> validateThing(final ThingDefinition thingDefinition
final ValidationContext context = buildValidationContext(dittoHeaders, thingDefinition);
return provideValidationConfigIfWotValidationEnabled(context)
.map(validationConfig ->
doValidateThing(thingDefinition, thingModel, thing, resourcePath, context, validationConfig)
doValidateThing(thingDefinition, thingModel, thing, context, validationConfig)
.handle(applyLogingErrorOnlyStrategy(validationConfig, context, "validateThing"))
)
.orElseGet(DefaultWotThingModelValidator::success);
Expand All @@ -126,9 +126,8 @@ public CompletionStage<Void> validateThingDefinitionModification(final ThingDefi
validationConfig.getThingValidationConfig().isEnforceThingDescriptionModification()
)
.map(validationConfig -> fetchResolveAndValidateWith(thingDefinition, dittoHeaders, thingModel ->
doValidateThing(thingDefinition, thingModel, thing, Thing.JsonFields.DEFINITION.getPointer(),
context, validationConfig
).handle(applyLogingErrorOnlyStrategy(validationConfig, context, "validateThingDefinitionModification"))
doValidateThing(thingDefinition, thingModel, thing, context, validationConfig)
.handle(applyLogingErrorOnlyStrategy(validationConfig, context, "validateThingDefinitionModification"))
))
.orElseGet(DefaultWotThingModelValidator::success);
}
Expand Down Expand Up @@ -608,14 +607,22 @@ private static void logValidationWarning(final boolean logAsWarning,
) {
final DittoHeaders dittoHeaders = context.dittoHeaders();
dittoHeaders.getCorrelationId().ifPresent(cId -> MDC.put("correlation-id", cId));
dittoHeaders.getTraceParent().ifPresent(traceParent -> MDC.put("traceparent-trace-id", traceParent));
// positions defined by https://www.w3.org/TR/trace-context/#traceparent-header-field-values to contain the "trace-id"
dittoHeaders.getTraceParent().ifPresent(traceParent -> {
MDC.put("traceparent-trace-id", traceParent.substring(3, 35));
MDC.put("traceparent-span-id", traceParent.substring(36, 52));
}
);
final LoggingEventBuilder logBuilder = logAsWarning ? log.atWarn() : log.atInfo();
logBuilder.log("WoT based validation of Thing <{}> in <{}()> failed for <TD {}>/<FD {}> due to: <{}>",
context.thingId(), loggingHintSource, context.thingDefinition(), context.featureDefinition(),
throwable.toString()
);
dittoHeaders.getCorrelationId().ifPresent(cId -> MDC.remove("correlation-id"));
dittoHeaders.getTraceParent().ifPresent(traceParent -> MDC.remove("traceparent-trace-id"));
dittoHeaders.getTraceParent().ifPresent(traceParent -> {
MDC.remove("traceparent-trace-id");
MDC.remove("traceparent-span-id");
});
}

private CompletionStage<Void> fetchResolveAndValidateWith(@Nullable final DefinitionIdentifier definitionIdentifier,
Expand All @@ -639,7 +646,6 @@ private CompletionStage<Void> fetchResolveAndValidateWith(final URL url,
private CompletionStage<Void> doValidateThing(final ThingDefinition thingDefinition,
final ThingModel thingModel,
final Thing thing,
final JsonPointer resourcePath,
final ValidationContext context,
final TmValidationConfig validationConfig
) {
Expand All @@ -653,7 +659,7 @@ private CompletionStage<Void> doValidateThing(final ThingDefinition thingDefinit
return firstStage.thenCompose(unused ->
doValidateThingAttributes(thingModel,
thing.getAttributes().orElse(null),
resourcePath.append(Thing.JsonFields.ATTRIBUTES.getPointer()),
Thing.JsonFields.ATTRIBUTES.getPointer(),
context,
validationConfig
)
Expand All @@ -662,7 +668,7 @@ private CompletionStage<Void> doValidateThing(final ThingDefinition thingDefinit
.thenCompose(subModels ->
doValidateFeatures(subModels,
thing.getFeatures().orElse(null),
resourcePath,
JsonPointer.empty(),
context,
validationConfig
)
Expand Down

0 comments on commit d3d7964

Please sign in to comment.