Versions Compared

Key

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

Table of Contents

References

...

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-1616

CM Data Notification Subscription LCM (incl. merge)

Impl. Proposal CM Event Subscription LCM: Create

Jira
serverONAP Jira
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-1776

Jira
serverONAP Jira
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-2251

Out-of-scope

  • Working with wildcards and subscription update which will be taken care by a separate epic.
  • Subscription create ( done as part of a different story ) 
  • Merging of the ongoing subscriptions.


Assumptions

The whole subscription event is deleted

#

Issue

Notes

Decisions

1Delete use case works for a valid ongoing subscription only.

2Works only for the passthrough datastores.


Issues & Decisions

#

Issue

Notes

Decisions

1

Delete the subscription from the database?

  • Subscription can be marked as deleted or removed from the database
  • When are they deleted from db?

     We plan to do it when we receive response from the DMI plugins and the underlying subscriptions from the devices are deleted.


    2What do we need to send to the DMI Plugin so that they are able to decide that how to delete the ongoing subscription.
    1. subscription name + client id
    2. + cmhandle ids?
    3. + cmhandle properties?
    4. + datastore?

    Overview

    PlantUML Macro
    aligncenter
    titleSubscription Delete
    @startuml "Subsciption Delete"
    
    participant EDM
    participant NCMP
    participant DMI_PLUGIN
    
    EDM -> NCMP: 1. Incoming subscriptionDelete event
    NCMP -> DMI_PLUGIN: 2. ncmp to forward event to dmi plugin
    DMI_PLUGIN -> DMI_PLUGIN: 3. Apply the requested event and respond with the status
    DMI_PLUGIN --> NCMP: 4. Status of the subscriptionDelete request whether accepted/rejected/pending
    NCMP -> NCMP: 5. If all accepted then only remove the subcription data from DB
    NCMP --> EDM: 6. Respond with the status that we received from dmi plugin
    
    
    
    @enduml

    EDM to NCMP

    Subscription Delete Event (Schema 1)

      We are sending cmHandle information and predicates information ( datastore , xpaths and cmHandle ) and private cmHandle properties.


    3Who should be able to retry and make sure the subscriptions are deleted from the respective DMIs managing the devices.

    kieran mccarthy  The agenda for the next meeting. We can decide then.

    More on the "DELETING" stage ( if we want to have it ) 

    kieran mccarthy As discussed on , The DME should be able to maintain Subscription State and make decision when to retry based on the response outcome we provide to it for create and/or delete use cases.


    4DME to NCMP Event to have targets and datastore-xpath-filter information for the subscription delete use case ?

    DME to only send the subscription id inorder to delete the request. NCMP will figure out the details corresponding to the provided subscription id and figure out what to request to DMI Plugin for deletion.

    kieran mccarthy  As per the discussion today   we agreed to use targets , datastore-xpath-filters and datastores for the subscription delete use case.

      Revised approach is mentioned in the Notes section.

    5Do we send additional properties from NCMP to DMI

      We are sending additional/private properties as of now.


    6Can the DMI Plugin REJECT the Cm Subscription Delete Request ?

    kieran mccarthy  Wanted to check if this is the VALID use case we have ?


    Algorithm for CM Subscription Delete



    PlantUML Macro
    titleCm Subscription Delete Algo
    @startuml
    'https://plantuml.com/activity-diagram-beta
    
    start
    : DME to send Cm Subscription Delete Request;
    : NCMP to extract out subscriptionId;
    : using subscriptionId , Query all the ONGOING ACTIVE Cm Subscriptions;
    : Populate details in Cm Notification Subscription Cache;
    if (all the Subscription predicates are part of other ongoing Subscriptions ) then (YES)
      : directly delete the subscriptionId from the ongoing subscribers list from DB;
      : mark the subscription delete request as ACCEPTED in the cache;
      : respond back to the client with ACCEPTED ;
    else (NO)
     : for all the 'last lights out' predicate information call the DMI Plugin;
     if (DMI Plugin accepts the delete request) then (YES)
        : using the information present in cmNotificationSubscriptionCache, delete the records from DB;
        : mark the subscription delete request as ACCEPTED in the cache;
        : respond back to the client with ACCEPTED;
     else (NO)
        : dont delete any records from DB;
        : mark the subscription delete request as REJECTED in the cache;
        : respond back to the client with REJECTED;
     endif
    endif
    : cleanup the cache;
    
    stop
    
    @enduml
    
    


    1. Capture Incoming subscriptionId from the client.
    2. Query the existing subscriptions we are tracking using the subscriptionId we got from the Cm Subscription Delete request.
    3. Populate the cmSubscriptionCache with the relevant details ( this will be later used to send the response and manage the subscription ) using the above query we did.
    4. Now check if the details we have are ALL the last subscribers or not.
      1. if all are NOT the last subscribers then we can right away delete it from the DB and send back the response to the client without sending any request to the DMI.
      2. if we have mixed records then we need to make a call to the DMI for the "last lights out" to get Acceptance from DMI 
    5. if DMI accepts it , then whatever we have in the cache can be used to DELETE the rows from the DB ( similar to what we did for create )
    6. Once the rows are deleted then we can send back the response to the client and clear up the cache ( for ACCEPTED/REJECTED )


    Subscription Delete Sequence Diagram


    PlantUML Macro
    aligncenter
    titleCmSubscription Delete Exclusive Usecase
    @startuml
    autonumber
    
    participant DME
    participant NCMP
    participant "CPS-DB"
    participant "DMI-PLUGIN"
    
    DME --> NCMP : 'Request to delete the CmSubscription using subscriptionId'
    NCMP --> NCMP : 'Check if the CmSubscription is fully shared or exclusive per DMI'
    NCMP --> "DMI-PLUGIN" : 'for exclusive CmSubscription(part of the subscription) notify the "DMI-PLUGIN"s to ACCEPT/REJECT the subscription'
    "DMI-PLUGIN" --> NCMP : 'Request ACCEPTED by "DMI-PLUGIN"'
    NCMP --> "CPS-DB" : 'Delete the CmSubscription from the database and update the cache with ACCEPTED'
    NCMP --> DME : 'Respond with the status as ACCEPTED'
    
    @enduml



    PlantUML Macro
    titleCmSubscription Delete Shared Usecase
    @startuml
    autonumber
    
    participant DME
    participant NCMP
    participant "CPS-DB"
    
    DME --> NCMP : 'Request to Delete the CmSubscription using subscriptionId'
    NCMP --> NCMP : 'Check if the CmSubscription is fully SHARED or EXCLUSIVE per DMI'
    NCMP --> NCMP : 'for SHARED CmSubscription dont notify the "DMI-PLUGIN"s'
    NCMP --> "CPS-DB" : 'Delete the CmSubscription from the database and update the cache with ACCEPTED'
    NCMP --> DME : 'Respond with the status as ACCEPTED'
    
    @enduml


    Schema Definitions

    ...

    1. DME to NCMP Cm Subscription Delete Request


      Name

      Parent

      Type

      Example

      Mandatory ?

      Notes

      1idheaderString
      Y
      2versionheaderString 1.0Y
      3

      source

      headerStringDMEY
      4

      type

      headerStringsubscriptionDeleteRequestY
      5

      dataschema

      headerURI
    1. org.onap.ncmp.cm.subscription:1.0.0Y
      6

      data


      Object
      Y

    ...


    1. 7

    ...

    1. subscriptionId

    ...

    1. data

    ...

    1. String
    1. cm-subscription-001

    ...

    }
     
    "javaType": "org.onap.cps.ncmp.events.avcsubscription1_0_0.client_to_ncmp"

    // Show input and output schema

    // Any logic if we want to discuss and make decision

    NCMP to DMI-Plugins

    Image Removed
    Input Schema (Schema 3) - Produced by NCMP and Consumed by DMI Plugins

    ...

    1. Y
      8

      predicates

      dataObject
      N


      Example

      Code Block
      titleDME to NCMP Cm Subscription Delete Request
      linenumberstrue
      collapsetrue
      id : random-UUID
      version : "1.0"
      source : "DME"
      type : "subscriptionDeleteRequest",
      dataschema : org.onap.ncmp.cm.subscription:1.0.0  {
        "data": {
          "subscriptionId": "unique subscription id" // mandatory
      }



    2. NCMP to DMI-Plugin Subscription Request


      Name

      Parent

      Type

      Example

      Mandatory ?

      Notes

      1idheaderString
      Y
      2versionheaderString 1.0Y
      3

      source

      headerStringNCMPY
      4

      type

      headerStringsubscriptionDeleteRequestY
      5

      dataschema

      headerURI

    DMI-Plugins to NCMP

    ...

    1. org.onap.ncmp.dmi.cm.subscription:1.0.0Y
      6

      correlationid

      headerStringsubscriptionId#dmiPluginNameYConcatenation of subscriptionId and dmi plugin name
      7

      data

    ...


    1. Object
      Y
      8

      cmHandles

      dataArray
      Y
      9

      cmhandleId

      cmHandlesString
      Y
      10

      privateProperties

      cmHandlesMap
      N
      11

      predicates

      dataArray
      N
      12

      targetFilter

      predicatesArray of String
      Ylist of cm handle ids
      13

      scopeFilter

      predicatesObject
      N
      14

      datastore

      scopeFilterString
      Yncmp-datastore:passthrough-operational OR ncmp-datastore:passthrough-running 
      15

      xpathFilter

      scopeFilterArray of String
      Y


      Example

      Code Block
      titleNCMP to DMI-Plugin Subscription Request
      linenumberstrue
      collapsetrue
      id : random UUID
      version : 1.0
      source : "NCMP"
      type : "subscriptionDeleteRequest"
      dataschema : org.onap.ncmp.dmi.cm.subscription:1.0.0
      correlationId ( concatenation of subscriptionId and dmi-plugin-name with a separator)
       
      {
        "data": {
          "cmhandles" : [ // mandatory
          {
              "cmHandleId": "cmhandle1",
              "private-properties": {...}
          },
          {
              "cmHandleId": "cmhandle2",
              "private-properties": {...}
          },
          {
              "cmHandleId": "cmhandle3",
              "private-properties": {...}
          }
          ]
          "predicates": [
          {
              “targetFilter” :  [“cmHandle1”, “cmHandle2”, "cmhandle3"], // mandatory
              "scopeFilter" : {
                 "datastore": “ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running", // optional. default is passthrough-operational
                 "xpath-filter": list of valid xpaths  // mandatory
            }
          },  
          {
              “targetFilter” :  [“cmHandle1”, “cmHandle2”, "cmhandle3"],
              "scopeFilter" : {
                 "datastore": “ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running", // optional. default is passthrough-operational
                 "xpath-filter": list of valid xpaths  *
            }
          }
        ]
      }



    2. DMI-Plugin to NCMP Cm Subscription Delete Response


      Name

      Parent

      Type

      Example

      Mandatory ?

      Notes

      1idheaderString
      Y
      2versionheaderString 1.0Y
      3

      source

      headerStringDMEY
      4

      type

      headerStringsubscriptionDeleteResponseY
      5

      dataschema

      headerURI

    ...

    1. org.onap.ncmp.dmi.cm.subscription:1.0.0Y
      6

      correlationid

      headerStringsubscriptionId#dmiPluginNameYConcatenation of subscriptionId and dmi plugin name
      7

      data

    ...

    Notes

    1. dmiName in Output Schema is populated from application.yml of DMI-plugin.
    2. DMI-plugin subscribes to the topic to consume Input Schema given in application.yml of DMI-plugin.

    ...

    dmi:
        service:
            name: ${DMI_SERVICE_NAME:ncmp-dmi-plugin}
    app:
        dmi:
            avc:
                subscription-topic: ${DMI_CM_AVC_SUBSCRIPTION:ncmp-dmi-cm-avc-subscription-${dmi.service.name}}

    NCMP to Client-Apps

    Proposed outcome (Schema 5)

    ...


    1. Object
      Y
      8

      statusCode

      dataString
      Y1 - Accept the subscription request
      104 - Reject the subscription request
      9

      statusMessage

      dataString
      Y

      ACCEPTED

      REJECTED


      Example

      Code Block
      titleDMI-Plugin to NCMP Cm Subscription Delete Response
      linenumberstrue
      collapsetrue
      id : random UUID
      version : "1.0"
      source : <dmi-plugin-name>
      type : "subcriptionDeleteResponse"
      dataschema : org.onap.ncmp.dmi.cm.subscription:1.0.0
      correlationid : ( concatenation of subscriptionId and dmi-plugin-name with a separator)
      {
      "data" : {
         "statusCode": "1/104",  // mandatory
         "statusMessage" : "ACCEPTED/REJECTED" // mandatory
       }
      }



    2. NCMP to DME Cm Subscription Delete Response


      Name

      Parent

      Type

      Example

      Mandatory ?

      Notes

      1idheaderString
      Y
      2versionheaderString 1.0Y
      3

      source

      headerStringDMEY
      4

      type

      headerStringsubscriptionDeleteResponseY
      5

      dataschema

      headerURI
    1. org.onap.ncmp.cm.subscription:1.0.0Y
      6

      correlationid

      headerStringsubscriptionIdY
      7

      data


      Object
      Y

    ...


    1. 8

    ...

    1. subscriptionId

    ...

    1. dataString
      Y
      9

      acceptedTargets

      dataArray of String
      N
      10

      rejectedTargets

      dataArray of String
      N
      11

      pendingTargets

      dataArray of String
      N


      Example

      Code Block
      titleNCMP to DME Cm Subscription Delete Response
      linenumberstrue
      collapsetrue
      id : random UUID
      version : "1.0"
      source : "NCMP"
      type : "subcriptionDeleteResponse",
      dataschema : org.onap.ncmp.cm.subscription:1.0.0,
      correlationid : <subscriptionId> {
        "data": {
              "subscriptionId": "sample-subscription-id", // mandatory
              "acceptedTargets" : ["ch-1", ...], // optional
              "rejectedTargets" : ["ch-1", ...], // optional
              "pendingTargets" : ["ch-1", ...],  // optional
        }
      }