...
References
Jira Legacy | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
Open Issues & Decisions
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "eventId" : "9999", # some generic event uuid generated by DMI Plugin “eventCorrelationId” : “cmhandleId-001”, # cmhandleId used for event correlation "eventTime" : "2021-11-16T16:42:25-04:00", "eventSource" : "ncmp-datastore:passthrough-operational", # eventSource always specifies the datastore where the event is emanating from "eventType" : "org.onap.ncmp.cm-network-avc-event", # event type ”eventSchema” : “org.onap.ncmp:cm-network-avc-event.rfc8641", # event schema ”eventSchemaVersion” : “1.0", # event schema version "event": { "push-change-update" : { "datastore-changes" : { "ietf-yang-patch:yang-patch" : { "patch-id" : "34534ffd98", # Some unreadable patch id generated by the machine "edit" : [ { "edit-id" : "ded43434-1", "operation" : "create", "target" : "/_3gpp-common-managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrcelldu:NRCellDU=1", "value" : { "_3gpp-nr-nrm-nrcelldu:NRCellDU" : [ { "id" : 1, } ] } }, { "edit-id" : "ded43434-1-1", "operation" : "create", "target" : "/_3gpp-common-managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrcelldu:NRCellDU=1/attributes", "value" : { "attributes" : { "cId" : 511, "userLabel" : "some-cell-label", ... } } }, { "edit-id" : "ded43434-2", "operation" : "create", "target" : "/_3gpp-common-managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrcelldu:NRCellDU=1/attributes/pLMNIdList=35301", "value" : { "_3gpp-nr-nrm-nrcelldu:pLMNIdList" : [ { "mcc" : 353, "mnc" : "01", ... } } ] } }, { "edit-id" : "ded43434-3", "operation" : "merge", "target" : "/_3gpp-common-managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrcelldu:NRCellDU=3/attributes", "value" : { "attributes" : { "cId" : 412, "userLabel" : "yet-another-cell-label", ... } } }, { "edit-id" : "ded43434-4", "operation" : "delete", "target" : "/_3gpp-common-managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrcelldu:NRCellDU=4" } ] } } } } } |
CM AVC Event
...
Subscriptions
A client app may subscribe on change notification on different datastores. From a client app perspective each client subscription will be treated independently BUT internally the subscriptions will be merged and published on one or more collective CM topics based on target groups. The CM ALL target group is the default and ALL CM notifications are directed to the associated cm-events topic.
...
Subscription
...
The Create Subscription flow is as follows :
...
Steps
...
- NCMP is configured at startup with the cm subscription topic information (cm topic name, kafka addressing info).
Some app sends a 'CreateSubscription' event to the public cm subscription topic (cm-event-subscription).
Usecase Participants Schema Example Create Subscription client app → ncmp Protocol : Kafka Event
Topic : cm-avc-subscriptionCode Block language xml title Event Schema collapse true { "version": "<event type version>", "eventType": "subscriptionCreated", "event": { "subscription": { "clientID": "<unique identifier for the client >", "name": "<unique subscription name per client>", "isTagged": "<yes|no>, optional parameter, default is no" }, "dataType": { "dataspace": "<data space>", "dataCategory": "<data category type>", "dataProvider": "<data provider type>" "schemaName": "<schema name>" "schemaVersion": "<schema version>" }, "predicates": { "<parameter>": "<value>", "param2": [ "value21", "value22" ] } } }
Code Block language xml title Create Example collapse true { "version": "1.0", "eventType": "subscriptionCreated", "event": { "subscription": { "clientID": "SCO-9989752", "name": "cm-subscription-001" }, "dataType": { "dataspace": "ALL", "dataCategory": "CM", "dataProvider": "CM-SERVICE" "schemaName": "org.onap.ncmp:cm-network-avc-event.rfc8641" "schemaVersion": "1.0" }, "predicates": { "datastore": “passthrough-operational", "datastore-xpath-filter": "//_3gpp-nr-nrm-gnbdufunction:GNBDUFunction/ _3gpp-nr-nrm-nrcelldu:NRCellDU/ | //_3gpp-nr-nrm-gnbcuupfunction:GNBCUUPFunction// | //_3gpp-nr-nrm-gnbcucpfunction:GNBCUCPFunction/_3gpp-nr-nrm-nrcelldu:NRCellCU// | //_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier//” } } }
Table 1 : Create Subscription request from App
- NCMP receives consumes the create cm subscription event and processes it as follows :
- Persist the subscription and cm-subscription-filter information to db
- Read all CM handles that match the cm-filter-subscription (model matching, cmhandleId matching)
- If a subscription is already ongoing for the same cmhandle datastore then separate them from the list for later processing (after the existing ongoing cmhandle subscription has completed - See table 3 below, administrativeState : running->active).
Use the administrativeState of cmhandle 'subscriptions' as shown in table 3 below. This can be used to know if a cmhandle subscription update is ongoing. - Merge the existing cmhandle filter (if one exists from a previous subscription) with the new cm-filter-subscription
- Record the cmhandles whose existing cm subscription filter has been modified after filter merging in step c)
- For the cmhandle(s) with a new or modified subscription filter, group them according to their controlling dmi-plugin and send one or more bulk subscription request(s) to the appropriate dmi-plugin(s).
- Change the subscription administrativeState to 'updating' for the associated datastore. Do not modify the other subscription attributes (e.g. datastore-xpath-filter) until after successful response received from dmi.
- send the a bulk subscription REST request to each dmi-plugin containing either a 'create' (where no previous subscription exists on the cmhandle) or an 'update' subscription info for each cmhandle as per table 2 below
- the REST request to the dmi-plugin is asynchronous. The dmi-plugin shall process the each of the subscription requests per cmhandle and send an event response on the dmi-cm-avc-subscription-events topic for each cmhandle.
...
Usecase | participants | Request Schema / Example | NCMP Updates | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Notify of create subscription request success on passthrough-operational datastore -success case | dmi → ncmp | Protocol : Kafka Event
| NCMP register the new cmhandle subscription data. Store the datastore subscription data in the cmhandle. Also store the administrativeState that may be used to prevent race conditions between parallel subscriptions being applied.
Once NCMP receives the subscription response if shall update the cmhandle subscription state attributes as described in step 7. | ||||||||||||||||||
Notify of modify subscription request success on passthrough-operational datastore -success case | dmi → ncmp | Protocol : Kafka Event
|
Table 3. DMI plugin sends Subscription Response to NCMP
Create Subscription
Detailed flow Create Subscription
Queued Subscriptions
Any cmhandle subscription requests that were queued during an ongoing subscription request on the same datastore shall be processed once the previous subscription has completed (cmhandle.subscriptions.<datastore>.administrativeState goes to active).
The cmhandle subscription filters will need to be re-merged with the newly registered cmhandle subscription filters before being applied to the appropriate datastore.
Update Subscription
Update is quite similar to the create case above. The only difference is the eventType = subscriptionUpdated
...
See below Request example showing the update-delete example (in green bold)
Usecase | Participants | Request Schema | Request Example | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Register Subscriptions | ncmp → dmi | Protocol : REST
Response : 202 Accepted { } | Protocol : REST
Response : 202 Accepted { } |
CM AVC Subscription Response - delete dmi subscription case
Usecase | participants | Request Schema / Example | NCMP Updates | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Notify of delete subscription request success on passthrough-operational datastore -success case | dmi → ncmp | Protocol : Kafka Event
| NCMP register the new cmhandle subscription data. Store the datastore subscription data in the cmhandle. Also store the administrativeState that may be used to prevent race conditions between parallel subscriptions being applied.
Once NCMP receives the subscription response if shall update the cmhandle subscription state attributes as described in step 7. |
Topics
Topic types
Topic Name | Description | Direction |
---|---|---|
cm-avc[-<targetgroup>] | topic for publication of events from NCMP to clients (suggest to rename existing topic from 'ncmp-events' to cm-avc). In preparation to future needs the there may be separate topics for different security groups. NCMP solution should consider this in its design this upfront. By default cm-avc is the default topic where ALL events are published by default. Different client may subscribe to different topics (ALL and/or target group specific). It is their responsibility to subscribe to the appropriate topics as new target groups come into existance. For now the only topic in scope of this story is the 'cm-avc' topic. | ncmp → client consumer |
dmi-cm-events | internal topic for communications between dmi-plugin ↔ ncmp for avc and subscription events | ncmp→ dmi |
cm-avc-subscription | topic for avc event subscriptions. This topic may be (pre)defined external to NCMP. If externally defined topic then it shall be possible to tell NCMP the topic name and where to find it. | client → ncmp |
dmi-cm-avc-subscription | topic for avc event subscriptions event toward dmi plugin(s). This topic is internally defined by NCMP. All CM AVC subscriptions will be sent from NCMP to DMI plugins via this topic. | ncmp → dmi for subscription LCM dmi → ncmp register device subscription in cmhandle |
Topic partitioning
All events for the same cmhandleId should be sent to the same partition. This will guarantee ordering. Ordering is only guaranteed per topic, not across topic (future consideration).
DataBase Design
...
, Subscription and Filter Tables
The client subscriptions may be stored in a simple Subscriptions table.
...
CmHandle related tables in the DB will be updated to store the subscription state for the appropriate cmhandle datastores
Subscription Data
Data similar to the below needs to be reflected in the related cmhandle data model
...