Objective
As of current implementation in cps core, after the update operation, entire configuration is sent as Kafka Notification. we are proposing to send only changed configuration as delta report in notification. It will help to understand what configuration exactly changed for the anchor.
Issues & Decisions
# | Issue | Notes | Decision |
---|---|---|---|
1 | Do we need to update existing update notification to send delta notification or delta notification along with existing notification. | 29-Sep-2023: We decided to implement delta notification separately without changing the existing update notification. | |
2 | Using Liquibase v. Yang Model for storing new metadata per anchor in CPS Core | Needs discussions with architects | |
3 | generic text field OK for future refinement, maybe consider json? |
Event Schema
proposal for notification schema:
Cloud event Definition
Element | Name | Parent | Type | Mandatory | Description | Format | (example) Value | |
---|---|---|---|---|---|---|---|---|
1 | Header | id | String | Yes | random id for cloud event header. UUID is suggested | |||
2 | source | String | Yes | source of information | fixed value | urn:cps:org.onap.cps | ||
3 | specversion | String | Yes | cloud event version spec | fixed value | 1.0 | ||
4 | type | String | Yes | type of event | fixed value | dataUpdateEvent | ||
5 | dataschema | String | Yes | data schema | fixed value | cps:org.onap.cps:data-updated-event-schema:1.0.0 | ||
6 | Payload | data | Object | Yes | The actual data payload. Details will be provided below. | |||
7 | observedTimestamp | data | String | Yes | The timespamp of the event. | timestamp | 2024-01-17 12:34:43 | |
8 | dataspaceName | data | String | Yes | The dataspace name where data is changed. | dataspace01 | ||
9 | schemaSetName | data | String | No | The schemaset name for which data is changed. | bookstore | ||
10 | anchorName | data | String | Yes | The anchor name for which data is changed. | anchor01 | ||
11 | operation | data | String | Yes | The operation performed on data. | CREATE UPDATE DELETE | ||
12 | xpath | data | String | Yes | The XPath which is changed | /bookstore |
Controlling Notification
It is important to control the delta notification for better performance. we need to decide on below options to control delta notification.
Option | Pros and Cons | Decision |
---|---|---|
Send delta notification for the update operation when update request contains optional query parameter to receive notification. | Pros:
Cons:
| |
Configure dataspace/anchor in yaml file to allow delta notification. | Pros:
Cons:
| |
while creating dataspace/anchor, configure to send delta notification. | Pros:
Cons:
| We decided to try this approach. detailed implementation provided below. |
Implementation of controlling delta notification
Delta notification can be enabled/disabled by an additional admin API for a given anchor name. By default, delta notification will be disabled for all dataspaces.
New API will be added as below.
API : PUT https://IP:PORT/cps/api/v2/dataspace/<dataspace-name>/deltanotification/<subscribe or unsubscribe>
To Persist the information about delta notification there are two approached proposed as below for consideration.
- Persist delta notification information in additional field of dataspace table.
Additional field will be added to Anchor table to persist delta notification subscription. newly added field details are as below.
Updated Table | Dataspace |
new field name | notification |
type | text |
example | true (string). change later. |
2. Add schema for notification subscription and add subscription information in to Fragment table when delta notification is subscribed. delete the fragment when delta notification is unsubscribed.
below actions will be performed when delta notification will be subscribed for the dataspace.
- schema set will be added to the dataspace when notification is subscribed.
- An Anchor will be added to dataspace for notification subscription.
- Subscription data will be added into fragment as per schema set.
schema yaml file to be used as below.
Implementation details of delta notification
- For data nodes update operation, generate delta report by comparing previous and current configuration after successful update.
- Process data update delta event and send notification as described in event schema above.