Versions Compared

Key

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

...

  1. The order of Operations is important and needs to be maintained hence the use of 'List'
  2. The output is 'void' for the scope in this user story, it will be defined later
  3. dataaccepttype and datacontenttype might be needed too, see issue #1 and #2. If required we could combine them to reduce the number of parameter in an object like RestProtocolParameters

Proposed DMI REST Interface & Forwarded DMI Java Request Data Structure from NCMP

Code Block
languageyml
titleopenapi.yaml
linenumberstrue
collapsetrue
openapi: 3.0.3
info:
  description: Adds subjob capabilities for DCM
  title: NCMP Data Subjob API
  version: 1.0.0
servers:
  - url: /dmi
tags:
  - description: DMI plugin rest apis
    name: dmi-datajob
paths:
  /v1/dataJobRead/{requestId}:
    post:
      description: Create a read request
      operationId: readDataJob
      parameters:
        - $ref: '#/components/parameters/requestIdInPath'
      requestBody:
        description: Operation body
        content:
          application/3gpp-json-patch+json:
            schema:
              $ref: '#/components/schemas/SubjobReadRequest'
      tags:
        - dmi-datajob
      responses:
        "200":
          description: Response for subjob
          content:
            application/json:
              schema:
                type: object
                properties:
                  dataProducerJobId:
                    type: string
                    description: The data job ID.
  /v1/dataJobWrite/{requestId}:
    post:
      description: Create a read request
      operationId: writeDataJob
      parameters:
        - $ref: '#/components/parameters/requestIdInPath'
      requestBody:
        description: Operation body
        content:
          application/3gpp-json-patch+json:
            schema:
              $ref: '#/components/schemas/SubjobWriteRequest'
      tags:
        - dmi-datajob
      responses:
        "200":
          description: Response for subjob
          content:
            application/json:
              schema:
                type: object
                properties:
                  dataProducerJobId:
                    type: string
                    description: The data job ID.
components:
  parameters:
    requestIdInPath:
      description: requestId
      in: path
      name: requestId
      required: true
      schema:
        example: requestId
        type: string
  schemas:
    SubjobReadRequest:
      type: object
      required:
        - dataProducerId
        - data
      properties:
        dataAcceptType:
          example: application/vnd.3gpp.object-tree-hierarchical+json
          type: string
        dataContentType:
          example: application/3gpp-json-patch+json
          type: string
        dataProducerId:
          example: my-data-producer-identifier
          type: string
        data: 
          $ref: '#/components/schemas/ReadOperation'
    SubjobWriteRequest:
      type: object
      required:
        - dataProducerId
        - data
      properties:
        dataAcceptType:
          example: application/vnd.3gpp.object-tree-hierarchical+json
          type: string
        dataContentType:
          example: application/3gpp-json-patch+json
          type: string
        dataProducerId:
          example: my-data-producer-identifier
          type: string
        data: 
          $ref: '#/components/schemas/WriteOperation'
    ReadOperation:
      example:
        op: read
        operationId: 1
        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2
        attributes: userLabel
        scope:
          scopeTyp: BASE_ONLY
      type: array
      items:
        type: object
        required:
          - path
          - op
        properties:
          path:
            example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
            type: string
          op:
            example: read
            type: string
          operationId:
            example: 1
            type: string
          attributes:
            type: array
            items:
              example: cellId
              type: string
          fields:
            type: array
            items:
              type: string
          filter:
            example: NRCellDU/attributes/administrativeState==LOCKED
            type: string
          scopeType:
            example: BASE_ONLY
            type: string
          scopeLevel:
            example: 0
            type: integer
          moduleSetTag:
            example: my-module-set-tag
            type: string
          cmHandleProperties:
            $ref: '#/components/schemas/CmHandleProperties'
    WriteOperation:
      example:
        op: add
        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12
        value:
          id: 12
          attributes:
            userLabel: label12
      type: array
      items:
        type: object
        required:
          - path
          - op
        properties:
          path:
            example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
            type: string
          op:
            example: add
            type: string
          operationId:
            example: 1
            type: string
          value:
            type: object
            oneOf:
              - $ref: '#/components/schemas/Resource'
              - $ref: '#/components/schemas/ActionParameters'
              - $ref: '#/components/schemas/Object'
    CmHandleProperties:
      type: object
    Resource:
      type: object
      properties:
        id:
          example: resource-identifier
          type: string
        attributes:
          type: object
          additionalProperties:
            example: 'userLabel: label11'
            type: string
    ActionParameters:
      type: object
      additionalProperties:
        type: string
    Object:
      type: object


              

...

Datajob read request

...

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

...

