Versions Compared

Key

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

...

  • DMI record could reach in millions of instances
  • In memory solution (ie hazelcast) can handle 10s - 100s of Megabytes (add some sample calc)
    • still need persistence if we don't have enough instances
  • use many small messages reduce need for amalgamation
  • amalgamated string-based solution.... 

Solution Proposal

We have the below configuration managed by CPS-NCMP


#cmhandledmi-plugin
1ch-1dmi-1
2ch-2dmi-1
3ch-3dmi-2


  1. We get a Subscription Create Request with unique subscription-id and a list of predicates(list of targets , datastore and list of filters)

    Code Block
    titleSubscription Create Request
    {
    "subscriptionId" : "A-10",
    "predicates" : [
      {
    	"targets": [ch-1,ch-2],
        "datastore" : "ncmp-datastore:passthrough-operational",
    	"datastore-xpath-filter" : ["p1/c1","p2/c2"]
    	},
      {	"targets": [ch-3],
        "datastore" : "ncmp-datastore:passthrough-operational",
    	"datastore-xpath-filter" : ["p3/c3"]
    	}
    ]
    
    }



  2. We persist the incoming request as is in our persistent store using a relevant subscription model.
  3. We also maintain a distributed datastructure in Hazelcast to keep track of the request and response to the client.

    SubscriptionIddmi-pluginaffectedCmHandlesstatus
    A-10dmi-1["ch-1","ch-2"]PENDING
    A-10dmi-2["ch-3"]PENDING


  4. Read the requests from the distributed data structure and form the request for the DMI-Plugin and publish it to the internal kafka channnel.
  5. If the DMI-Plugin responds back within the configured time , so the request will either be ACCEPTED or REJECTED.
    1. if whole subscription request is ACCEPTED , update the distributed data structure and then store the subscription to the ActiveSubscriptions in cps-cache.
    2. if whole subscription request is REJECTED , update the distributed data structure and send back the response to the client.


      SubscriptionIddmi-pluginaffectedCmHandlesstatus
      A-10dmi-1["ch-1","ch-2"]ACCEPTED
      A-10dmi-2["ch-3"]REJECTED


  6. We store the "ActiveSubscriptions" using a new model which will look like below.

    SubscriptionIdcmHandlefilter
    A-10ch-1p1/c1
    A-10ch-1p2/c2
    A-10ch-2p1/c1
    A-10ch-2p2/c2



  7. Now based on whatever we have in the distributed map , we will send the response to the clients and may be clear the in-memory structure if required.

Proposed JIRAs

PriorityComponent DescriptionJIRAEstimates
1



2



3



4



5



6



7



8



...