Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

#

Issue

Notes 

Decision

1Which operation(s) need support for multiple cm handles?
  1. Get
  2. Create
  3. Update (Put)
  4. Patch
  5. Delete

if many what is the priority?

agreed with kieran mccarthy 

Only Get (read)

(in future other operations might be support batch option too)

2

Which datasources should be supported?

Do we need to support passthrough-only no-cached() data only ?
(maybe just start with that, support cached data bulk request later)

agreed with kieran mccarthy :

all passthrough datastores will be supported

Not implemented (yet) response, for non passthrough datastores 

3URL  pattern for NCMP bulk endpoints

Existing : /v1/ch/{cm-handle}/data/ds/{datastore-name}

CPS Proposed : /v1/batch/data/ds/{datastore-name}

      ( include cm handles into payload / body and leave datastore into url)

-----------------------------------------------------------------------------------------------------------------------

Meeting : kafka message schema & batch interface extension

POST http://localhost:8080/ncmp/v1/batch&topic=my-topic-name

{
              operations: [
                             {
                                           operation: read,
                                           datastore: "...",
                                           options: "...",
                                           resourceIdentifier: "...",
                                           cmhandleIds: [4, 6]
                             },
                             {
                                           operation: read,
                                           datastore: "...",
                                           options: "...",
                                           resourceIdentifier: "...",
                                           cmhandleIds: [1, 2, 3]
                             }
              ]
}


agreed with kieran mccarthy : Follow the existing interfaces as much as possible for consistency and efficiency

------------------------------------------------------------------------------------------------------------

4keep datastore, topic and optional parameters in the URL itself instead into body.

CPS prefers keep interface similar as single cm handle interface (consistency and cost)

Existing : ...&topic=topicParamInQuery

agreed with kieran mccarthy : Follow the existing interfaces as much as possible for consistency and efficiency

5

support in ONAP DMI-plugin


agreed with Toine Siebelink : ONAP plugin can respond with not implemented yet code,

6

Response always Async ie. topic is compulsory ?

Assume topic is compulsory (defined in OPenApi) → Response therefore wil be 400 if not supplied

Agreed with kieran mccarthy :

Topic is optional but system will respond with 'Not implemented (yet when not specified or blank

7Should NCMP Amalgamate Async responses from DMI-Plugin before forwarding ?step 6 in flow diagram

Agreed with kieran mccarthy : NCMP wil only forward to client topic no handling tracking or any responses or status of request

8Handle non responding dmi-plugin

Agreed with kieran mccarthy :
No response for 4b then send an error response to the topic given by client

9Should (can) NCMP check if 'MyTopic' specified by client existConsider Access Control too. For now NCMP can log error. Client is responsible for topic setup

Agreed with kieran mccarthy :
NCMP can log error when forward to 'client topic' Security not in scope (yet)

10How to handle non-existing CM-Handles (id)

Suggestions

  1. Silently ignore
  2. (initial) error response
    1. should we combine all errors in one message?

Agreed with kieran mccarthy :

Additional error (messages) response with all cm-handles that cannot be resolved, also a separate error message wil be sent for each failed DMI

11

Overlap/clash with Deutsche Telekom user story:

Jira
serverONAP Jira
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-1377
?!


discussed in weekly ONAP meeting the DT user story is affect CPS-Core interface (not NCMP) and the requirement is to execute a query over ALL cm-handles (cached  only?!) instead of a given list of cm-handles (~anchors)

12

Schema of bulk response


Jira
serverONAP Jira
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-1556

1) Agreement required on the structure of the response.  Please see response structure below.
2) Does 'eventTime' field which holds the timestamp of the bulk response event,  required or can it be dropped?


