Versions Compared

Key

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

...

the subscription delete use case

#

Issue

Notes

Decisions

1

Delete the subscription from the database?

When do we actually delete the subscription from CPS DB ? We

 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?
Only the subscriptionId has to be sent to the DMI plugin

  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 DMIAre additional properties needed to delete the subscription

  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 trackedACTIVE 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. 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

    headerURIorg.onap.ncmp.cm.subscription:1.0.0Y
    6

    data


    Object
    Y
    7

    subscriptionId

    dataStringcm-subscription-001Y
    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

    headerStringDMENCMPY
    4

    type

    headerStringsubscriptionDeleteRequestY
    5

    dataschema

    headerURIorg.onap.ncmp.dmi.cm.subscription:1.0.0Y
    6

    correlationid

    headerStringsubscriptionId#dmiPluginNameYConcatenation of subscriptionId and dmi plugin name
    7

    data


    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  *
          }
        }
      ]
    }



  3. 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

    headerURIorg.onap.ncmp.dmi.cm.subscription:1.0.0Y
    6

    correlationid

    headerStringsubscriptionId#dmiPluginNameYConcatenation of subscriptionId and dmi plugin name
    7

    data


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



  4. 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

    headerURIorg.onap.ncmp.cm.subscription:1.0.0Y
    6

    correlationid

    headerStringsubscriptionIdY
    7

    data


    Object
    Y
    8

    subscriptionId

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




...