From: sourabh_sourabh Date: Fri, 18 Aug 2023 09:56:42 +0000 (+0100) Subject: Modify data operation schema to accommodate additional information X-Git-Tag: 3.3.6~11 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=cps.git;a=commitdiff_plain;h=353bf28536072729a40af18f5b03ddc0f102e8e7 Modify data operation schema to accommodate additional information - Code is modify to add resourceIdentifier and option to data operation kafka response for status code 100, 101, 102 and 103. Issue-ID: CPS-1837 Signed-off-by: sourabh_sourabh Change-Id: I1f7870d9d373f69de03240700b9d74be46fbfb6c Signed-off-by: sourabh_sourabh --- diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java index 02de9854e..ba6f89192 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java @@ -261,22 +261,22 @@ public class DmiDataOperations extends DmiOperations { final String topicName = dataOperationResourceUrlParameters.get("topic").get(0); final String requestId = dataOperationResourceUrlParameters.get("requestId").get(0); - final MultiValueMap>> - cmHandleIdsPerResponseCodesPerOperationId = new LinkedMultiValueMap<>(); + final MultiValueMap>> + cmHandleIdsPerResponseCodesPerOperation = new LinkedMultiValueMap<>(); dmiDataOperationRequestBodies.forEach(dmiDataOperationRequestBody -> { final List cmHandleIds = dmiDataOperationRequestBody.getCmHandles().stream() .map(CmHandle::getId).collect(Collectors.toList()); if (throwable.getCause() instanceof HttpClientRequestException) { - cmHandleIdsPerResponseCodesPerOperationId.add(dmiDataOperationRequestBody.getOperationId(), + cmHandleIdsPerResponseCodesPerOperation.add(dmiDataOperationRequestBody, Map.of(NcmpEventResponseCode.UNABLE_TO_READ_RESOURCE_DATA, cmHandleIds)); } else { - cmHandleIdsPerResponseCodesPerOperationId.add(dmiDataOperationRequestBody.getOperationId(), + cmHandleIdsPerResponseCodesPerOperation.add(dmiDataOperationRequestBody, Map.of(NcmpEventResponseCode.DMI_SERVICE_NOT_RESPONDING, cmHandleIds)); } }); ResourceDataOperationRequestUtils.publishErrorMessageToClientTopic(topicName, requestId, - cmHandleIdsPerResponseCodesPerOperationId); + cmHandleIdsPerResponseCodesPerOperation); } } } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/DataOperationEventCreator.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/DataOperationEventCreator.java index 2d9a51b84..65cda9478 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/DataOperationEventCreator.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/DataOperationEventCreator.java @@ -30,6 +30,7 @@ import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.NcmpEventResponseCode; import org.onap.cps.ncmp.api.impl.events.NcmpCloudEventBuilder; +import org.onap.cps.ncmp.api.impl.operations.DmiDataOperation; import org.onap.cps.ncmp.events.async1_0_0.Data; import org.onap.cps.ncmp.events.async1_0_0.DataOperationEvent; import org.onap.cps.ncmp.events.async1_0_0.Response; @@ -44,49 +45,48 @@ public class DataOperationEventCreator { * * @param clientTopic topic the client wants to use for responses * @param requestId unique identifier per request - * @param cmHandleIdsPerResponseCodesPerOperationId map of cm handles per operation response per response code + * @param cmHandleIdsPerResponseCodesPerOperation map of cm handles per operation response per response code * @return Cloud Event */ public static CloudEvent createDataOperationEvent(final String clientTopic, final String requestId, - final MultiValueMap>> - cmHandleIdsPerResponseCodesPerOperationId) { + cmHandleIdsPerResponseCodesPerOperation) { final DataOperationEvent dataOperationEvent = new DataOperationEvent(); - final Data data = createPayloadFromDataOperationResponses(cmHandleIdsPerResponseCodesPerOperationId); + final Data data = createPayloadFromDataOperationResponses(cmHandleIdsPerResponseCodesPerOperation); dataOperationEvent.setData(data); final Map extensions = createDataOperationExtensions(requestId, clientTopic); return NcmpCloudEventBuilder.builder().type(DataOperationEvent.class.getName()) .event(dataOperationEvent).extensions(extensions).setCloudEvent().build(); } - private static Data createPayloadFromDataOperationResponses(final MultiValueMap>> cmHandleIdsPerOperationIdPerResponseCode) { + private static Data createPayloadFromDataOperationResponses(final MultiValueMap>> cmHandleIdsPerResponseCodesPerOperation) { final Data data = new Data(); final List responses = new ArrayList<>(); - cmHandleIdsPerOperationIdPerResponseCode.entrySet().forEach(cmHandleIdsPerOperationIdPerResponseCodeEntries -> - cmHandleIdsPerOperationIdPerResponseCodeEntries.getValue().forEach(cmHandleIdsPerResponseCodeEntries -> + cmHandleIdsPerResponseCodesPerOperation.forEach((dmiDataOperation, cmHandleIdsPerResponseCodes) -> + cmHandleIdsPerResponseCodes.forEach(cmHandleIdsPerResponseCodeEntries -> responses.addAll(createResponseFromDataOperationResponses( - cmHandleIdsPerOperationIdPerResponseCodeEntries.getKey(), - cmHandleIdsPerResponseCodeEntries) - ))); + dmiDataOperation, cmHandleIdsPerResponseCodeEntries)))); data.setResponses(responses); return data; } private static List createResponseFromDataOperationResponses( - final String operationId, + final DmiDataOperation dmiDataOperation, final Map> cmHandleIdsPerResponseCodeEntries) { final List responses = new ArrayList<>(); - cmHandleIdsPerResponseCodeEntries.entrySet() - .forEach(cmHandleIdsPerResponseCodeEntry -> { - final Response response = new Response(); - response.setOperationId(operationId); - response.setStatusCode(cmHandleIdsPerResponseCodeEntry.getKey().getStatusCode()); - response.setStatusMessage(cmHandleIdsPerResponseCodeEntry.getKey().getStatusMessage()); - response.setIds(cmHandleIdsPerResponseCodeEntry.getValue()); - responses.add(response); - }); + cmHandleIdsPerResponseCodeEntries.forEach((ncmpEventResponseCode, cmHandleIds) -> { + final Response response = new Response(); + response.setOperationId(dmiDataOperation.getOperationId()); + response.setStatusCode(ncmpEventResponseCode.getStatusCode()); + response.setStatusMessage(ncmpEventResponseCode.getStatusMessage()); + response.setIds(cmHandleIds); + response.setResourceIdentifier(dmiDataOperation.getResourceIdentifier()); + response.setOptions(dmiDataOperation.getOptions()); + responses.add(response); + }); return responses; } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtils.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtils.java index d8fb904f2..c455337ac 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtils.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtils.java @@ -68,8 +68,8 @@ public class ResourceDataOperationRequestUtils { final Collection yangModelCmHandles) { final Map> dmiDataOperationsOutPerDmiServiceName = new HashMap<>(); - final MultiValueMap>> cmHandleIdsPerResponseCodesPerOperationId - = new LinkedMultiValueMap<>(); + final MultiValueMap>> cmHandleIdsPerResponseCodesPerOperation = new LinkedMultiValueMap<>(); final Set nonReadyCmHandleIdsLookup = filterAndGetNonReadyCmHandleIds(yangModelCmHandles); final Map>> dmiPropertiesPerCmHandleIdPerServiceName = @@ -100,15 +100,15 @@ public class ResourceDataOperationRequestUtils { } } } - populateCmHandleIdsPerOperationIdPerResponseCode(cmHandleIdsPerResponseCodesPerOperationId, - dataOperationDefinitionIn.getOperationId(), NcmpEventResponseCode.CM_HANDLES_NOT_FOUND, - nonExistingCmHandleIds); - populateCmHandleIdsPerOperationIdPerResponseCode(cmHandleIdsPerResponseCodesPerOperationId, - dataOperationDefinitionIn.getOperationId(), NcmpEventResponseCode.CM_HANDLES_NOT_READY, - nonReadyCmHandleIds); + populateCmHandleIdsPerOperationIdPerResponseCode(cmHandleIdsPerResponseCodesPerOperation, + DmiDataOperation.buildDmiDataOperationRequestBodyWithoutCmHandles(dataOperationDefinitionIn), + NcmpEventResponseCode.CM_HANDLES_NOT_FOUND, nonExistingCmHandleIds); + populateCmHandleIdsPerOperationIdPerResponseCode(cmHandleIdsPerResponseCodesPerOperation, + DmiDataOperation.buildDmiDataOperationRequestBodyWithoutCmHandles(dataOperationDefinitionIn), + NcmpEventResponseCode.CM_HANDLES_NOT_READY, nonReadyCmHandleIds); } - if (!cmHandleIdsPerResponseCodesPerOperationId.isEmpty()) { - publishErrorMessageToClientTopic(topicParamInQuery, requestId, cmHandleIdsPerResponseCodesPerOperationId); + if (!cmHandleIdsPerResponseCodesPerOperation.isEmpty()) { + publishErrorMessageToClientTopic(topicParamInQuery, requestId, cmHandleIdsPerResponseCodesPerOperation); } return dmiDataOperationsOutPerDmiServiceName; } @@ -118,16 +118,16 @@ public class ResourceDataOperationRequestUtils { * * @param clientTopic client given topic * @param requestId unique identifier per request - * @param cmHandleIdsPerResponseCodesPerOperationId list of cm handle ids per operation id with response code + * @param cmHandleIdsPerResponseCodesPerOperation list of cm handle ids per operation with response code */ @Async public static void publishErrorMessageToClientTopic(final String clientTopic, final String requestId, - final MultiValueMap>> - cmHandleIdsPerResponseCodesPerOperationId) { + cmHandleIdsPerResponseCodesPerOperation) { final CloudEvent dataOperationCloudEvent = DataOperationEventCreator.createDataOperationEvent(clientTopic, - requestId, cmHandleIdsPerResponseCodesPerOperationId); + requestId, cmHandleIdsPerResponseCodesPerOperation); final EventsPublisher eventsPublisher = CpsApplicationContext.getCpsBean(EventsPublisher.class); eventsPublisher.publishCloudEvent(clientTopic, requestId, dataOperationCloudEvent); } @@ -174,14 +174,14 @@ public class ResourceDataOperationRequestUtils { != CmHandleState.READY).map(YangModelCmHandle::getId).collect(Collectors.toSet()); } - private static void populateCmHandleIdsPerOperationIdPerResponseCode(final MultiValueMap>> cmHandleIdsPerResponseCodesPerOperationId, - final String operationId, + private static void populateCmHandleIdsPerOperationIdPerResponseCode(final MultiValueMap>> cmHandleIdsPerResponseCodesPerOperation, + final DmiDataOperation dmiDataOperation, final NcmpEventResponseCode ncmpEventResponseCode, final List cmHandleIds) { if (!cmHandleIds.isEmpty()) { - cmHandleIdsPerResponseCodesPerOperationId.add(operationId, Map.of(ncmpEventResponseCode, cmHandleIds)); + cmHandleIdsPerResponseCodesPerOperation.add(dmiDataOperation, Map.of(ncmpEventResponseCode, cmHandleIds)); } } } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtilsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtilsSpec.groovy index c86682406..38b2056d0 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtilsSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/data/operation/ResourceDataOperationRequestUtilsSpec.groovy @@ -110,9 +110,9 @@ class ResourceDataOperationRequestUtilsSpec extends MessagingBaseSpec { toTargetEvent(consumerRecordOut.value(), DataOperationEvent.class) and: 'data operation response event response size is 3' dataOperationResponseEvent.data.responses.size() == 3 - and: 'verify published response data as json string' - jsonObjectMapper.asJsonString(dataOperationResponseEvent.data.responses) - == '[{"operationId":"operational-14","ids":["unknown-cm-handle"],"statusCode":"100","statusMessage":"cm handle id(s) not found"},{"operationId":"operational-14","ids":["non-ready-cm handle"],"statusCode":"101","statusMessage":"cm handle(s) not ready"},{"operationId":"running-12","ids":["non-ready-cm handle"],"statusCode":"101","statusMessage":"cm handle(s) not ready"}]' + and: 'verify published data operation response as json string' + def dataOperationResponseEventJson = TestUtils.getResourceFileContent('dataOperationResponseEvent.json') + jsonObjectMapper.asJsonString(dataOperationResponseEvent.data.responses) == dataOperationResponseEventJson } static def getYangModelCmHandles() { @@ -126,7 +126,7 @@ class ResourceDataOperationRequestUtilsSpec extends MessagingBaseSpec { new YangModelCmHandle(id: 'ch3-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), new YangModelCmHandle(id: 'ch4-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), new YangModelCmHandle(id: 'ch7-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'non-ready-cm handle', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: advisedState) + new YangModelCmHandle(id: 'non-ready-cm-handle', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: advisedState) ] } } diff --git a/cps-ncmp-service/src/test/resources/dataOperationRequest.json b/cps-ncmp-service/src/test/resources/dataOperationRequest.json index d2e0d6489..f69b87631 100644 --- a/cps-ncmp-service/src/test/resources/dataOperationRequest.json +++ b/cps-ncmp-service/src/test/resources/dataOperationRequest.json @@ -10,18 +10,20 @@ "ch3-dmi2", "unknown-cm-handle", "ch6-dmi1", - "non-ready-cm handle" + "non-ready-cm-handle" ] }, { "operation": "read", "operationId": "running-12", "datastore": "ncmp-datastore:passthrough-running", + "options": "some option", + "resourceIdentifier": "some resource identifier", "targetIds": [ "ch1-dmi1", "ch7-dmi2", "ch2-dmi1", - "non-ready-cm handle" + "non-ready-cm-handle" ] }, { @@ -29,6 +31,7 @@ "operationId": "operational-15", "datastore": "ncmp-datastore:passthrough-operational", "options": "some option", + "resourceIdentifier": "some resource identifier", "targetIds": [ "ch4-dmi2", "ch6-dmi1" diff --git a/cps-ncmp-service/src/test/resources/dataOperationResponseEvent.json b/cps-ncmp-service/src/test/resources/dataOperationResponseEvent.json new file mode 100644 index 000000000..611d47d1a --- /dev/null +++ b/cps-ncmp-service/src/test/resources/dataOperationResponseEvent.json @@ -0,0 +1 @@ +[{"operationId":"operational-14","ids":["unknown-cm-handle"],"resourceIdentifier":"some resource identifier","options":"some option","statusCode":"100","statusMessage":"cm handle id(s) not found"},{"operationId":"operational-14","ids":["non-ready-cm-handle"],"resourceIdentifier":"some resource identifier","options":"some option","statusCode":"101","statusMessage":"cm handle(s) not ready"},{"operationId":"running-12","ids":["non-ready-cm-handle"],"resourceIdentifier":"some resource identifier","options":"some option","statusCode":"101","statusMessage":"cm handle(s) not ready"}] \ No newline at end of file