Code Block
titleSchema of bulk response
collapsetrue
{
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "$id": "urn:cps:org.onap.cps.ncmp.events.v1:dmi-async-bulk-response-event-schema:v1",
  "$ref": "#/definitions/DmiAsyncBulkResponseEvent",
  "definitions": {
    "DmiAsyncBulkResponseEvent": {
      "description": "The payload for bulk response event.",
      "type": "object",
      "properties": {
        "eventId": {
          "description": "The unique id identifying the event generated by DMI for this bulk response event.",
          "type": "string"
        },
        "eventCorrelationId": {
          "description": "The request id passed by NCMP for this bulk response event.",
          "type": "string"
        },
        "eventTime": {
          "description": "The time of bulk response event. The expected format is 'yyyy-MM-dd'T'HH:mm:ss.SSSZ'.",
          "type": "string"
        },
        "eventType": {
          "description": "The type of bulk response event.",
          "type": "string"
        },
        "eventSchema": {
          "description": "The event schema for bulk response event.",
          "type": "string"
        },
        "eventSchemaVersionschemaVersion": {
          "description": "The event schema version for bulk response event.",
          "type": "string"
        },
        "event": {
        "$ref": "#/definitions/Event"
        }
      },
      "required": [
        "eventId",
        "eventCorrelationId",
        "eventType",
        "eventSchema",
        "eventSchemaVersion"
      ]
    },
    "Event": {
      "description": "The bulk response event content.",
      "type": "object",
      "existingJavaType": "java.lang.Object"
    }
  }
}


Code Block
titleSample bulk response
collapsetrue
{
  "eventId": "4cb32729-85e3-44d1-aa6e-c923b9b059a5",
  "eventCorrelationId": "68f15800-8ed4-4bae-9e53-27a9e03e1911",
  "eventTime": "2023-03-28T14:29:23.876+0000",
  "eventType": "org.onap.cps.ncmp.event.model.BulkResponseEvent",
  "eventSchema": "urn:cps:org.onap.cps.ncmp.event.model.BulkResponseEvent",
  "eventSchemaVersion": "v1",
  "event": {
    "payload": "response of batch cm handles"
  }
}


Schema structure following #15 in Issues & Decisions section which is  agreed on  

13

Schema for Bulk Response event forwarding to client specified  topic

CPS-1557 - NCMP : forward bulk response messages to client topic

Not keeping the 'eventTarget' which comes from the (BulkResponseEvent(In progress of the structure agreement)).

Note:  Will consider  'eventTarget', If it finalized the schema from

Jira
serverONAP Jira
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-1556

Code Block
titleSchema of bulk response
collapsetrue
{
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "$id": "urn:cps:org.onap.cps.ncmp.events.v1:ncmp-async-bulk-response-event-schema:v1",
  "$ref": "#/definitions/NcmpAsyncBulkResponseEvent",
  "definitions": {
    "NcmpAsyncBulkResponseEvent": {
      "description": "The payload for bulk response event.",
      "type": "object",
      "properties": {
        "eventId": {
          "description": "The unique id identifying the event generated by DMI for this bulk response event.",
          "type": "string"
        },
        "eventCorrelationId": {
          "description": "The request id passed by NCMP for this bulk response event.",
          "type": "string"
        },
        "eventTime": {
          "description": "The time of bulk response event. The expected format is 'yyyy-MM-dd'T'HH:mm:ss.SSSZ'.",
          "type": "string"
        },
        "eventType": {
          "description": "The type of bulk response event.",
          "type": "string"
        },
        "eventSchema": {
          "description": "The event schema for bulk response event.",
          "type": "string"
        },
        "eventSchemaVersion": {
          "description": "The event schema version for bulk response event.",
          "type": "string"
        },
        "event": {
        "$ref": "#/definitions/Event"
        }
      },
      "required": [
        "eventId",
        "eventCorrelationId",
        "eventType",
        "eventSchema",
        "eventSchemaVersion"
      ]
    },
    "Event": {
      "description": "The bulk response event content.",
      "type": "object",
      "existingJavaType": "java.lang.Object"
    }
  }
}