It is a unique identifier of a managed object (MO) on a network element. 
Defines the resource on which operation is executed. Typically could be Fully Distinguished Name (FDN).

...

Describes the operation to execute. The value can be: "read" 

...

Unique identifier of the operation within the request

...

This parameter specifies the attributes of the scoped resources that are returned. 

...

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.

...

The parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched.

...

ScopeType selects MOs depending on relationships with Base Managed Object.

...

Only used when the scope type is BASE_NTH_LEVEL

...

Datajob write request

...

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

...

It is a unique identifier of a managed object (MO) on a network element. 
Defines the resource on which operation is executed. Typically could be Fully Distinguished Name (FDN).

...

Describes the operation to execute. The value can be:

"add": creates a new MO with the id and attributes given in the value
"replace":  replaces the value of an attribute specified in the path (attribute is separated with a # from the MO path) with the object in the value
"remove": removes the MO given in the path, value is not applicable
"action": executes an MO action in the path (action is separated with a # from the MO path) with the input parameters in the value

...

Unique identifier of the operation within the request

...

NA if op == remove

Resource if op == add

Object if op == replace

ActionParameters if op == action

...

Resource

...

Identifier of the resource object

...

Attributes object whose members are the class attributes and values. The object contains key/value map where:

  • key is the attribute name
  • value is the attribute value

...

ActionParameters

...

The input of the action. Key value pairs.

...

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

Data subjob status check (NCMP → DMI)

Request:

Method: GET

Path: /dmi/v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/status

...

dataProducerId

...

ID of the producer registered by DMI for the alernateIDs in the operations in this request.

...

Query

...

String

...

Y

...

requestId

...

Identifier for the overall Datajob

...

Path

...

String

...

Y

...

dataProducerJobId

...

Identifier of the job created by the data producer.

...

Path

...

String

...

Y

Response:

Status code: 200 - OK

...

status

...

Y

Data subjob retrieve result (NCMP → DMI)

Request:

Method: GET

Path: /dmi/v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/result

Parameters:

...

dataProducerId

...

ID of the producer registered by DMI for the alernateIDs in the operations in this request.

...

Query

...

String

...

Y

...

requestId

...

Identifier for the overall Datajob

...

Path

...

String

...

Y

...

dataProducerJobId

...

Identifier of the job created by the data producer.

...

Path

...

String

...

Y

...

destination

...

The destination of the results: Kafka topic name or s3 bucket name. This shall be put into the Kafka message headers returned to NCMP

...

Query

...

String

...

Y

Response:

WRITE

Status Code: 200 - Ok

Data part of the message

READ

Status Code: 200 - Ok

...

resulturi

...

internal ncmp topic name

...

response body

...

String

...

Y

Examples from DCM Study

DataJob Read request (rAPP -> DCM)

JSON Viewer
width1250
height450
{                 
  "dataaccepttype": "application/vnd.3gpp.object-tree-hierarchical+json",
  "datacontenttype": "application/3gpp-json-patch+json",
  "data": [
    {
      "op": "read",
      "operationId": 1,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2",
      "attributes": "userLabel",
      "scope": {
        "scopeType" : "BASE_ONLY"
      }
    },
    {
      "op": "read", 
      "operationId": 2,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR01gNodeBRadio00001/ManagedElement=NR01gNodeBRadio00001/GNBDUFunction=1",
      "filter": "NRCellDU/attributes/administrativeState==LOCKED"
    },
    {
      "op": "read", 
      "operationId": 3,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1",
      "attributes ": "cellId"
    }]
}

Datajob Write request (rAPP -> DCM)

JSON Viewer
width1250
height450
{
  "dataaccepttype": "application/vnd.3gpp.object-tree-hierarchical+json",
  "datacontenttype": "application/3gpp-json-patch+json",
  "data": [
    {
      "op": "add",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12",
      "value": {
        "id": "12",
        "attributes": {
          "userLabel": "label12",
          "arfcnValueEUtranDl": "12"
        }
      }
    },
    {
      "op": "add",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=11",
      "value": {
        "id": "11",
        "attributes": {
          "userLabel": "label11"
        }
      }
    },
    {
      "op": "replace",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=1#/attributes/userLabel",
      "value": "label1"
    },
    {
      "op": "remove",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=13"
    },
    {
      "op": "action",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003",
      "value": "sync"
    }
  ]
}  

 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

...

  1. targetCandidate = complete path
  2. cmHandleId = InventoryPersistenceImpl#getCmHandleDataNodeByAlternateId(targetCandidate)
  3. if found: EXIT MATCH
  4. if NOT targetCandidate.CONTAINS('/')  : EXIT WITH NO MATCH
  5. targetCandidate = targetCandidate.SUBSTRING(0,targetCandidate,INDEXOF('/')-1)
  6. repeat step 2 etc.

Table 2: Sample match results

...

/SubNetwork=Europe/SubNetwork=Belgium

...

/SubNetwork=Europe/SubNetwork=Belgium/SubNetwork=Brabant/ManagedElement=Antwerpen01/Function=X/Cell-A123

...

Performance Considerations

  1. 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)
  2. For failed match attempts the performance will depend on the total number of elements including the level of subnetworks

Realistic FDN Examples

...

4G Cell Relation

...

SubNetwork=Europe/SubNetwork=Ireland,SubNetwork=NETSimW/ManagedElement=LTE08dg2ERBS00041/ENodeBFunction=1/EUtranCellFDD=LTE08dg2ERBS00041-1/EUtranFreqRelation=1,EUtranCellRelation=17

...

5G Cell Relation

...

SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR14gNodeBRadio00018/ManagedElement=NR14gNodeBRadio00018/GNBCUCPFunction=1/NRCellCU=NR14gNodeBRadio00018-1/EUtranCellRelation=1


Datajob read request

NameDescriptionLocationTypeMandatory

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

NameDescriptionTypeMandatory
path

It is a unique identifier of a managed object (MO) on a network element. 
Defines the resource on which operation is executed. Typically could be Fully Distinguished Name (FDN).

StringY
op

Describes the operation to execute. The value can be: "read" 

StringY
operationId

Unique identifier of the operation within the request

IntegerN
attributes

This parameter specifies the attributes of the scoped resources that are returned. 

List of StringN
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 StringN
filter

The parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched.

StringN
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

IntegerN

Datajob write request

NameDescriptionLocationTypeMandatory

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

NameDescriptionTypeMandatory
path

It is a unique identifier of a managed object (MO) on a network element. 
Defines the resource on which operation is executed. Typically could be Fully Distinguished Name (FDN).

StringY
op

Describes the operation to execute. The value can be:

"add": creates a new MO with the id and attributes given in the value
"replace":  replaces the value of an attribute specified in the path (attribute is separated with a # from the MO path) with the object in the value
"remove": removes the MO given in the path, value is not applicable
"action": executes an MO action in the path (action is separated with a # from the MO path) with the input parameters in the value

StringY
operationId

Unique identifier of the operation within the request

IntegerN
value

NA if op == remove

Resource if op == add

Object if op == replace

ActionParameters if op == action



ObjectN

Resource

NameDescriptionTypeMandatory
id

Identifier of the resource object

StringN
attributes

Attributes object whose members are the class attributes and values. The object contains key/value map where:

  • key is the attribute name
  • value is the attribute value
ObjectN

ActionParameters

NameDescriptionTypeMandatory
input

The input of the action. Key value pairs.

ObjectN

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

Data subjob status check (NCMP → DMI)

Request:

Method: GET

Path: /dmi/v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/status

NameDescriptionLocationTypeMandatory

dataProducerId

ID of the producer registered by DMI for the alernateIDs in the operations in this request.

Query

String

Y

requestId

Identifier for the overall Datajob

Path

String

Y

dataProducerJobId

Identifier of the job created by the data producer.

Path

String

Y

Response:

Status code: 200 - OK

NameDescriptionLocationTypeMandatory

status

enum that represents the status of the subjob.
Possible values:
response bodyenum:
[ NOT_STARTED, RUNNING, FINSHED, FAILED, PARTIALLY_FAILED, CANCELLING, CANCELLED ]

Y

Data subjob retrieve result (NCMP → DMI)

Request:

Method: GET

Path: /dmi/v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/result

Parameters:

NameDescriptionLocationTypeMandatory

dataProducerId

ID of the producer registered by DMI for the alernateIDs in the operations in this request.

Query

String

Y

requestId

Identifier for the overall Datajob

Path

String

Y

dataProducerJobId

Identifier of the job created by the data producer.

Path

String

Y

destination

The destination of the results: Kafka topic name or s3 bucket name. This shall be put into the Kafka message headers returned to NCMP

Query

String

Y

Response:

WRITE

Status Code: 200 - Ok

Data part of the message

READ

Status Code: 200 - Ok

NameDescriptionLocationTypeMandatory

resulturi

internal ncmp topic name

response body

String

Y

Examples from DCM Study

DataJob Read request (rAPP -> DCM)

JSON Viewer
width1250
height450
{                 
  "dataaccepttype": "application/vnd.3gpp.object-tree-hierarchical+json",
  "datacontenttype": "application/3gpp-json-patch+json",
  "data": [
    {
      "op": "read",
      "operationId": 1,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2",
      "attributes": "userLabel",
      "scope": {
        "scopeType" : "BASE_ONLY"
      }
    },
    {
      "op": "read", 
      "operationId": 2,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR01gNodeBRadio00001/ManagedElement=NR01gNodeBRadio00001/GNBDUFunction=1",
      "filter": "NRCellDU/attributes/administrativeState==LOCKED"
    },
    {
      "op": "read", 
      "operationId": 3,
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1",
      "attributes ": "cellId"
    }]
}

Datajob Write request (rAPP -> DCM)

JSON Viewer
width1250
height450
{
  "dataaccepttype": "application/vnd.3gpp.object-tree-hierarchical+json",
  "datacontenttype": "application/3gpp-json-patch+json",
  "data": [
    {
      "op": "add",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12",
      "value": {
        "id": "12",
        "attributes": {
          "userLabel": "label12",
          "arfcnValueEUtranDl": "12"
        }
      }
    },
    {
      "op": "add",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=11",
      "value": {
        "id": "11",
        "attributes": {
          "userLabel": "label11"
        }
      }
    },
    {
      "op": "replace",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=1#/attributes/userLabel",
      "value": "label1"
    },
    {
      "op": "remove",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=13"
    },
    {
      "op": "action",
      "path": "SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003",
      "value": "sync"
    }
  ]
}  

 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

CmHandleIdAlternateIdNote
ch-1/SubNetwork=Europe/SubNetwork=IrelandRepresents a group of radio nodes
ch-2/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeathRepresents a group of radio nodes
ch-3/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone01Single radio node 
ch-4/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone02Single radio node 
ch-5/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFordRepresent a group of radio nodes
ch-6/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFord/ManagedElement=Ballymahon01Single radio node 
ch-7/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=LongFord/ManagedElement=Ballymahon02Single radio node 

The algorithm knows (3GPP) Path element are separated by / . Pseudo code:

  1. targetCandidate = complete path
  2. cmHandleId = InventoryPersistenceImpl#getCmHandleDataNodeByAlternateId(targetCandidate)
  3. if found: EXIT MATCH
  4. if NOT targetCandidate.CONTAINS('/')  : EXIT WITH NO MATCH
  5. targetCandidate = targetCandidate.SUBSTRING(0,targetCandidate,INDEXOF('/')-1)
  6. repeat step 2 etc.

Table 2: Sample match results

Operation path (matching part in bold)matching cm handle(DMI) resource identifierlookup attemptsNote
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Athlone01/Function=X/Cell=A123ch-3/Function=X/Cell=A1233
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeathch-2/1This is an operation on a group of radio nodes 
/SubNetwork=Europe/SubNetwork=Ireland/SubNetwork=WestMeath/ManagedElement=Mullingar01/Function=X/Cell=A123ch-2/ManagedElement=Mullingar01/Function=X/Cell=A1234This 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

  1. 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)
  2. For failed match attempts the performance will depend on the total number of elements including the level of subnetworks

Realistic FDN Examples

ExampleURI FDN

4G Cell Relation

SubNetwork=Europe/SubNetwork=Ireland,SubNetwork=NETSimW/ManagedElement=LTE08dg2ERBS00041/ENodeBFunction=1/EUtranCellFDD=LTE08dg2ERBS00041-1/EUtranFreqRelation=1,EUtranCellRelation=17

5G Cell Relation

SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR14gNodeBRadio00018/ManagedElement=NR14gNodeBRadio00018/GNBCUCPFunction=1/NRCellCU=NR14gNodeBRadio00018-1/EUtranCellRelation=1

Proposed JIRAs

Priority

Component 

Description

JIRA

1NCMPCreate implementation proposal for NCMP to provide support for Data jobs qualifier during registration

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

2NCMPNCMP to provide support for data producer identifier during registration

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

3NCMPSupport of Datajobs qualifier during registration

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

4NCMPModify the get cmHandle api to return dataProducerIdentifier, moduleSetTag, and alternateId

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

5NCMPModify lcm events to include dataProducerIdentifier and 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-2114

6NCMPCreate implementation proposal for NCMP to provide Java interface that can support Data jobs request

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

7NCMPDefine a java based datastructure for DataJob

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

8NCMPHandle Datajob request in java interface

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

9NCMPHandle async datajob response in java interface

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

10Define DMI REST interface for Datajobs

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

11DMIDefine a java based datastructure dmi request for dmi endpoint

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

12DMIResponse schema for DMI dataJob response

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

13NCMPForward dataJob response from DMI to client topic in header as destination 

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

14DMIStub should be modified to use generated code from OpenAPI

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

15E2E demo for internal team and stakeholder  JiraserverONAP JiracolumnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolutioncolumnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolutionserverId425b2b0a-557c-3c0c-b515-579789cceedbkeyCPS-2144