DCM → NCMP
References
- - CPS-2155Getting issue details... STATUS
- Name convention for Managed Objects (3GPP TS 32.300 version 11.2.0 Release 11)
Open Discussion
# | Issue | Notes | Decision |
---|---|---|---|
1 | MVP (Minimum Viable Product) for DCM |
|
|
2 | DataJob Read v Write prioritization | Write should be prioritized over read |
|
3 | Use of '/ ' causes some issues | kieran mccarthy Csaba Kocsis to review this impact on querying of FDN |
|
4 | Prioritize CPS-2009 Update remaining existing/legacy NCMP APIs to support alternate Id (FDN) - Developer Wiki - Confluence (onap.org) - over Read. | New Epic requested for DataJob Read sperate this from 1964. Expected even earlier than q3 Agreed to move higher on R14 - #17 |
|
Issues & Decisions
Issue | Notes | Decision | |
---|---|---|---|
1 | dataaccepttype Do we need to consider this parameter in our NCMP internal Java interface? | The controller should accept/reject dataaccepttype. From the client application | The Controller will validate and set the Default as necessary kieran mccarthy Sourabh Sourabh Kolawole Adebisi-Adeolokun Toine Siebelink |
2 | datacontenttype Do we need to consider this parameter in our NCMP internal Java interface? | NCMP should maintain the content type as received and not modify datacontenttype. | NCMP should maintain what content type as received and not modify kieran mccarthy Sourabh Sourabh Kolawole Adebisi-Adeolokun Toine Siebelink |
3 |
| kieran mccarthy & Rafael to come back with a 'definition' and 'example | Kolawole Adebisi-Adeolokun to follow up with stakeholders on decision by 19/03/2024 |
4 | The study mentions ' | kieran mccarthy & Rafael to come back with a 'definition' and 'example | Read and Write data jobs are 2 deff. objects. Kolawole Adebisi-Adeolokun to follow up with stakeholders on decision by 19/03/2024 |
5 | Combine all java api parameters into 1 parameter object? | There is a limit (sonar quality check) of 7 parameter max for a method | Team |
6 | Confirm that validation is the responsibility of the REST? | Yes, the rest controller will do input validation. via email 26/03/2024 Csaba Kocsis | |
7 | Is Status likely to change in the future? Considering using string for flexibility. | Java interfaces shall be 'strings' Csaba Kocsis | |
8 | Is ScopeType likely to change in the future? Don't want to use an enum if change is likely | Java interfaces shall be 'strings Csaba Kocsis Kolawole Adebisi-Adeolokun | |
9 | Can one request contain both read and write operations? | Writes and reads will not mix. But different writes operations can mix, like update or create. via email 26/03/2024 Csaba Kocsis | |
10 | Was there a decision made on whether write requests were using kafka or is there any discussion ongoing? | Retrieving the results for the write is done through HTTP synchronously. | |
11 | name of privateProperties (CMHandle private properties for the alternateID in the path.) | Can keep this var name as "cmHandleProperties" for consistency? | Agreed to use "cmHandleProperties" Csaba Kocsis Kolawole Adebisi-Adeolokun |
12 | Non mandatory fields | moduleSetTag is not mandatory privateProperties is not mandatory | |
13 | REST endpoints | Separate endpoints required for read and write |
Data Structures
Proposed Method signature
void processReadDataJob(String dataAcceptType, String dataContentType, String dataJobId, List<ReadOperation> readOperations) void processWriteDataJob(String dataAcceptType, String dataContentType, String dataJobId, List<WriteOperation> writeOperations, Map<String,String> metadata)
Notes
- The order of Operations is important and needs to be maintained hence the use of 'List'
- The output is 'void' for the scope in this user story, it will be defined later
dataaccepttype
anddatacontenttype
might be needed too, see issue #1 and #2. If required we could combine them to reduce the number of parameter in an object likeRestProtocolParameters
Datajob read request
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
destination | The destination of the results. ( e.g. S3 Bucket) | Query | string | N |
dataaccepttype | Define the data response accept type. Passible values: · application/vnd.3gpp.object-tree-hierarchical+json (default) · application/vnd.3gpp.object-tree-flat+json | request body | enum | N |
datacontenttype | Define the data request content type. Passible values: · application/3gpp-json-patch+json (default) | request body | enum | N |
data | List of operations to be executed. | request body | List of 3gppReadOperation | Y |
3gppReadOperation
Name | Description | Type | Mandatory |
---|---|---|---|
path | It is a unique identifier of a managed object (MO) on a network element. | String | Y |
op | Describes the operation to execute. The value can be: "read" | String | Y |
operationId | Unique identifier of the operation within the request | Integer | N |
attributes | This parameter specifies the attributes of the scoped resources that are returned. | List of String | N |
fields | This parameter specifies the attribute fields of the scoped resources that are returned. This should be used if an attribute is a struct and only a subset of its fields should be returned. | List of String | N |
filter | The parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched. | String | N |
scopeType | ScopeType selects MOs depending on relationships with Base Managed Object. | enum[BASE_ONLY, BASE_ALL, BASE_NTH_LEVEL, BASE_SUBTREE] | N |
scopeLevel | Only used when the scope type is BASE_NTH_LEVEL | Integer | N |
Datajob write request
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
destination | The destination of the results. ( e.g. S3 Bucket) | Query | string | N |
dataaccepttype | Define the data response accept type. Passible values: · application/vnd.3gpp.object-tree-hierarchical+json (default) · application/vnd.3gpp.object-tree-flat+json | request body | enum | N |
datacontenttype | Define the data request content type. Passible values: · application/3gpp-json-patch+json (default) | request body | enum | N |
data | List of operations to be executed. | request body | List of 3gppPatchOperation | Y |
3gppPatchOperation
Name | Description | Type | Mandatory |
---|---|---|---|
path | It is a unique identifier of a managed object (MO) on a network element. | String | Y |
op | Describes the operation to execute. The value can be: "add": creates a new MO with the id and attributes given in the value | String | Y |
operationId | Unique identifier of the operation within the request | Integer | N |
value | NA if op == remove Resource if op == add Object if op == replace ActionParameters if op == action | Object | N |
Resource
Name | Description | Type | Mandatory |
---|---|---|---|
id | Identifier of the resource object | String | N |
attributes | Attributes object whose members are the class attributes and values. The object contains key/value map where:
| Object | N |
ActionParameters
Name | Description | Type | Mandatory |
---|---|---|---|
input | The input of the action. Key value pairs. | Object | N |
REST Response from DCM
Name | Description | Type | Mandatory |
jobId | The id of the data job | string | Y |
status | The status of the jobid | enum: [ NOT_STARTED, RUNNING, FINSHED, FAILED, PARTIALLY_FAILED, CANCELLING, CANCELLED ] | Y |
statusuri | Status uri for the jobid. Example: {apiRoot}/ranoam/cm/v1/dataJob/{jobId} | uri | Y |
resultsuri | Result uri for the jobid. Example: {apiRoot}/s3-bucket/{bucketId} | uri | Y |
Examples from DCM Study
DataJob Read request (rAPP -> DCM)
Datajob Write request (rAPP -> DCM)
Resolve Data Job Operation Path Algorithm
requirement: find the cm handle(id) with the longest match between alternatId and the the input path
Table 1: Registered Cm Handles and their Alternate IDs
CmHandleId | AlternateId | Note |
---|---|---|
ch-1 | /SubNetwork=Europe/SubNetwork=Ireland | Represents a group of radio nodes |
ch-2 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath | Represents a group of radio nodes |
ch-3 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone01 | Single radio node |
ch-4 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone02 | Single radio node |
ch-5 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFord | Represent a group of radio nodes |
ch-6 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFord/ManagedElement=Ballymahon01 | Single radio node |
ch-7 | /SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFord/ManagedElement=Ballymahon02 | Single radio node |
The algorithm knows (3GPP) Path element are separated by / . Pseudo code:
- targetCandidate = complete path
- cmHandleId = InventoryPersistenceImpl#getCmHandleDataNodeByAlternateId(targetCandidate)
- if found: EXIT MATCH
- if NOT targetCandidate.CONTAINS('/') : EXIT WITH NO MATCH
- targetCandidate = targetCandidate.SUBSTRING(0,targetCandidate,INDEXOF('/')-1)
- repeat step 2 etc.
Table 2: Sample match results
Operation path (matching part in bold) | matching cm handle | (DMI) resource identifier | lookup attempts | Note |
---|---|---|---|---|
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone01/Function=X/Cell=A123 | ch-3 | /Function=X/Cell=A123 | 3 | |
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath | ch-2 | / | 1 | This is an operation on a group of radio nodes |
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Mullingar01/Function=X/Cell=A123 | ch-2 | /ManagedElement=Mullingar01/Function=X/Cell=A123 | 4 | This is probably unintended but the system wil try to execute it anyhow but in the southbound system no matches wil be found |
/SubNetwork=Europe/SubNetwork=Belgium | No Match | 2 | ||
/SubNetwork=Europe/SubNetwork=Belgium/SubNetwork=Brabant/ManagedElement=Antwerpen01/Function=X/Cell-A123 | No Match | 7 |
Performance Considerations
- For successful matches the performance (number of lookups) wil depend on the number of element under the last subnetwork (the level of subnetworks wil NOT impact performance of positive matches)
- For failed match attempts the performance will depend on the total number of elements including the level of subnetworks
Realistic FDN Examples
Example | URI FDN |
---|---|
4G Cell Relation |
|
5G Cell Relation |
|
3 Comments
kieran mccarthy
First comment :
"path": "/SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12",
2. operationId is a string
3. DataJob can be only for read OR write, i.e. operation with "op" : "read" cannot exist in same DataJob with other op types
4. We will provide examples with fields, attributes and scope examples.
Toine Siebelink
the examples are directly from Rafael's study. I think there are quiet a few inconsistencies hence the need for a chat....
kieran mccarthy
Agree - action taken to clarify as agreed.
I have attached the DataJob structures ... might be some small fine tuning but should be pretty much there.