Versions Compared

Key

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

...

Table of Contents

Requirements

Functional

#InterfaceRequirementAdditional InformationSign Off
1CPS-NCMP-I-01

Upgrade module set for CM-Handle(s) using a moduleSetTag

Module Set Tag is owned (defined) by DMI Plugin
Known module set tags should prevent 'trips' to DMI for Module information
Unused data be cleaned
All data stores are accepted

 

2CPS-NCMP-I-01Initial Inventory  shall support (Optional) moduleSetTag too

Exiting performance shall not degrade.
Known module set tags should prevent 'trips' to DMI for Module information

 

3CPS-NCMP-I-01Update module set for CM-Handle(s) using a Blank (not defined)  moduleSetTaguse 'old' algorithm from initial inventory

 

4CPS-E-05Read  moduleSetTag for given CM Handle(id)Probably no code changes required (just a model change)

 

5CPS-E-05Query Cm Handle(s) using CPS Path with moduleSetTagProbably no code changes required (just a model change)

 

6CPS-E-05.e
(e for events)
A new notification informing the client the old and new value of moduleSetTag Use same topic as CM Handle LCM Events (and future trust-level change notifications)

 

Error Handling

#Error ScenarioExpected behaviorSign-off
1Missing CM Handles (in list, some are OK)Similar to 'Initial Inventory' i.e response should include list of 'failed' cm handles
2Upgrade request for 'cached' data (cache enabled)Refuse request; not supported

...

 Note: Only pass-through i.e. non-cached data upgrade is in scope; "ncmp-datastore:passthrough-running" and "ncmp-datastore:passthrough-operational" is in scope.


Assumptions

#AssumptionNotes

Issues & Decisions

#IssueNotes Decision
1Type of Interface REST or KafkaREST
  1. easier/cheaper
  2. possibly (complete) re-use of (inventory) existing interface
  3. well documented by OpenAPI
  4. support test stubs (contract testing)

Kafka

  1. more complicated/costly
  2. plethora of topics and messages, not well documented (no standard)
  3. More robust (request persisted until acknowledged)

meeting Agreed to use REST interface.  

2moduleSetTag based on Hash no (yet) implemented!

This study seems to assume the module set tag is already implemented but it isn't!


[kieran mccarthy]:  the request it to introduce the module set tag/identifier of some kind for this new upgrade usecase.  Not assuming it is there already.  Will be costlier but is important for performance to avoid pulling models if they are already known to NCMP.
3Expected Responses

when and what content?

  1. just acknowledge upon receipt
  2. response on completion

Should follow error handling for Inventory

kieran mccarthy and team.
(Error) Handling should be similar to initial inventory ie. be able to report partial success.
Initial request gets acknowledged further processing is done in an asynchronous fashion.
Any incorrect cm handle Ids will be immediately return using a 'DmiPluginRegistrationErrorResponse' (existing class)
CPS will use Hazelcast to manage (and persist!) the requested upgrades

4Should CM-Handle state change (e.g. to 'locked')  'during' upgrade?Yes but is important to not be locked for long which makes it important to use the moduleSetTag

kieran mccarthy    Should be set to LOCKED until the new moduleSet is associated with the cmhandle.  I think there is a LOCKED_UPGRADING if I remember right.  Lock reason should mention "upgrade" and have the usual timestamps. A separate notifications will be send with details of the old and new values for moduleSetTag see decision #11
See CPS-799 Spike: Define states and state handling for CM handle

5moduleSetTag is Optional (owned and defined by DMI Plugin)Support for upgrade without continues using delete/add cm handle approach.
If the update includes an moduleSetTag it would be considered an upgrade

meeting Agreed to use REST interface with "upgradedCmHandles". 

6moduleSetTag should be able to be used during initial inventory too!Initial Inventory should be sped up too (capability requirements impacts ?!)
Note.  Current inventory 'createdCmHandles' only supports a list of cm handle Ids can this be in backward compatible way be modified to optionally include a moduleSetTag

kieran mccarthy and team. Yes, if need backward incompatible change can be handle as a new version of the interface

7Exact name moduleSetTag

meeting agreed on moduleSetTag

8How to store: hardcoded (postgress schema), inventory yang model or as additional property (private or public)? update Inventory Yang Model so it can be queried (without code changes!) like other aspect such as 'state'

meeting agreed to update Yang Model  

9additional operation for inventory Interface: 'upgradedCmHandles'
The interface currently supports
  1. createdCmHandles
  2. updatedCmHandles
  3. removedCmHandles

it possiblycould be done as part of 'updatedCmHandles' and look for /recognize the moduleSetTag update but this would be messy and confusing, also thentheoretically properties could be updated as the same time as the module set..


meeting agreed 


