diff options
2 files changed, 16 insertions, 4 deletions
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestLoggerService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestLoggerService.kt index 611c0855d..b1d8abd16 100644 --- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestLoggerService.kt +++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestLoggerService.kt @@ -29,6 +29,7 @@ import kotlinx.coroutines.reactor.ReactorContext import kotlinx.coroutines.reactor.asCoroutineContext import kotlinx.coroutines.withContext import org.apache.http.message.BasicHeader +import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants.ONAP_INVOCATION_ID import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants.ONAP_ORIGINATOR_ID @@ -107,8 +108,12 @@ class RestLoggerService { } } -/** Used in Rest controller API methods to populate MDC context to nested coroutines from reactor web filter context. */ +/** + * Used in Rest controller API methods to populate MDC context to nested coroutines from reactor web filter context. + * @param executionServiceInput (Optional) Used to override values populated in the MDC Context + */ suspend fun <T> mdcWebCoroutineScope( + executionServiceInput: ExecutionServiceInput? = null, block: suspend CoroutineScope.() -> T ) = coroutineScope { val reactorContext = this.coroutineContext[ReactorContext] @@ -118,12 +123,20 @@ suspend fun <T> mdcWebCoroutineScope( !reactorContext.context.isEmpty && reactorContext.context.hasKey(MDCContext) ) { - val mdcContext = reactorContext.context.get<MDCContext>(MDCContext) + val mdcContext = if (executionServiceInput != null) { + // MDC Context with overridden request ID + MDC.put("RequestID", executionServiceInput.commonHeader.requestId) + MDCContext(MDC.getCopyOfContextMap()) + } else { + // Default MDC Context + reactorContext.context.get(MDCContext) + } if (mdcContext != null) newCoroutineContext(this.coroutineContext + reactorContext + mdcContext) else newCoroutineContext(this.coroutineContext + reactorContext) } else this.coroutineContext + // Execute the block with new and old context withContext(newContext) { block() diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt index bb7ecc6ad..9e0a7ee71 100644 --- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt +++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt @@ -91,8 +91,7 @@ open class ExecutionServiceController { suspend fun process( @ApiParam(value = "ExecutionServiceInput payload.", required = true) @RequestBody executionServiceInput: ExecutionServiceInput - ): ResponseEntity<ExecutionServiceOutput> = mdcWebCoroutineScope { - + ): ResponseEntity<ExecutionServiceOutput> = mdcWebCoroutineScope(executionServiceInput) { if (executionServiceInput.actionIdentifiers.mode == ACTION_MODE_ASYNC) { throw httpProcessorException( ErrorCatalogCodes.GENERIC_FAILURE, |