SDNR Actor

Overview of SDNR Actor

ONAP Policy Framework enables SDNR as one of the supported actors. SDNR uses two DMaaP topics, one to which requests are published, and another from which responses are received. SDNR may generate more than one response for a particular request, the first response simply indicating that the request was accepted, while the second response indicates completion of the request. For each request, a unique sub-request ID is generated. This is used to match the received responses with the published requests.

When an SDNR request completes, whether successfully or unsuccessfully, the actor populates the controlLoopResponse within the OperationOutcome. The application will typically publish this to a notification topic so that downstream systems can take appropriate action.

All SDNR operations are currently supported by a single java class, SdnrOperation, which is responsible for populating the request structure appropriately. This class is derived from BidirectionalTopicOperation.

Request

CommonHeader

The “CommonHeader” field in the request is built by policy.

“CommonHeader” field name

type

Description

SubRequestID

string

Generated by Policy. Is a UUID and used internally by policy to match the response with the request.

RequestID

string

Inserted by Policy. Maps to the UUID sent by DCAE i.e. the ID used throughout the closed loop lifecycle to identify a request.

Action

The “action” field uniquely identifies the operation to perform. Operation names are not validated. Instead, they are passed to SDNR, untouched.

RPC Name

The “rpc-name” field is the same as the “action” field, with everything mapped to lower case.

Payload

The “payload” field is populated with the payload text that is provided within the ONSET event; no additional transformation is applied.

Examples

Suppose the ControlLoopOperationParams were populated as follows:

{
    "actor": "SDNR",
    "operation": "ModifyConfig",
    "context": {
        "event": {
            "requestId": "664be3d2-6c12-4f4b-a3e7-c349acced200",
            "payload": "some text"
        }
    }
}

An example of a request constructed by the actor using the above parameters, published to the SDNR request topic:

{
  "body": {
    "input": {
      "CommonHeader": {
        "TimeStamp": "2020-05-18T14:43:58.550499700Z",
        "APIVer": "1.0",
        "RequestID": "664be3d2-6c12-4f4b-a3e7-c349acced200",
        "SubRequestID": "848bfd15-b189-43a1-bdea-80982b41fa24",
        "RequestTrack": {},
        "Flags": {}
      },
      "Action": "ModifyConfig",
      "Payload": "some text"
    }
  },
  "version": "1.0",
  "rpc-name": "modifyconfig",
  "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-848bfd15-b189-43a1-bdea-80982b41fa24",
  "type": "request"
}

An example initial response received from the SDNR response topic:

{
    "body": {
        "output": {
            "CommonHeader": {
                "TimeStamp": "2020-05-18T14:44:10.000Z",
                "APIver": "1.0",
                "RequestID": "664be3d2-6c12-4f4b-a3e7-c349acced200",
                "SubRequestID": "848bfd15-b189-43a1-bdea-80982b41fa24",
                "RequestTrack": [],
                "Flags": []
            },
            "Status": {
                "Code": 100,
                "Value": "ACCEPTED"
            }
        }
    },
    "version": "1.0",
    "rpc-name": "modifyconfig",
    "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-848bfd15-b189-43a1-bdea-80982b41fa24",
    "type": "response"
}

An example final response received from the SDNR on the same response topic:

{
    "body": {
        "output": {
            "CommonHeader": {
                "TimeStamp": "2020-05-18T14:44:20.000Z",
                "APIver": "1.0",
                "RequestID": "664be3d2-6c12-4f4b-a3e7-c349acced200",
                "SubRequestID": "848bfd15-b189-43a1-bdea-80982b41fa24",
                "RequestTrack": [],
                "Flags": []
            },
            "Status": {
                "Code": 200,
                "Value": "SUCCESS"
            },
            "Payload": "{ \"Configurations\":[ { \"Status\": { \"Code\": 200, \"Value\": \"SUCCESS\" }, \"data\":{\"FAPService\":{\"alias\":\"Chn0330\",\"X0005b9Lte\":{\"phyCellIdInUse\":6,\"pnfName\":\"ncserver23\"},\"CellConfig\":{\"LTE\":{\"RAN\":{\"Common\":{\"CellIdentity\":\"Chn0330\"}}}}}} } ] }"
        }
    },
    "version": "1.0",
    "rpc-name": "modifyconfig",
    "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-848bfd15-b189-43a1-bdea-80982b41fa24",
    "type": "response"
}

Configuration of the SDNR Actor

The following table specifies the fields that should be provided to configure the SNDR actor.

Field name

type

Description

sinkTopic

string

Name of the topic to which the request should be published.

sourceTopic

string

Name of the topic from which the response should be read. This must not be the same as the sinkTopic.

timeoutSec

integer (optional)

Maximum time, in seconds, to wait for a response to be received on the topic.

The individual operations are configured using these same field names. However, all of them are optional, as they inherit their values from the corresponding actor-level fields.