Code Block
titleSample bulk response
collapsetrue
{
  "eventId": "4cb32729-85e3-44d1-aa6e-c923b9b059a5",
  "eventCorrelationId": "68f15800-8ed4-4bae-9e53-27a9e03e1911",
  "eventTime": "2023-03-28T14:29:23.876+0000",
  "eventType": "org.onap.cps.ncmp.event.model.AysncBulkResponseEvent",
  "eventSchema": "urn:cps:org.onap.cps.ncmp.event.model.AysncBulkResponseEvent",
  "eventSchemaVersion": "v1",
  "event": {
    "payload": "response of batch cm handles"
  }
}


Agreed on to keep one schema for both events (DMI → NCMP) and (NCMP → ClientApps)

14

How NCMP would forward response? (Response data : ref.  message flow #6)

Jira
serverONAP Jira
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-1556

    1. Do we need to send only one response containing all the requested cm handles ?
    2. Send single response for each cm handle?
    3. Single response message per DMI plugin?

kieran mccarthy - Please share your inputs on the above listed questions.


15Message format for the batch interface


Batch interface message events structure

kafka Headers

Field 
Type
Description
M=Mandatory, O=Optional   
Notes
    Decision        
eventId
stringThe unique id identifying the event

M

Generated by DMI-PluginAgreed with kieran mccarthy 
eventCorrelationId
stringThe request id passed by NCMP

M

It's requestId that NCMP sent to client as an ACK.

Example : “request-1234" (UUID)


Agreed with kieran mccarthy

eventTime
stringThe timestamp when original event occurred

O

Example of Internet date/time format.

      1985-04-12T23:20:50.52Z

   This represents 20 minutes and 50.52 seconds after the 23rd hour of

   April 12th, 1985 in UTC.


Agreed with kieran mccarthy

The timestamp should follow that on https://www.rfc-editor.org/rfc/rfc3339#section-5.

This follows ISO 8601 and is what is used/referenced in 3GPP standards
eventTarget
stringThe destination topic of the client

M

Example : my-topicAgreed with kieran mccarthy
eventSource
stringThe source of the event

O

Example : dmi-plugin:enm-1 (dmi service name)Agreed with kieran mccarthy
eventType
stringThe type of the event

M

  • NCMP would own eventType that would be used by dmi-plugin 

Example :

  • In case of NCMP (Defined and owned)
    • "org.onap.cps.ncmp.event.model.BatchXXXEvent"
  • In case of DMI-plugin (Use NCMP defined event type)
    • "org.onap.cps.ncmp.event.model.BatchXXXEvent"

kieran mccarthy Please confirm following : 

event type proposed name :

BatchDataXXXEvent ?

For example :

BatchDataRequestEvent  BatchDataResponseEvent 

eventSchema
stringThe schema of the Batch event payload.

M

  • NCMP would own eventSchema that would be used by dmi-plugin 

Example :

  • In case of NCMP (Defined and owned)
    • "urn:cps:org.onap.cps.ncmp.event.model.BatchEvent:v1“
  • In case of DMI-plugin (Use NCMP defined event type)
    • "urn:cps:org.onap.cps.ncmp.event.model.BatchEvent:v1“

kieran mccarthy need your confirmation for below :


In the current code we are are using like below :

Can we use the same event naming pattern into value for consistency as all the other event schema follows the same ?

'urn:cps:org.onap.cps.ncmp.events.async:batch-event-schema:1.0.0'. instead of "urn:cps:org.onap.cps.ncmp.event.model.BatchEvent:v1“

schemaVersion
stringThe schema version of the Batch event payload.

M

For example a version might be 1.0.0 (without “v”)


On versioning O-RAN follows https://semver.org.

kieran mccarthy Field name should be "eventSchemaVersion"  for consistency as all the other event uses this name only?

Event Payload

event
EventThe payload of an event

M


Agreed with kieran mccarthy
event.response-code
StringThe received status code of the response

M

common ncmp NCMP definned error codes:

  • response-code 0-99 is reserved for any
succeess message
  • succeess 
  • response-code from 100 to 199 is reserved for any failure

Agreed with kieran mccarthy

response-coderesponse-messageevent.dataevent.error
1Success messageNon emptynull
100Error messagenullNon empty


event.response-message
String

M

Example : 

  • In case of success :
    • response-code : 1
    • response-message : Success message
  • In case of failure :
    • response-code : 100
    • response-message : Error message
event.data
arrayThe data payload

O


Agreed with kieran mccarthy

NCMP will not amalgamate any data

event.data.id
Stringcmhandle-id

M

Example : "2"Agreed with kieran mccarthy
event.data.operationId
Stringspecified to distinguish multiple operations using same cmhandleId

M

Example : "12"

Agreed with kieran mccarthy

NCMP wil not check uniqueness of 'operationId'

event.data.data
object

O

  • optional - probably only required in case of "read" operations.
  • APPLICATION/YANG-PATCH+JSON # create, update, delete, multiwrite operations won't have return data (to verify)

Agreed with kieran mccarthy

NCMP will not amalgamate any data

evenr.errorobject

O


Agreed with kieran mccarthy
event.error.operations
array

M


Agreed with kieran mccarthy
event.error.operations.operationId
String

M

mandatory - specified to distinguish multiple operations using same cmhandleId

Agreed with kieran mccarthy

NCMP wil not check uniqueness of 'operationId'

event.error.operations.ids
arraycmhandle-ids

M

Example : ["cm-1",...,"cm-n"]Agreed with kieran mccarthy


16NCMP wil send only one request to each DMI


Code Block
languagebash
titleNCMP batch endpoint
collapsetrue
curl --location 'http://localhost:8080/ncmp/v1/batch?include-descendants=true&topic=my-topic-name' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' \
--data '{
    "operations": [
        {
            "operation": "read",
            "operationId": "12",
            "datastore": "ncmp-datastore:passthrough-operational",
            "options": "(fields=schemas/schema)",
            "resourceIdentifier": "parent/child",
            "cmHandleIds": [
                "da310eecdb8d44c2acc0ddaae01174b1"
            ]
        },
        {
            "operation": "read",
            "operationId": "14",
            "datastore": "ncmp-datastore:passthrough-running",
            "resourceIdentifier": "parent/child",
            "cmHandleIds": [
                "c748c58f8e0b438f9fd1f28370b17d47"
            ]
        }
    ]
}'


Code Block
languagebash
titleNCMP batch endpoint
collapsetrue
curl --location 'http://172.26.202.25:8783/dmi/v1/batch?topic=my-topic-name&requestId=e6fa4d26-4dc1-4877-aa3c-45e99f840708' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' \
--data '[
    {
        "operationType": "read",
        "operationId": "12",
        "datastore": "ncmp-datastore:passthrough-operational",
        "options": "(fields=schemas/schema)",
        "resourceIdentifier": "parent/child",
        "cmHandleProperties": {
            "da310eecdb8d44c2acc0ddaae01174b1": {
                "neType": "RadioNode"
            }
        }
    },
    {
        "operationType": "read",
        "operationId": "14",
        "datastore": "ncmp-datastore:passthrough-running",
        "resourceIdentifier": "parent/child",
        "cmHandleProperties": {
            "c748c58f8e0b438f9fd1f28370b17d47": {
                "neType": "RadioNode"
            }
        }
    }
]'


Agreed with Csaba Kocsis  and kieran mccarthy

requestId would be send as a path param from NCMP to DMI-plugin.


Example 

NCMP batch endpoint : http://localhost:8080/ncmp/v1/batch?include-descendants=true&topic=my-topic-name

DMI-Plugin batch endpoint : http://172.26.202.25:8783/dmi/v1/batch?topic=my-topic-name&requestId=e6fa4d26-4dc1-4877-aa3c-45e99f840708

...