10Clarify capabilities
  • Expected Response/process times
  • 'batch' size
  • concurrent request combined with request frequency i.e 12 * 25 request per second?!

Part of requirement listed above, to be finalized in a  meeting after the holidays on  

11Separate Notification on change of moduleSetTag
  • There will already LCM notification, maybe that is enough?

kieran mccarthy separte notification see requirement #6


Solution Proposals 

Update Inventory REST Interface

...

Code Block
languagexml
titleURI: POST /v1/ch requestbody
collapsetrue
{
    upgradedCmHandles : [      
      {
         "cmhandle" : "<cmhandle-id-1>",
         "moduleSetTag" : "ffsdfg55342"   #  new moduleSetTag ffsdfg55342 for the cmhandle        },       
      {
         "cmhandle" : "<cmhandle-id-2>",
         "moduleSetTag" : "ffsdfg55342"   #  new moduleSetTag ffsdfg55342 for the cmhandle        },     
      { 
         "cmhandle" : "<cmhandle-id-3>",    
         "moduleSetTag" : "ddger34324"    #  new moduleSetTag ddger34324 for the cmhandle         }
  ]
}

Updated Inventory Model

Code Block
languagexml
titleModified Inventory Model
module dmi-registry {

  yang-version 1.1;

  namespace "org:onap:cps:ncmp";

  prefix dmi-reg;

  contact "toine.siebelink@est.tech";

  revision "2023-08-23" {
    description
    "Added ModuleSetTag";
  }
 
  revision "2022-05-10" {
    description
    "Added DataSyncEnabled, SyncState with State, LastSyncTime, DataStoreSyncState with Operational and Running syncstate";
  }

  revision "2022-02-10" {
    description
    "Added State, LockReason, LockReasonDetails to aid with cmHandle sync and timestamp to aid with retry/timeout scenarios";
  }

  revision "2021-12-13" {
    description
    "Added new list of public additional properties for a Cm-Handle which are exposed to clients of the NCMP interface";
  }

  revision "2021-10-20" {
    description
    "Added dmi-data-service-name & dmi-model-service-name to allow separate DMI instances for each responsibility";
  }

  revision "2021-05-20" {
    description
    "Initial Version";
  }

  grouping LockReason {
    leaf reason {
      type string;
    }
    leaf details {
      type string;
    }
  }

  grouping SyncState {
   leaf sync-state {
     type string;
   }
   leaf last-sync-time {
     type string;
   }
  }

  grouping Datastores {
    container operational {
      uses SyncState;
    }
    container running {
      uses SyncState;
    }
  }

  container dmi-registry {
    list cm-handles {
      key "id";
      leaf id {
        type string;
      }
      leaf dmi-service-name {
        type string;
      }
      leaf dmi-data-service-name {
        type string;
      }
      leaf dmi-model-service-name {
        type string;
      }

      list additional-properties {
        key "name";
        leaf name {
          type string;
        }
        leaf value {
          type string;
        }
      }

      list public-properties {
        key "name";
        leaf name {
          type string;
        }
        leaf value {
          type string;
        }
      }

      container state {
        leaf cm-handle-state {
          type string;
        }

        container lock-reason {
          uses LockReason;
        }

        leaf last-update-time {
          type string;
        }

        leaf data-sync-enabled {
          type boolean;
          default "false";
        }

        container datastores {
          uses Datastores;
        }
      }
    }
  }
}



Support for upgrade without (empty) moduleSetTag

If the moduleSetTag json property is set to "" (empty string) or then it should also indicate that the moduleSet for a cmhandle has been updated but there is no associated moduleSetTag available for that cmhandle.  This approach will always result is a full request to the dmi plugin for the module set for the cmhandle.

Proposed JIRAs

PriorityComponent DescriptionJIRAEstimates
1CPS CoreExpose a java interface to update schema set

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

5 Days
2NCMPUpdate existing REST endpoint add operation to upgrade YANG schema set using moduleSetTag

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

15 Days
3NCMPUpgrade inventory YANG model to store moduleSetTag

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

5 Days
4NCMPUpgrade anchor to new yang schema set

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

5 Days
5NCMPUpdate cmhandle state (lock) during YANG model upgrade

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

5 Days
6NCMPModify existing inventory operations using moduleSetTag as optional attribute

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

15 Days
7NCMPIdentify and test error scenarios 

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

5 Days
8NCMPUpdate DMI Stub  for testing purposes and add CSIT test 

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

5 Days
9NCMPTest and document performance of updating YANG schema set API.

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

10 Days

Planning:

  • Allow for 2 more user stories each may take 1 week. 
  • Estimated date of completion is   based on 1 person working. There is a possibility that 1 more person will join in between for implementation but there is no clear visibility on when the person can start contributing as of now. 
  • These are estimates and should not be interpreted as commitments. 

...