From: Julien Fontaine Date: Wed, 10 Jun 2020 15:30:37 +0000 (-0400) Subject: Override Request ID in MDC Context X-Git-Tag: 1.4.0~38 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F31%2F129331%2F2;p=ccsdk%2Fcds.git Override Request ID in MDC Context Issue-ID: CCSDK-3676 Signed-off-by: kuldipr Change-Id: I6b0a816fcb40e149be1818f9edc9d4839f1a4cf6 --- 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 mdcWebCoroutineScope( + executionServiceInput: ExecutionServiceInput? = null, block: suspend CoroutineScope.() -> T ) = coroutineScope { val reactorContext = this.coroutineContext[ReactorContext] @@ -118,12 +123,20 @@ suspend fun mdcWebCoroutineScope( !reactorContext.context.isEmpty && reactorContext.context.hasKey(MDCContext) ) { - val mdcContext = reactorContext.context.get(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 = mdcWebCoroutineScope { - + ): ResponseEntity = mdcWebCoroutineScope(executionServiceInput) { if (executionServiceInput.actionIdentifiers.mode == ACTION_MODE_ASYNC) { throw httpProcessorException( ErrorCatalogCodes.GENERIC_FAILURE,