Core Information Model (CoreModel)
TR-512.8
Control
Version 1.6
February 2023
ONF Document Type: Technical Recommendation
ONF Document Name: Core Information Model version 1.6
THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE.
Any marks and brands contained herein are the property of their respective owners.
Open Networking Foundation 1000 El Camino Real, Suite 100, Menlo Park, CA 94025 www.opennetworking.org
©2023 Open Networking Foundation. All rights reserved.
Open Networking Foundation, the ONF symbol, and OpenFlow are registered trademarks of the Open Networking Foundation, in the United States and/or in other countries. All other brands, products, or service names are or may be trademarks or service marks of, and are used to identify, products or services of their respective owners.
This Technical Recommendations has been approved by the Project TST, but has not been approved by the ONF board. This Technical Recommendation is an update to a previously released TR specification, but it has been approved under the ONF publishing guidelines for 'Informational' publications that allow Project technical steering teams (TSTs) to authorize publication of Informational documents. The designation of '-info' at the end of the document ID also reflects that the project team (not the ONF board) approved this TR.
Table of Contents
Disclaimer
Important note
Document History
1 Introduction to the document suite
1.1 References
1.2 Definitions
1.3 Conventions
1.4 Viewing UML diagrams
1.5 Understanding the figures
2 Introduction to the Control model
3 Model of control component and views
3.1 Background
3.2 The control model in the context of the core classes
3.3 The control model in the context of the core classes
3.3.1 ControlConstruct
3.3.2 ControlPort
3.3.3 ExposureContext
3.3.4 ConstraintDomain
3.3.5 CdPort
3.3.6 ViewMappingFunction
3.3.7 VmfPort
3.4 Further description
3.5 Relationship to TR-512 V1.2 model
3.5.1 Function:NetworkElementControl
3.5.2 Function:SdnController
3.5.3 View:NetworkElementViewedFromSdnController
3.5.4 View:SdnControllerViewedFromManager
3.6 Relationship to the other key classes
3.7 Model in context – directly controlled things
3.8 General discussion
4 Understanding the control component and view model
4.1 Rationale
4.2 Implications
4.3 The patterns behind the model
4.4 Identifiers, naming and addressing
4.5 Resilience in the Control System
4.6 Controller view considerations
4.7 Dismantling the NE – Some rationale
4.7.1 The analysis
4.8 The control model applied to the "Controller"
4.9 The configurationAndSwitchController (C&SC)
5 The ControlTask
5.1 Overview of Tasks
5.1.1 Task Definition
5.1.2 Examples of Task based solution
5.1.3 Tasks in general
5.1.4 Task lifecycle
5.1.5 Context for a Task
5.1.6 Purpose of a Task
5.1.7 Outcome of a Task
5.1.8 Expressing the Task
5.1.9 Task activity sequence
5.1.10 Task results as a specific type of outcome
5.1.11 Task as a Component
5.1.12 Task structure in more detail
5.1.13 A flow of Tasks
5.1.14 Task capability
5.1.15 A running Task
5.1.16 The ControlTask
5.1.17 Example of some high level ControlTasks
5.2 The ControlTask model
5.2.1 ControlTask
5.2.2 CtPort
5.2.3 CtTransferFunction
5.2.4 CttfPort
5.2.5 CttfAbstractFunctionStructure
5.2.6 CtPortFlow
5.2.7 CtPortAccessMode
5.2.8 TaskLifecycleState
5.2.9 ProgressStatus
6 Operations
6.1 The basic model
6.2 Provider and User role detail
6.3 Long-lived operations and Universal structures
6.4 The full model
7 Providing information
7.1 At the core of the Management-Control system
7.2 Autonomous provision of information
7.3 Summary of Streaming Characteristics
7.4 Use of the signal and get
7.5 The streaming model
7.5.1 Stream provider capability description
7.5.1.1 StreamProvider
7.5.1.2 SupportedStreamType
7.5.1.3 AvailableStream
7.5.1.4 LogDetails
7.5.1.5 ConnectionProtocolDetails
7.5.2 Stream provider streaming function
7.5.2.1 TransmitStreamPipeline
7.5.2.2 TramsmitFilter
7.5.2.3 StreamLog
7.5.2.4 StreamLogRecord
7.5.2.5 LogRecordBody
7.5.2.6 LogStreamControl
7.5.2.7 StreamHandler
7.5.2.8 StreamRecord
7.5.3 Stream client
7.5.3.1 ReceiverStreamPipelineBuffer
7.5.3.2 ReceiverFilter
7.5.3.3 ChangeUpdater
7.5.3.4 RequestConstructor
7.5.4 General request constructor and get request
7.5.4.1 RequestConstructor
7.5.5 Complete model
7.6 Operation of the streams
7.6.1 Provider initializes streams
7.6.2 Client gets capability information related to the provider streams
7.6.3 Client connects to a stream
7.6.4 Aggregates in detail
7.6.5 Stream communication issues
7.6.6 Asynchronous streams
7.6.7 Event time accuracy
7.6.8 Eventual Consistency
7.6.9 Fidelity
7.6.10 Visibility
7.7 Get/Post/Put/Patch
7.8 Snapshot stream
7.9 Streaming requests for change
8 Future considerations
8.1 Client intent generation
8.2 Intent receiver
8.3 Constraint form
8.4 Forms of log
List of Figures
Figure 31 Key entities in the model
Figure 32 – Basic Network Element
Figure 3-3 Core Control Model Summary
Figure 34 - Basic ControlConstruct layering Use Case
Figure 35 - Control port to "PC etc." port binding
Figure 36 - A mix of Master-Slave and Peering
Figure 37 - Recursive Control Architecture
Figure 38
Figure 3-9 Core Control Model
Figure 3-10 Mapping Core Control Model to traditional view
Figure 3-11 Relationship of Control Model to ProcessingConstruct
Figure 3-12 Control Model showing Controlled Entities
Figure 313 – SDN Controller controlling two devices
Figure 4-1 A Controllable Component
Figure 4-2 Through, To, About…
Figure 4-3 Simple network view mapping
Figure 4-4 View mapping for functions on a VM
Figure 4-5 Client view of network and control
Figure 4-6 Simplified view showing exposure of controllable capability to a client
Figure 4-7 The "NE"
Figure 4-8 Geographically distributed NE
Figure 4-9 An NE with two control access ports each providing a partial view
Figure 5-1 Tasks and triggers illustration
Figure 5-2 An example ControlTask flow
Figure 5-3 An example ControlTask structure in a Placement solution
Figure 5-4 An example ControlTask flow in a Placement solution
Figure 5-5 Control Task Model
Figure 6-1 Provider and User role ControlPorts
Figure 6-2 Provider and User role detail
Figure 6-3 Long lived operations and universal structures
Figure 6-4 Full Control Model
Figure 7-1 A controller hierarchy
Figure 7-2 The ControlConstruct Streaming interface detail
Figure 7-3 The ControlConstruct Get interface detail
Figure 7-4 Available streams
Figure 7-5 Stream Provider
Figure 7-6 Stream Client
Figure 7-7 Get
Figure 7-8 Stream Model
Figure 7-9 A controller hierarchy in detail
Version |
Date |
Description of Change |
||
---|---|---|---|---|
|
|
This document was not published prior to Version 1.3 |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="652d20cd-8ec3-44ba-80fd-43e0f4d459e5"><ac:plain-text-body><![CDATA[ |
1.3 |
September 2017 |
Version 1.3 [Published via wiki only] |
]]></ac:plain-text-body></ac:structured-macro> |
1.3.1 |
January 2018 |
Addition of text related to approval status. |
||
1.4 |
November 2018 |
Major rework of model. |
||
1.5 |
September 2021 |
Enhancements to model structure. |
||
1.6 |
February 2023 |
Addition of streaming model and ControlTask model detail. |
to the document suite
This document is an addendum to the TR-512 ONF Core Information Model and forms part of the description of the ONF-CIM. For general overview material and references to the other parts refer to TR-512.1.
For a full list of references see TR-512.1.
For a full list of definition see TR-512.1.
See TR-512.1 for an explanation of:
Some of the UML diagrams are very dense. To view them either zoom (sometimes to 400%), open the associated image file (and zoom appropriately) or open the corresponding UML diagram via Papyrus (for each figure with a UML diagram the UML model diagram name is provided under the figure or within the figure).
Figures showing fragments of the model using standard UML symbols as well as figures illustrating application of the model are provided throughout this document. Many of the application-oriented figures also provide UML class diagrams for the corresponding model fragments (see TR-512.1 for diagram symbol sets). All UML diagrams depict a subset of the relationships between the classes, such as inheritance (i.e. specialization), association relationships (such as aggregation and composition), and conditional features or capabilities. Some UML diagrams also show further details of the individual classes, such as their attributes and the data types used by the attributes.
As explained in TR-512 V1.2 the classes SdnController In general, a controller, or control system, is a collection of functions that are designed to act on another system (the controlled system) for the purpose of controlling that system where the act of controlling is intended to manipulate the state of the controlled system such that its behaviour is as defined by some user of that controlled system. As a consequence, the controller must monitor the state of the controlled system and act to maintain the desired behaviour. To do this there will necessarily be some feedback loop realized in the controller., NetworkControlDomain and NetworkElement The Network Element scope of the direct interface from a SDN controller to a Network Element in the infrastructure layer is similar to the EMS-to-NE management interface defined in the information models [ITU-T G.874.1] (OTN), [ITU-T G.8052] (Ethernet), and draft [ITU-T G.8152] (MPLS-TP).
This document describes a general model of control suitable for representation of the capabilities that control the network and for representation of the relationship to the model of the network from the control perspective. The document also discusses the dismantling of the NE and recasting aspects of it as Control.
A data dictionary that sets out the details of all classes, data types and attributes is also provided (TR-512.DD).
The ONF Architecture [ONF TR-521] talks of a recursion of control aligning well with the more general concept of the Management-Control Continuum from [TMF IG1118]. Similarly, [ITU-T G.7702] also describes recursive arrangements of SDN controllers. The control model in [ONF TR-512 V1.2] showed a traditional hierarchy rather than a generalized recursion.
Over many years it has become apparent that the traditional representation of Network Element (NE) and of Managed Element (ME) was not correct (see section 4.7 Dismantling the NE – Some rationale on page for more detail and TR-512.A.7 for examples). It is clear that from one perspective the Network Element is simply a lower level member of the Management-Control Continuum. It is also apparent that all other aspects of the NE are covered by other parts of the model.
It was concluded that the NE should be remodeled. The remodeling was driven a rational separation of concerns. During the work, the network element concept logical functions (PC, FC, LTP etc.) and physical structure (Equipment etc.) were split off. What was left was the network element control function.
The two things needed to represent the control function are:
The decision was made to create a separate control function class ControlConstruct and reuse the ConstraintDomain class for the control scope representation. Reusing ConstraintDomain simplified the resulting model (otherwise a lot of associations would have needed to be duplicated).
It then became apparent that this general model could also be used to model other functional groupings e.g. an SDN controller, giving a consistent view of the different elements in the control network and that that capability should be generalized so that it could handle all aspects of the Management Control Continuum.
The model chosen for the Control functions is derived from the Component-System pattern (see TR-512.A.2) and the ProcessingConstruct (see TR-512.11 and TR-512.A.9). It was then clear that as a controller controls components then the components of the controller that deal with controlling other things also needed to be controlled (as is explained in the Management Control Continuum). That is, MCC functions themselves can be managed/controlled.
The following sections set out the model in this context.
It is useful to categorize the functions in a network in terms of the type of functions that they provide. Two key function types are processing and transport of information.
The figure below shows the key model entities and the functions that they perform.
Figure 3 1 Key entities in the model
Both ProcessingConstruct and ControlConstruct perform processing functions, but while a ProcessingConstruct just processes its information, a ControlConstruct processes information to control other functions (such as ProcessingConstructs, Forwarding constructs etc.). It is this additional controlling responsibility that means that it makes sense to have a separate model entity for ControlConstruct.
As discussed (in TR-512.11, TR-512.2 etc.), the concept of NetworkElement has been removed from the model. The model now focusses on network functions and the boundaries that they operate within (ConstraintDomain). This section works through some basic examples to introduce the concepts of the model prior to embarking on the description of the model itself. Some of the figures used in this section are further discussed in TR-512.A.7).
The figure below shows a simple representation of a NetworkElement on the left. On the right, a Control Construct has been added and a ConstraintDomain to represent the scope of control.
Note that:
Figure 3 2 – Basic Network Element
The model also needs to be able to represent a control network, and this is achieved in two ways:
The figure below shows as summary of the Control model.
CoreModel diagram: Control-ControlConstructSummary
{*}Figure 3-3 Core Control Model Summary*The relationship that 'CC controls CD' as shown in Fig 3-4 and 3-5 is not in the model. Is it the ControlConstructControlsControlConstructInContext?
It's better to add description to show how CC controls CD.
The basic layering concept is shown in the diagram below.
Also note that because of the ControlPortBoundToLtp association, the logical control port bindings can also be linked to any transport representation if appropriate.
Figure 3 4 - Basic ControlConstruct layering Use Case
Note that while the architecture and model allow for the control network to extend down to show the control port bindings to all the network functions (as discussed for the Component-Port pattern in TR-512.A.2), the bindings can be implied from the control domain. Within a device there is no associated transport requirements and hence these bindings can be omitted in an implementation, reducing the complexity of the information stored.
Figure 3 5 - Control port to "PC etc." port binding
It would be possible to add ports to every construct for control purposes and then bind these to the CC ports. This makes sense architecturally and provides good consistency bubut?:
The model can be used to represent an SDN controller consistent with the ONF architecture [ONF TR-502] and [ONF TR-521] using the same classes used to represent a Network Element. The controller boundary is represented using a ConstraintDomain and the functions inside are represented using ProcessingConstructs etcand ControlConstructs. This is discussed in detail in
The model can represent the controller groupings and layering. The two diagrams below show some possible ways that this could be achieved. Note that the model doesn't enforce any particular controller architecture, it just supports the general concepts.
Figure 3 6 - A mix of Master-Slave and Peering
Figure 3 7 - Recursive Control Architecture
An ExposureContext instance defines what can be accessed through a particular ControlPort and who can have access (for more information refer to later sections in this document). The ExposureContext allows a ControlConstruct to give another ControlConstruct access to some view of the network functions that it is controlling. For example, as shown in the figure below, ControlConstruct X wants to give ControlConstruct Y access to ProcessingConstructs 3 and 4. The relevant view is defined by a ConstraintDomain.
In the example, if there hadn't been an existing ConstraintDomain with just PC-3 and PC-4, then a new ConstraintDomain would have been created and the ProcessingConstructs added to it. The ExposureContext then links the exposing ControlConstruct, the exposed scope and the receiving ControlConstruct together.
Note that ExposureSession can be considered to be a form of security access, so it may:
Figure 3 8
Note that further work needs to be done on the remaining part of the model to provide network function and name mappings and this could replace the ViewMappingFunction and its port in a future release.
The figure below shows the core of the Control model.
CoreModel diagram: Control-ControlConstructAndExposureContextCore
Figure 3-9 Core Control Model
The classes are described in the section below. Some aspects of the model described below are shown in figures in sections 3.5, 3.6 and 3.7. The figures above intentionally do not include all associations etc. mentioned in the detailed class information below. The figures focus on the control model, the classes listed show all aspects of the class.
Qualified Name: CoreModel::GeneralControllerModel::ControlConstruct::ControlConstruct
Represents control capability/functionality.ControlConstructs communicate with other ControlConstructs through ControlPorts about things within the related ConstraintDomains.The ControlConstruct applies to all Control/Management cases including:- the controller in the Network/Managed Element e.g. an SNMP agent).- an SDN Controller.- an EMS.- an NMS.This specific model follows a subset of the Component-System Pattern.
Inherits properties from:
This class is Experimental.
Table 1: Attributes for ControlConstruct
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_exposureContext |
Experimental |
A view supported by the ControlConstruct that may be exposed at a ControlPort of the ControlConstruct. |
_definingViewMapping |
Experimental |
ControlConstruct behavior is defined in part by view mappings. |
_controlPort |
Experimental |
A port on the ControlConstruct that allows access to the functions of the ControlConstruct. |
_subordinateControlConstructContext |
Experimental |
A ControlConstruct that is part of an abstract view of the system that supports the referencing ControlConstruct and hence describes part of the behavior of the referencing ControlConstruct. |
_viewMapping |
Experimental |
ControlConstruct uses the referenced ViewMapping to produce one view from another. |
_controlTasks |
Experimental |
An activity being carried out by the ControlConstruct where that activity is being exposed such that progress can be observed through a ControlPort. |
_requestConstructor |
|
See referenced class |
_receiveStreamPipelineBuffer |
|
See referenced class |
_logStreamControl |
Experimental |
See referenced class |
_transmitStreamPipeline |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::ControlConstruct::ControlPort
The access to the ControlConstruct following the normal Component-Port pattern (i.e., the functions of a component are accessed via ports).Is assumed to usually be bidirectional.
This class is Experimental.
Table 2: Attributes for ControlPort
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_protectingControlPort |
Experimental |
A simple representation of resilience where one ControlPorts are identified as providing equivalent information. |
_controlPort |
Experimental |
Control Ports may be used to associate controllers in a hierarchy and as peers.Peer controllers are assumed to both the subordinate of each other. |
_ltp |
Experimental |
The LTP through which the control messaging/signaling flows. |
_providerRole |
Experimental |
Properties relevant when the ControlPort is exposing the ControlConstruct as a provider of capability. |
_userRole |
Experimental |
Properties relevant when the ControlPort is exposing the ControlConstruct as a user of capability. |
_exposureContext |
Experimental |
A view presented through the ControlPort. |
_receiveFilter |
|
See referenced class |
_receiveStreamPipelineBuffer |
|
See referenced class |
_receiveFilterRepeated again in this table. |
|
See referenced class |
_streamServer |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::ExposureContext::ExposureContext
A view of the things controlled by a control system. For example, a virtual network of ONF TR-502, or more generally, resources (clause A.10 of ONF TR-521).A referenced ConstraintDomain bounds a view which is a structured presentation of the underlying controlled things (the "actual" entities) for some purpose.The model bounded by the ConstraintDomain is constructed by mapping/abstracting the models of the underlying controlled things.The ControlConstruct is itself controlled and presents itself in terms of ControlConstructs (subordinate) in a view.At one extreme the referenced ConstraintDomain may expose all underlying details of everything controlled with no adjustment from the presentation provided by the controlled things.A ConstraintDomain may expose a subset of the controlled things that focuses on a particular aspect (e.g., only the ControlConstructs).A ControlPort has an association to the ExposureContext that explains, via the related ConstraintDomain, what can be acquired through the port.The emphasis is on exposing a constrained set of information and operationsBounds what is presented over an interface from a particular viewpoint. The domain of control is almost always broader than the entities etc. bounded by the ConstraintDomain.Represents the domain of control available to the viewer.
This class is Experimental.
Table 3: Attributes for ExposureContext
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_cd |
Experimental |
The ConstraintDomain that defines the view to be exposed. |
_controlPort |
|
See referenced class |
_TransmitFilter |
Experimental |
See referenced class |
Qualified Name: CoreModel::ProcessingConstructModel::ObjectClasses::ConstraintDomain
ConstraintDomain (CD) models the topological component that represents the opportunity to enable processing of information between two or more of its CdPorts.A CdPort may be associated with another CdPort or with an LTP at a particular specific layerProtocol.It provides the context for and constrains the formation, adjustment and removal of PCs and hence offers the potential to enable processing.The LTPs available are those defined at the boundary of the CD.A CD may be:- Asymmetric such that it offers several functions and such that different functions are offered to different attached entities.- Symmetric such that it offers (or is considered as offering) only one function and the same function is offered to any attached entity with no interactions between functions offered to each attached entityAn asymmetric CD offering a number of distinct functions will have CdPorts through which the distinct functions are accessed.A symmetric CD offering only a single function need not have CdPorts, the function can be accessed directly from the CD.
Inherits properties from:
This class is Experimental.
Table 4: Attributes for ConstraintDomain
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_cdPort |
Experimental |
An asymmetric CD instance is related to LTPs via CdPorts (essentially the ports of the CD).Symmetric CDs don't have CdPorts and are directly related to LTPs. |
_pcInDomain |
Experimental |
A CD constrains one or more PCs.A constrained PC connects LTPs that are on the CD boundary. |
_ltp |
Experimental |
A symmetric CD instance is associated with zero or more LTP objects.The LTPs on the CD boundary provide capacity for processing.For asymmetric FDs the association to the LTP is via the FdPort. |
_cdInDomain |
Experimental |
The CD class supports a recursive aggregation relationship such that the internal construction of an CD can be exposed as multiple lower level CDs.Note that the model actually represents an aggregation of lower level CDs into higher level CDs as viewpoints rather than partitions, and supports multiple views |
_cascInDomain |
Experimental |
A controller operating in the scope defined. |
_equipmentInDomain |
Experimental |
A ConstraintDomain can be used to represent physical constraints in the logical view.In this case the CD can be associated to the physical equipment. |
_fcInDomain |
Experimental |
A CD constrains one or more FCs.A constrained FC connects LTPs that are on the CD boundary. |
_fdInDomain |
Experimental |
A CD constrains one or more FDs.A constrained FD connects LTPs that are on the CD boundary. |
_controlConstructInDomain |
Experimental |
A CD constrains one or more ControlConstructs. |
_ltpInDomain |
Experimental |
A CD constrains one or more LTPs. |
_linkInDomain |
Experimental |
A CD constrains one or more Links.A constrained Link connects LTPs that are on the CD boundary. |
_runningOsInDomain |
Experimental |
A RunningOs constrained by the ConstraintDomain. |
_runningSoftwareApplicationInDomain |
Experimental |
A RunningSoftwareApplication constrained by the ConstraintDomain. |
_runningNativeVmmInDomain |
Experimental |
A RunningVmm constrained by the ConstraintDomain. |
_fileSystemInDomain |
Experimental |
A FileSystem constrained by the ConstraintDomain. |
_vmfInDomain |
Experimental |
A ViewMappingFunction constrained by the ConstraintDomain. |
_partyRole |
Experimental |
See referenced class |
_partyRoleInDomain |
Experimental |
See referenced class |
_supportedStreamType |
|
See referenced class |
_availableStream |
|
See referenced class |
_streamServer |
|
See referenced class |
_changeUpdater |
|
See referenced class |
Qualified Name: CoreModel::ProcessingConstructModel::ObjectClasses::CdPort
The association of the CD to LTPs is direct for symmetric CDs and via CdPort for asymmetric CDs.The CdPort class models role based access to a CD.The capability to set up PCs between the associated CdPorts of a CD depends upon the type of CD.It is asymmetry in this capability that brings the need for CdPort.The CD can be considered as a component and the CdPort as a Port on that component.
Inherits properties from:
This class is Experimental.
Table 5: Attributes for CdPort
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_cdPort |
Experimental |
Constraint Domains can be meshed together view their ports directly as well as via LTPs indirectly. |
_ltp |
Experimental |
A CdPort is associated with zero or more LTP objects.The LTPs on the CD boundary provide capacity for processing.For symmetric CDs the association is directly from the CD to the LTP. |
_pcPort |
Experimental |
Where a CD is asymmetric and hence has CdPorts and where that CD supports PCs, appropriate CdPorts of that CD support the corresponding PcPorts. |
Qualified Name: CoreModel::GeneralControllerModel::ViewMappingFunction::ViewMappingFunction
The rules that relate one view to another.A ControlConstruct aggregates ViewMappingFunctions.Each ViewMappingFunction in the context of a ControlConstruct define the relationship between the views presented in an ExposureContext of that ControlConstruct and other views within the Controller.The ViewMappingFunction is applied to the entities aggregated by one or more ConstraintDomains (via VmfPort - CdPort VmfMapsFromCdConstraintSet to construct the view in another ConstraintDomain (via VmfPort - CdPort VmfGovernsCdConstraintSet association).For example, a pair of LTPs with matching adjacency tags in a nodal view may be mapped to a Link in a network view where the rules would describe the matching criteria etc.
This class is Experimental.
Table 6: Attributes for ViewMappingFunction
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_exposureContext |
Experimental |
An ExposureContext available to the ViewMappingFunction. |
_vmfPort |
Experimental |
A port of the ViewMappingFunction. |
Qualified Name: CoreModel::GeneralControllerModel::ViewMappingFunction::VmfPort
A port of the MappingFunction through which the effects of the mapping is exposed.This can be an input to the mapping of as an output of the mapping where the inputs and outputs may have more detailed roles.
This class is Experimental.
Table 7: Attributes for VmfPort
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_vmfPort |
Experimental |
Feeding to/from another Vmf. |
_sourceCdPort |
Experimental |
Drawing from a ConstraintDomain that aggregates classes to feed the mapping. |
_governedCdPort |
Experimental |
Causing instances of classes to be created/deleted/modified in the context of a ConstraintDomain that aggregates a view.This governs what the ConstraintDomain may aggregate and also governs the lifecycle of the aggregated entities. |
A ControlConstruct instance may expose, through each associated ControlPort instance, one or more views of controlled instances (i.e., instances of FC, LTP etc.). A view provided via a ControlPort instance is defined by an ExposureContext instance. The controlled instances to be exposed in a view are aggregated by a ConstraintDomain instance referenced by the ExposureContext instance defining the view.
A ControlConstruct instance may provide different views, each specified via a separate ExposureContext instance, via different ControlPorts instances. Several ControlPorts instances of a ControlConstruct instance may relate to the same ExposureContext instance and will hence expose the same view.
Several ExposureContext instances may reference the same ConstraintDomain instance and hence may provide the same view and several ControlConstruct instances may reference the same ExposureContext instance and will therefore expose the same view through at least one of their port instances.
The structure of the instances of the classes aggregated by a ConstraintDomain (the output view) may be derived from the structure of the instances of the classes aggregated by one or more other ConstraintDomains (input views). The inter-view mapping/abstraction/refactoring rules are maintained by one or more ViewMappingFunction instances that reference the ExposureContext instance. A ViewMappingFunction determines the specific instances in the view and hence determines the instances of FC, LTP etc. to be aggregated by the ConstraintDomain.
The derivation method will be such that an instance from an input view may be split into many instances in the output view, several instances from one or more input views may be pruned and combined to form an instance in the output view etc. The view construction is governed by constraints and corresponding behavior (rules, policy, functions). The mapping/abstractions/refactoring may lead to new insight.
For example, a "Network Element" may have a property recorded against a port where that property was extracted from an incoming signal and where that property is defined as some form of discovery tag which, unknown to the NE has been sent by another NE. As the overarching controller can see both NEs (amongst many others) it can determine the interconnectivity from these two tags. The model of "port and discovery tag" can be refactored to an off-network link and then an off-network link pair can be refactored (combined) to be a Link where the instance combination is driven by matching discovery tags. As a consequence, new insight of interconnectivity is achieved.
A combination of ViewMappingFunctions would provide the class model refactoring rules from ExposureContext to ExposureContext and, therefore, the instance refactoring rules.
The relationship between the V1.2 classes (that have been deprecated) and the V1.4 classes is depicted in the figure below.
CoreModel diagram: Control-MappingToControlConstructAndExposureContext
Figure 3-10 Mapping Core Control Model to traditional view
The V1.2 classes are shown with (red text and a red border). These are related to the V1.4 classes (shown with black text and a black border) via some explanatory classes (shown with a green fill). The relationships are purely pictorial.
The explanatory classes show (via the black dashed associations) that:
The dashed associations, red for Functions and blue for views, highlight (roughly) that in the V1.4 model:
Where the instances in the view are all abstractions (pruned and refactored forms) of those provided by the actual NE
Where the instances in an ExposureContext are all abstractions (pruned and refactored forms) of those provided by the actual SDN Controller
Clearly the above is recursive and hence a Manager could present the following via the same mechanism:
A complex NE could represent subordinate parts again through the same mechanism leading to a deep Component-View hierarchy.
The classes listed here are provided in the model to assist in the understanding of the mapping from ManagedElement, SdnController and NetworkControlDomain.
Qualified Name: CoreModel::GeneralControllerModel::ControlDiagrams::mappingToTraditionalModel::explanatoryModel::Function:NetworkElementControl
Traditional model of the NE equivalent to an aspect of the NetworkElement class from v1.2.This class should not be implemented.
This class is abstract.
This class is Example.
Qualified Name: CoreModel::GeneralControllerModel::ControlDiagrams::mappingToTraditionalModel::explanatoryModel::Function:SdnController
Traditional model of the SDN controller equivalent to the SdnController class from v1.2.This class should not be implemented.
This class is abstract.
This class is Example.
Qualified Name: CoreModel::GeneralControllerModel::ControlDiagrams::mappingToTraditionalModel::explanatoryModel::View:NetworkElementViewedFromSdnController
Traditional model of the view of the NE controller as seen from a SDN Controller equivalent to an aspect of the NetworkElement class from v1.2.This class should not be implemented.
This class is abstract.
This class is Example.
Qualified Name: CoreModel::GeneralControllerModel::ControlDiagrams::mappingToTraditionalModel::explanatoryModel::View:SdnControllerViewedFromManager
Traditional model of the view of the SDN controller as seen from a manager .No equivalent in v1.2.This class should not be implemented.
This class is abstract.
This class is Example.
The following figure shows the relationship between the key Control classes and the other key classes of the model. The structural similarity is illustrated by positioning as there is no formal mechanism for enforcing patterns (e.g., inheritance does not express the pattern or enforce the constraints). The relationship is essentially the adoption of the pattern.
CoreModel diagram: Control-ControlConstructPattern
Figure 3-11 Relationship of Control Model to ProcessingConstruct
The figure below shows each of the key classes as potential members of one or more ConstraintDomains via the "CdConstrains…" associations (highlighted in blue).
CoreModel diagram: Control-ControlConstructFullModel
Figure 3-12 Control Model showing Controlled Entities
In the figure above several classes are shown at the bottom of the diagram aggregated in the ConstraintDomain. These are described in detail in other documents. Most notable, is the ConfigurationAndSwitchController (C&SC) which is a low-level controller, this class is described in detail in TR-512.5.
The key consideration here is that the ControlConstruct exposes one or more ExposureContexts (the replacement for the NetworkControlDomain etc.) which include, via associated ConstraintDomain, an aggregation of all relevant controlled entities (where a controlled entity is allowed to be in many ExposureContexts).
The model is best illustrated by considering the figure below which depicts an SDN Controller controlling two devices. The white numbers in blue circles are used in the description below the figure.
Figure 3 13 – SDN Controller controlling two devices
The SDN Controller function/scope, is represented by a ConstraintDomain, essentially the SdnController in V1.2. The SDN Controller exposes its behavior via a set of ControlConstructs (1 and 2). These provide various views, defined by ExposureContexts and corresponding ConstraintDomains (3 -7). These are exposed through ControlPorts of the ControlConstructs:
In general, the SDN controller presents mappings of some, but not all, of the capabilities of the devices (10 and 11) it controls and mappings of some, but not all, of its own capabilities viaRepeated sentence various ControlPorts. These are presented using the classes of the ONF CIM or of any other relevant model (e.g., [TAPI]) at the ports of the relevant ControlConstructs (1 and 2). The capabilities of the device exposed via relevant ExposureContexts (12 – 15) could be presented using the ONF CIM, as depicted, but most probably will use some other model such as that of TL1, [ONF OpenFlow] or [OpenConfigConsidering the current states of Openflow and Openconfig, it is better to delete this sentence.
Consider a control function (a ControlConstruct) in a device tasked with the control of a function terminating a stream of packets (a termination function). If the device was using the ONF Core Model, the control function of the device will present an ExposureContext (13 and 15) which includes, via the associated ConstraintDomain, an LTP that in part represents the termination function. The control function will also represent its own capabilities (perhaps a capability to notify) via other view entities, not detailed here, along with a ControlConstructs, aggregated by the ConstraintDomain associated with the ExposureContext. An example of such a control function is a Network Element SNMP agent (see section 4.1 Rationale on page ).
As discussed, a ControlConstruct representing an SDN Controller can present a network level ExposureContext (3) of the functions of the network of devices that it controls. This may include the LTPs (8 and 9) that were presented in the ExposureContext (17 and 18) by the ControlConstruct (19) representing the device functionality within the SDN Controller.
Depending upon the degree of mapping, the LTP in the network view may be identical to that presented in the subordinate ExposureContext of the device view and hence the same LTP instance can be aggregated by the ConstraintDomain associated with the ExposureContext of the ControlConstruct representing the SDN controller (3, 8 and 9) and the ConstraintDomain associated with the ExposureContext of the ControlConstruct representing the device (17 and 18). In the case depicted the LTPs are not identical (8≠17 and 9≠8) and hence separate LTP instances are present (8 and 9).
In a more complex example, an LTP presented by one ControlConstruct may have two LPs but it is known that there are more LPs for the same LTP presented by another ControlConstruct. It is expected that a superior ControlConstruct will assemble (union) the fragments to form a coherent single entity using whatever matching criteria are appropriate. If a representation is a fragment, then appropriate match criteria and combination rules will need to be used to identify which fragments to combine to form the whole and what process to use to form the whole.
In a case where there is a simple consolidation of information it is possible to subsume the aggregated instances in several ConstraintDomains from subordinate ExposureContexts in a single ConstraintDomain of a superior ExposureContext so that there is a simple aggregation recursion. If the instances are identical, the ConstraintDomain of the superior ExposureContext can simply aggregate the same instances that are in the subordinate ExposureContext.
If a device is controlled via two ControlConstruct (along with other devices), each ControlConstruct will present the device as an ExposureContext, as noted above. Depending upon the specific realization, it is possible that the ConstraintDomains associated with both ExposureContext (one from each of the ControlConstructs) will have some entity instances in common.
As any entity instance can be represented in many views, the model accounts for controller resilience and control migration. A ControlConstruct can present the same information in several views. A ControlConstruct can present the same information through several ports.
Several different ControlConstructs can present the same information at the intersection of overlapping views. The UUID of the instance of an object presented in a view is provided by the ViewMappingFunction. Two distinct ViewMappingFunctions will provide different UUIDs for the abstraction from an underlying single entity instance. Specific properties, including IDs can be used to allow instance reconciliation Each ControlConstruct instance has a distinct and different UUID but some of the object instances presented in one view may have the same UUID as object instances presented in another view as they are representations of the same thing. For example an LTP instance in one view may have a UUID of 27 and an LTP instance in another view may also be UUID 27..
Any representation of a thing in a view could be known to be a fragment (e.g., an FD could represent a fragment of the whole domain where forwarding is possible). This may be determined as a result of explicit or implicit off-network (out of view) relationships within the entity. It is expected that sufficient information will be provided to a superior controller that has a broad view to allow reconciliation and assembly of the fragments to form the whole instance.
The world of networking has changed as computing and networking converge. It is clear that the implications are significant and there is an opportunity to take advantage of patterns that are apparent when taking a holistic view.
Traditionally Network Element, or a similar concept, has been used to represent a 'logical device'. This concept was easy to understand, especially when a 'device' had only one major function (like an SDH ADM or a PDH channel multiplexer).
As 'devices' have become more complex and multi-functional, the usefulness of the Network Element concept has decreased. For example, initially packet routers and Ethernet switches performed complementary functions. Now we have routers with inbuilt switches and layer2/3 switches, blurring the distinction between them.
Another point of confusion is where the management plane scope and the functional scope were mixed in concepts such as 'Managed Element' or 'Managed Network Element'. This scope confusion is especially problematic when 'devices' are logically partitioned or grouped to form 'distributed devices'.
The key to understanding the way forward is to understand that in a multi-functional 'device', we need to focus on the functions that the device performs. In hindsight, NetworkElement was just a container with equipment, that grew too complex and tried to encapsulate everything and ended up causing a lot of issues.
Reexamining the way of representing networking functionality leads to the Component-System pattern, the ProcessingConstruct and the approach to representation of control discussed in this document. In addition, the model of physical things set out in TR-512.6 cleanly separates genuinely physical things that can be measured with a ruler, from logical concepts. The general approach is careful separation of conceptually distinct concerns into functional, physical and informational and then to further separate functional into control and networking etc.
The ONF Architecture [ONF TR-521] shows a recursion of control. This aligns with the ideas from [TMF IG1118] which:
An SDN Controller will be realized using compute, storage and communications capabilities. Clearly the traditional SDN Controller just like the traditional Network/Managed Element will have communication ports. These communication ports have functionality that is no different from any other function terminating a stream of packets. The functions of communication ports of the SDN Controller are represented using the LTP class. Hence a control device and a transport NE are essentially the same. All such devices are balances of compute, storage and communications capabilities (it is just the specific balance that is different).
Three classes from the V1.2 model are obsoleted and replaced:
The relationship between the ExposureContext and the things in the view is aggregation within a related ConstraintDomain and not direct composition as it was in a traditional model of an NE.
Where there is an embedded control plane/controller that is essentially independent of the NetworkElement, this can also be represented by a ControlConstruct and one or more ExposureContexts.
If there is an opportunity to see the native model of the NE as well as the mapped model then an the ControlConstruct that represents the NetworkElement will also have a ExposureContext exposing device specific classes. In this case, it would be expected that the ControlConstruct that represents the device would make available the ViewMappingFunctions that "explain" the relationship between the views provided.
We can use ExposureContext and its associated ConstraintDomain to represent:
While the move to replace NetworkElement with ControlConstruct and ExposureContext was prompted by issues in representing 'traditional devices', it can be seen that (along with the existing decoupling of functional and physical viewpoints) this now gives a neat and consistent representation of SDN and NFV implementations, where the NetworkElement concept is largely irrelevant anyway.
As for all components, the ControlConstruct has ports. The ports provide access to the ControlViews and allow control of the ControlConstruct. A helpful view of this is provided by [TMF IG1118] as shown below.
Figure 4-1 A Controllable Component
A Component has an Operations port through which it may be controlled/managed A component provides a façade through which it can be controlled…. This essentially provides access to an embedded controller which is at the lowest level of "visible" recursion (degenerates to a transistor gate etc). and an Application port through which it exposes it purposeful behavior. The purposeful behavior of a Control Component is related to the controlling of other Components, A Control Component has an Operations port through which it is controlled.
As discussed in TR-512.A.2, all functional capabilities of the network are represented in the form of Components (FC, LTP, PC etc.). Likewise, the functional capabilities of the control system can be represented in the form of Components (e.g. C&SC).
The ports of the control components used for signaling can be represented using LTPs and the Control Functions that terminate the signaling can be represented by Control Components such as C&SC. Where appropriate, the signaling itself can be represented via a protocol definition perhaps using the Generalized operations pattern (see TR-512.10).
In general, there is a need for separate spaces of identifiers/addressing for:
When a controlled thing does not have a native UUID that can be used consistently across Control Views, there needs to be some directory service to provide consistent identification. An example of a directory service is the ITU-T G.7701 directory service component.
By separating the identifier spaces for Control from the spaces of the things being controlled and by loosening the association from composition in a traditional model to aggregation, the Control model is then set up appropriately to allow for well identified instances of controlled things to appear in more than one ControlView. As a consequence, various controller resilience schemes are readily supported. The client contexts of the ONF Architecture [ONF TR-521] would hold name spaces that could point to shared resources between client contexts.
The figure below highlights the pattern of talking through a port to a controller about a controlled system where that system:
A ControlPort has operations that are about the entities (aggregates) available through the ExposureContext, the entities do not have operations as the client does NOT talk to them. The client controller talks to the provider controller about the controlled things.
The control port supports the interface between the client and provider controllers. The control port supports provider and user roles. The signals and operations (confined to the control port) are about what is exposed. The control port is not modified and is not signaling about itself. It is providing information from the exposure context about the things represented in the associated constraint domain.
The control port is the place where interaction takes place. None of the other entities emanate any signals. It is the control port that signals about things (see section 6 Operations on page ).
Figure 4-2 Through, To, About…
The figure below shows the perception of a complex network as viewed by the Client. The ExposureContext, via the associated ConstraintDomain, will include precisely the functional components perceived by the Client. The perceived functions are an abstraction of the actual network and are also virtualized in that the Client does not know, or care, where the functions actually are. The figure shows a network that has a function "B" that is exposed as "Func B' " to the Client.
Figure 4-3 Simple network view mapping
The figure below shows a network that has a virtual function "B" (virtual) that is exposed as "Func B' " to the Client. The view provided to the client is the same as in the previous figure although the realization in the network is quite different
Figure 4-4 View mapping for functions on a VM
The figure below shows a client view of various control interfaces related to a particular simple network service. The same pattern applies at all levels and as a consequence the same model can be applied at all levels. Traditionally different models have been applied.
Figure 4-5 Client view of network and control
The diagram above highlights the following:
The figure below shows a simplified picture of the client view of an actual service (capability) and view of control of that capability. The figure uses the symbol set highlighted earlier in this section from [TMF IG1118]
Figure 4-6 Simplified view showing exposure of controllable capability to a client
The Network Element (NE) concept has been around for a long time.
[ITU-T Q.1741.9] defines NetworkElement as "A discrete telecommunications entity, which can be managed over a specific interface, e.g., the RNC."
[ITU-T G.780]
defines "network element (NE)" as "A stand-alone physical entity that supports at least network element functions (NEFs) …"The NE is a somewhat messy thing. One of the issues we have is that existing representations make a number of assumptions that aren't true in many cases. To avoid confusion by redefining the existing concepts, new terms are required to clearly define what it is and isn't.
Figure 4-7 The "NE"
A much cleaner, recursive and consistent model has been formulated that takes advantage of the Control-View model discussed above.
The following section discusses the rational for dismantling of the NE.
Looking broadly at the drivers from earlier sections:
The Network Element (NE), as concept, is a somewhat incoherent hybrid of various concerns where the hybrid is not viable for many cases. One aspect of the NE is control and this should be represented and considered in the same way as any other controller. The control aspect is the primary focus of a Managed Element (ME) but this also suffers from the same lack of coherence.
Clarity is brought by considering the separable concerns:
The NE is a mix of the above (as is the SDN Controller, the EMS etc.). The challenges with the above conglomeration approach:
Considering the current model clearly physical and functional things can be represented. Hence the focus of the model to replace the NE is the control view and the control entities themselves (the control entities are controllable).
All systems involved in Control (e.g., NE, EMS, NMS, SDN Controller, Orchestrators) can be treated in the same way.
The following figure shows an NE that happens to be significantly geographically distributed.
Figure 4-8 Geographically distributed NE
In the figure above:
Figure 4-9 An NE with two control access ports each providing a partial view
In the figure above, an assembly of equipment forms a traditional NE that happens to have two control access ports, each providing a partial view. Part of a relevant function (e.g., an LTP) is accessible through one control interface and part through another.
The control model discussed here can be applied to any manager/orchestrator/controller. The ControlConstruct can be used to represent any control functions. If a more detailed functional model of the Controller is required, the model described in this document can be supplemented with the ProcessingConstruct/ConstraintDomain (see TR-512.11). The Controller model is not fully developed in this release.
The C&SC is described in TR-512.5. It is a specialized ControlConstruct used for control of forwarding resilience. It is expected that the C&SC, the Control model described here and the PC/CD model will be further refined in subsequent releases.
Task: A piece of work to be done or undertaken.
There are many task-based solutions available in the marketplace but most appear to take a narrow view of Task. For example, Kestra (https://kestra.io/) appears to have a narrow usage in that it appears to assume a Task is a single action in a flow as opposed to a nesting of other Tasks. It does note that a "Runnable Task" can be compute intensive (and can be anything).
Tasks interrelate in some complex interconnected structure to perform control activities. A complex of Tasks may be abstracted to be viewed as a single Task.
A Task is defined in terms of dependent desired outcomes that themselves are defined in terms of constraints (as per intent). The outcomes may be explicit or implicit. The intention is that any task can be fully defined.
The control solution may choose to either expose tasks to any level of detail/abstraction. For simple operations there will be no relevant Task exposed (although there clearly is a task).
A Task can itself be controlled (via another Task), so an outcome of PAUSED may be requested. If this takes time, then a visible Task will administer the control of the Task (it is assumed that this Task that administers the pausing of another Task will not offer the opportunity for pausing)
A Task will operate over some limited time with a start and end, and potentially periodicity etc.
The ControlConstruct is the entity that carries out all tasks All functions, activities, operations etc., i.e., all behavior. in the control solution. The ControlConstruct carries out ControlTasks. The ControlTask provides an overarching entry point to the Task flow etc.
Control of the task flow is Essentially Task orchestration and hence the overarching aspect of the Task.
The Task lifecycle can be represented in terms of a set of states that relate to progress through the Task. As a complex Task may have many branches, parallel activities and alternatives. The lifecycle expression will be necessarily complex.
A Task will operate in some context with respect to a subset of all resources etc. The Task will be defined in terms of a set of resources that it can act upon and a set of other Tasks it can interact withKam's comment
"The Task can act upon....". The resources will be presented via an ExposureContext and associated ConstraintDomain. The Task operations relate to the capabilities in the viewKam's
"The Task will operate through an ExposureContext that contains .a subset of all the resources." (for creation, deletion, adjustment etc.)
The Task purpose is defined in terms of a set of outcomes (may be instantaneous, ongoing (where a short-lived Task caused an ongoing Task) etc.). This outcome is defined in terms of other model entities and is constraint based.
An outcome is defined in terms of a space of constraints. The constraints define a boundary within which the outcome must be. An outcome may be essentially constrained capabilities.
An outcome may be broken down into many individual and more specific outcomes. An outcome may be defined in terms of effects, things etc. The things may themselves be performing an ongoing activity, for example things creating other things etc. An FC, resulting from a request for forwarding, represents things that are performing the ongoing activity of forwarding. Forwarding is a Task (although NOT a Control Task).
The Task constraints bound the outcome and define the "intent" for the Task. TAPI connectivity-service is an example of Task outcome constraints.
An outcome maybe:
A measurement job (resulting from some request for measurement), performs the ongoing activity of measuring. The measurement job is therefore also a Task.
Confirming and ensuring a successful outcome will often require measurement. Hence, many outcomes will involve the creation of Task related to measurement.
Note that the TAPI oam-job is essentially a Control Task related to measurement.
A Task is defined in terms of a structure of expression of capability and action (e.g., get, set etc.). That expression is contained in an envelope with nesting and interrelationship of opportunities. A grammar is necessary to enable the expression of things performing the Task and expression of the Outcome of the Task. The expression is in terms of constraints, relationships between things, temporality etc. and this expression will define all potential lifecycles for the Task. Task constraints can be expressed in terms of the OperationEnvelope modelRefer to TR-512.10 (which provides some interdependencies related to the specific overarching intent). The description of the task is essentially a workflow description that is related to the instance of Task.
The OperationsPattern (TR-512.10_OnfCoreIm-InteractionPatterns) has OperationSet and dependency which is essentially a dependency skeleton of the Task.
There is a general need beyond expression of a single Task that supports various degrees of Task coupling. At one end of the spectrum there is extremely loosely coupling where a Task results in an outcome that makes another Task more likely to be triggered. At the other end of the spectrum there is tight coupling where the outcome of one Task is guaranteed to trigger another specific Task. This appears to be a confluence of policy and workflow.
Note that further work will be required to develop a description of policy/workflow confluence (which may draw heavily from external work).
A Task may have results, for example, in the case of a Task related to testing there may be some test results. These test results should be modelled, should be related to the Task but should be separate from the Task. The results should be maintained in a Task history in the context of a broader general history for them to be meaningful.
The Task results may be in the form of the functions that perform other ongoing tasks.
A measurement Task may require an ongoing record of measurement context (and hence a chronological log of change) which itself requires a Task.
Note that further work will be required to develop a model of measurement results and of a historic log.
A Task is a definition of functionality and hence can be viewed as a Component as described in TR-512.A.2. A Task:
Hence a Task instance can be considered as an active functional component interacting with other components.
A Task may breakdown into subordinate Tasks where those Tasks may be serial, parallel, interdependent starts etc. (as per BPMN (Business Process Modelling Notation)).
A Task may cause several outcomes where some outcomes may occur at some intermediate point in the Task run and where some outcomes are change of state that trigger or influence other Tasks or the Task itself.
The actual active function and function arrangement (the underlying processes)Not a full sentence. Any functional entity can be considered as a Task Function
Running these functions may require monitoring where monitoring is itself a Task
The statements of desired outcome may include steps on the way (sequence of activities to be completed) to a running activity.
Flow in one Task is initiated by trigger conditions (being watched out for by that Task) that are caused by outputs from other Tasks and from other sources.
If multiple Tasks are watching for the same trigger condition, then parallel running in multiple branches will occur after the trigger. The flow may rejoin if a Task is watching for and requires two specific condition outputs (one from each of the branches) to cause the trigger condition.
A Task may take a set of inputs, process them, provide a set of outputs (or achieve outcomes) then complete/terminate.
A Task instance may run as a single activity that terminates once complete or that continuously with internal loops until requested to terminate via some state input depending upon the Task capability.
The Task capability may be expressed in terms of apparent task flows that explain, in abstract, how the outputs are generated from the inputs, i.e., the definition of the transfer functions.
The transfer function may be expressed as a structure of apparent encapsulated Tasks with some stated flow. As for any structure of tasks there may be flow loops and the apparent Tasks may themselves have capability expressed as transfer functions. The transfer function may be expressed as some other structure that is not of a task form.
The Task may be realized by subordinate Task flows built from a structure of real tasks with stated flow. Flow is determined by trigger conditions that are caused by outputs from other tasks etc. as discussed in section 5.1.13 A flow of Tasks on page .
The Task may be realized by code (algorithms etc.) in which case there will be no deeper view of realization. In this case there still may be an expression of capability in terms of apparent encapsulated tasks with some stated flow.
Multiple instances of a specific type of Task may run at the same time. A Task instance will be running in some specific instance of flow and will be related to instances in the same instance of flow. Clearly, there is a need for an identifier of flow where that identifier system deals with the nesting of flows etc. Instantiation of a running task is triggered by an event and hence there must be some form of task manager to instantiate the task. This area requires further development.
The figure below shows tightly coupled Tasks where one Task triggers the next (i.e., where a Task is waiting on a condition to be triggered and where that condition is explicitly set as an outcome of another Task). The Tasks could be ControlTasks.
Note that the Task flow statement is considered as a Task, albeit a simple one.
Figure 5-1 Tasks and triggers illustration
The figure below shows an example of a Task flow.
The trigger is a new intent request. The request will carry the constraints defining the desired outcome. The task is shown broken down into apparent subordinate tasks (than may happen to closely reflect the actual underlying task realization).
The trigger causes an instance "Evaluate Request Integrity" to run thus initiating some instance context (identifier of the specific instance of the task), e.g., "Intent_x".
As a result of integrity having been validated (the failure path is not shown), a "process request" event occurs and this triggers both the "Evaluate Realization Template" and "Gather Policies" (as both are waiting on the same event. Both run an instance for the specific instance context, "Intent_x".
At some point in the execution of "Evaluate Realization Template", the event "realization policies" is caused to occur in the context "Intent_x". This is absorbed by the "Gather Policies" for "Intent_x".
The flow proceeds to eventually reach the "Evaluate Computation Outputs". This is initially triggered for "Intent_x" by two triggers, "compute A" and "compute B" causing it to start then wait for both the "Compute A Result" and the "Compute B Result" triggers. If both do not arrive appropriately the "Evaluate Computation Output" escalates.
Figure 5-2 An example ControlTask flow
The ControlTask in the Core Model is intended to support activities prompted by client interaction with the ControlConstruct. The ControlTask instance provides an opportunity for the client to assess progress and to adjust the ControlTask operation. Modification of the direction for the activity should be carried out via the ControlTask.
Clearly, the client observes and manipulates a shallow abstraction of the actual Task complexity of the provider solution. The Tasks that appear to act on the entities exposed via the ExposureContext are mapped from the actual detailed Tasks.
Different clients may get different degrees of visibility. An external party may get a very lightweight view (e.g., on/off) whereas an administrator of the actual solution will see the detailed Tasks at one level and potentially the mapping between the levels, depending upon the administrator role. Clearly, the solution designer will have an even more detailed view of the Tasks.
ControlTask capability is defined from the outside and hence its description does not vary due to internal hidden control. Other components expose capability that is defined from the inside.
The following diagram shows a stylized sketch of control Tasks that are arranged to perform service design and provisioning It is not intended that this be a full/complete design, the structure is simply being used to illustrate the mechanism.. These Tasks will not all be visible to the administrator. The client is likely to see a thin shim of the Task behavior where some of the stages are identified, perhaps that placement computation is complete, but probably not that the Solution Interpreter is active.
Figure 5-3 An example ControlTask structure in a Placement solution
The sketch shows three repositories (blue) holding catalogues of specification data that define types related to Service Offers, System Realizations and Component Capabilities. There is also a repository (brown) holding a cached view of the controlled solution in terms of a live graph of component/function instances which show current resource usage in the controlled solution. This can be considered as a network inventory. Information in each of these repositories is represented using Core model entities. The combination of the four repositories provide the information necessary to drive a network digital twin (where that would also have a view of planned and candidate futures instance structures etc.).
The grey components are ControlTasks. The sketch does not show the ControlConstructs, ExposureContexts etc., but instead focusses on the ControlTask interaction.
The following diagram shows the control flow through the tasks.
Figure 5-4 An example ControlTask flow in a Placement solution
At the top of the sketch, an external initiating selection function makes a request on a controller for one or more specific services. This would arrive at a ControlPort. A combination of ControlConstructs run the following ControlTask flow (note that this is clearly a massively simplified sketch of an essential flow):
The above flow may be augmented with Policy considerations, schedules, lead time considerations, negotiation phases related to third party network requests etc. It is clearly part of multiple control loops that relate to reevaluation on changes in the solution environment, changes in request etc.
The diagram does not show failure paths and refinement loops (e.g., where the Single Request Coordinator determines, using the Placement Evaluator that none of the placements offered by the Placement Computation Engine are suitable so the Single Request Coordinator requests further placement attempts by the Placement Evaluator (, perhaps with refined properties in the request).
The diagram does not show multiple parallel requests and does not cover what happens to other members of the set of single requests that the Request Transaction Handler constructs. It is assumed that occurrences of each necessary task will run for each of the single requests and that these may run in parallel. Clearly, there may be some dependency between results, e.g., the case where if one of a set of computationally independent single requests cannot be successfully resolved, then the whole set should be abandoned.
It could also be argued that step (1) and step (11) are run by separate tasks, i.e., coordination is distributed and information on context etc. flows forward with the progression of the other tasks (as opposed to flow back to the same originating task). Clearly, step (11) needs to be run by a stateful task that is aware of progress and of the definition of completeness.
As discussed in section 5.1.15 A running Task on page , the coupling between tasks could use an event strategy such that a task handler is listening for a particular trigger event that will then cause the spawning of a new task occurrence and each live task occurrence could be listening for events to enable progression (and of course, termination).
A full solution will also support control behavior, not shown in the sketch above, related to:
Function graph is cached copy network with various strategies (digital twin etc.)
CoreModel diagram: Control-ControlConstructWithTask
Figure 5-5 Control Task Model
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::ControlTask
The ControlTask represents an apparent (abstract/emergent) functional Component that provides/exposes management-control capability where that capability is defined in terms of a CtTransferFunction (Control Task Transfer Function). The use of "apparent" and "emergent" emphasizes that this is NOT the underlying/implementation componentary.- The behaviour defined by the CtTransferFunction is emergent from a set of underlying implementation components that have been constrained to behave in a particular way.- The ControlTask defines a specific purposeful CtTransferFunction where the underlying componentry may be far more capable/complex. It has architected behavior.- The ControlTask capability is defined from the outside and hence its description does not vary due to internal hidden control (other components expose capability that is defined from the inside). The whole defined CtTransferFunction is available and active in an instance. It achieves outcomes/goals etc. and covers all success and failure behaviors. It is the representation of the behavior related to some request for control activity or some spontaneous control activity. ControlTask capability definition and instance of running ControlTask with state Related terms:- Task: A piece of work to be done- Job: A task or piece of work- Activity: A thing that is done- Use Case: A written description of how a task will be performed- Function: An activity that is natural to or the purpose of a thing- Action: A thing done- Runnable Task: Used to handle any computational work
Inherits properties from:
This class is Experimental.
Table 8: Attributes for ControlTask
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
problemsAndWarnings |
Experimental |
A list or problems and warnings related to the task. |
timeToCompletion |
Experimental |
The estimated time to completion of the task. |
taskLifecycleState |
Experimental |
The state of the task (progress etc.). |
activityLiveLog |
Experimental |
A log of activities. |
requestContext |
Experimental |
All details from the request. |
_controlTask |
Experimental |
See referenced class |
_exposedCtTransferFunction |
Experimental |
The exposed behaviour of the ControlTask. |
_ctPort |
Experimental |
Provides a specific access.ControlTasks can only be connected by ports.A ControlTask may have no ports when it is not explicitly in some ControlTaskFlowGraph, i.e., where there is no explicitly stated trigger and no explicityly stated output to cause flow progression. |
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CtPort
An access to a ControlTask.
This class is Experimental.
Table 9: Attributes for CtPort
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
PortInternalRole |
Experimental |
The aspect of the ControlTask functionality accessed via the port. |
PortFlowDirection |
Experimental |
The direction of flow (in or out). |
PortAccessMode |
Experimental |
The mode of access to the port. |
_cctfPort |
|
See referenced class |
_flowSendToCtPort |
Experimental |
This SEND control port is explicitly DIRECT connected to the referenced (RECEIVE_LISTEN) ControlPort.There may be a DIRECT connection but it may not be known at the SEND end (hence this attribute may be not present). |
_flowReceiveFromCtPort |
Experimental |
This RECEIVE_LISTEN control port is explicitly DIRECT connected to the referenced SEND ControlPort.There may be a DIRECT connection but it may not be known at the RECEIVE_LISTEN end (hence this attribute may be not present). |
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CtTransferFunction
A statement of the capability of the ControlTask in necessary detail to enable a client to fully understand the externally visible characteristics of the ControlTask (i.e., how the outputs are generated from the inputs, or from any other relevant internal behavior).Each apparent ControlTask should have a defined CtTransferFunction. It may be expressed in terms of:- an apparent Flow Graph that explains, in abstract, how the outputs are generated from the inputs.- logic function, arithmetic function or some other structure (CttfAbstractFunctionStructure) that is not in a ControlTaskFlowGraph form. The _controlTaskOfCtFlowGraph collects the ControlTasks of the Flow Graph. Related Terms- Behaviour: The way in which a thing works - Transfer Function: The relationship between the output signal of a control system and the input signal The CtFlowGraph (not modelled directly) is a structure of interconnected apparent/abstract ControlTasks (each having a defined CtTransferFunction) where the structure expresses all possible flows (including cycles/loops) from exposed inputs to exposed outputs (which are the inputs and outputs of the ControlTask the ControlTaskFlow defines). The CtFlowGraph is formed from the linking of CtPorts using _flowReceiveFromCtPort and _flowSendToCtPort (of the CtPort of the ControlTask).The CtFlowGraph supports the workflow of the Component. Related Terms- Workflow: the order of the stages in a particular work process- Flow (Kestra): A simple list of tasks for Kestra, grouped by namespace. It defines all the behavior for the current flow.- Use Case sequence: a list of actions or event steps- Process: a series of actions or steps taken in order to achieve a particular end- Procedure: a series of actions conducted in a certain order or manner- Action Steps: Detail of an action plan
This class is Experimental.
Table 10: Attributes for CtTransferFunction
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_cctfPort |
|
See referenced class |
_controlTaskOfCtFlowGraph |
|
See referenced class |
_cttfAbstractFunctionStructure |
|
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CttfPort
Represents the transfer function aspects of the CtPort
This class is Experimental.
Table 11: Attributes for CttfPort
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
triggerCondition |
|
The condition that triggers the ControlTask through the related CtPort. |
outputCondition |
|
The condition output by the related CtPort. |
_ctPort |
|
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CttfAbstractFunctionStructure
Expression of a ControlTaskTransferFunction in terms of a logic function, arithmetic function or some other structure that is not in a ControlTaskFlowGraph form.
This class is Experimental.
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CtPortFlow
Applied stereotypes:
Contains Enumeration Literals:
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::CtPortAccessMode
The form of access.
Applied stereotypes:
Contains Enumeration Literals:
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::TaskLifecycleState
The potential states of the task.
Applied stereotypes:
Contains Enumeration Literals:
Qualified Name: CoreModel::GeneralControllerModel::ControlTask::ProgressStatus
Applied stereotypes:
Contains Enumeration Literals:
This section considers the details of exposing capability on a ControlPort. This section describes a generalized model of interfacing. In a real implementation, if the ControlConstruct was representing client facing capability of an SDN Controller, then the ControlPort may be exposing a TAPI interface.
The following figure shows that a ControlPort can take either a ProviderRole or a UserRole.
The ProviderRole offers:
The UserRole offers the other half of each of the ProviderRole opportunities.
The two information flows (dashed lines) represent Provider to User and User to Provider flows.
The detail of the model is covered in later figures.
CoreModel diagram: Control-ControlPortWithProviderAndUserRole
Figure 6-1 Provider and User role ControlPorts
This section expands on the model introduced in the previous section and introduces some more detail on the structures in the previous section.
In the figure below the three signals are expanded and the notion of universal structures is highlighted. These structures are further explored in later sections.
In addition the interface that is formed by binding a Provider role ControlPort and User role ControlPort is depicted (in violet). This also uses the two universal structures.
CoreModel diagram: Control-ControlConstructShowingProviderAndUserDetail
Figure 6-2 Provider and User role detail
A request for change, conveyed either via the synchronous or asynchronous mechanisms highlighted above, is expressed in terms of the UniversalRequestConstraintStructure which is a statement of desired outcome and is in the form of the OperationEnvelope described in TR-512.10.
A synchronous interaction is reasonable when the provider task is simple such that the provider can easily provide a response in a timeframe considered suitable by the user. In this case the response may be COMPLETE or FAILED along with full relevant details in the structureConstraint attribute along with pertinent notifications from the network resources etc represented in the ExposureContext.
In cases where the task duration is long or is widely variable, initiation via a synchronous interaction is still possible but it is then necessary to provide a rapid response followed by updates on progress up to completion. The following figure introduces the ControlTask which will provide visibility of the progression of the task. This is highlighted to the client via the UniversalOutputConstraint Structure supplied in the response to the request which also supplies the ExposureContext reference.
This model fragment allows a Controller to respond with either the complete answer, in a structureConstraint or with a partial answer (potentially simply IN_PROGRESS) along with a reference to a ControlTask entity that can be queried for progress of the task and that will notify of changes in the task. The ControlTask provides the full request detail via the requestContext property.
Where the task has not been completed the relevant ControlPort will emit notifications related to progress of the task in terms of
CoreModel diagram: Control-ControlConstructWithUniversalStructures
Figure 6-3 Long lived operations and universal structures
The ControlPort is supported by an LTP which will encode and propagate the relevant messages. The LTP will have associated to it FCsThe sentence is not smooth that provide the necessary connectivity to enable communication.
Depending upon the protocol there may be a session running between communicating ControlPorts. This session can be represented by an FC between LTPs with the appropriate LayerProtocol.
Where there is no session the momentary relationship made as a message leaves on ControlPort and arrives at another ControlConstruct port can be considered as a fleeting FC. Clearly, it is unlikely that instances of this FC will need to be modelled in any way.
CoreModel diagram: Control-ControlConstructWithFullOperationsModel
Figure 6-4 Full Control Model
This section sets out the aspect of the control model associated with providing information through the signal "underlyingStructureDetail" discussed in the previous section.
This section focusses mainly on the autonomous provision of information but also considers the response to a request for information.
The following figure provides an overview of the controller structure and shows a Client Controller connected to a Provider Controller.
Figure 7-1 A controller hierarchy
A Management-Control system, such as an Orchestrator, high level controller, OSS etc., has the role of configuring and adjusting the controlled system (network) to achieve intended capability (intent, service etc.). By monitoring and processing information (e.g., alarms) from the controlled system, the overall assembly of Management-Control systems can determine actions necessary to enable ongoing support of intent/service. The Management-Control systems can also identify repair action prioritization (via analysis of problems).
Management-Control system components (in the client controller) interacts with components in a provider controller to acquire, from the provider, information from a fragment of the overall network, e.g., the devices controlled by a controller, where that information is presented in terms of modeled aggregates within an exposure context.
The exposure context will provide a view of the underlying controlled solution sufficient for the client controller to perform its necessary function. This view may be an abstraction of a subset of the underlying resources to reduce the burden on the controller. Presentation of a view for the purpose of control is covered (add reference to slicing and view work once available)Add reference to slicing and view work..
The client maintains history and live views of the state of the things in the network so as to do the necessary analysis, hence that Management-Control system uses a mechanism providing autonomous updates and need NOT query the provider for states.
There are several solution architectures that need to be considered:
Considering solution integrity and recognizing that a controller has the role of maintaining the solution realization such that it satisfies the original agreement and hence the expectation of the end user, then:
In addition, for any of the specific considerations above
The primary focus for Streaming is simple and efficient ongoing alignment of a client with a view presented by a provider.
The model covers a streaming approach. Streaming is the name for a type of mechanism that handles the providing of information from one system to another in some form of steady and continuous flow The flow rate and the presence depend upon the need to send information..
In the context of a Management-Control solution streaming is used primarily for the reporting of ongoing change of state of the controlled system (and of other events from the controlled system) from one Management-Control entity to another (usually superior) Management-Control entity. In this context, as much of the information is derived from readings of instruments, the flow is often called telemetry This term loses relevance once the readings have been processed and abstracted but is often still used..
The stream provides engineered flow such that peak load is reduced and spread using some mechanism such as back-pressure and/or selective pruning of detail.
The definition allows for many alternative stream strategies using the same extensible structure. Streaming approaches are defined that:
Note: There is still a need for the client to "mark and sweep" to achieve full system realignment on recovery from major loss of communications.
The streaming approach described in this document is aligned in principle with the approach taken by the [GNMI] community with respect to the operation of the STREAM described in the [GNMI-SPEC].Add references
Streaming can be used in several different applications. The primary application is one where a provider is offering an ongoing flow of state updates to a client.
In this application the following assumptions apply:
Note: A view that is constructed from the currently known state will necessarily be plesiochronous A plesiochronous system is one where different parts of the system are almost, but not quite, perfectly synchronized. with respect to the actual network state because of differential network and processing delays. After some period, the temporal inaccuracies can mainly be corrected in a view of a particular past time such that the state that was present at some appropriately past time is determinable. This is consistent with the concept of "eventual consistency".
Consequently, the provider aims to optimize the process of maintaining alignment for the client.
The key characteristics of the Streaming solution are that it:
In section 6 Operations on page , the detailed model of interaction is described. This section highlights the relevant parts of that model for streaming.
CoreModel diagram: Control-InterfaceClassesStreaming
Figure 7-2 The ControlConstruct Streaming interface detail
The diagram above shows the relevant detail, drawn from the Operations model, of the structures for the streaming interface with key fields highlighted in red.
The ProviderRole offers the streaming capability and streams "UnderlyingStructureDetail" via the signal highlighted. The signal structure is a universal structure allowing any expression of constraints and specific details.
The UserRole receives the stream, "ReceiveUnderlyingStructureDetail", through the ProviderToUser flow and via the signal receiver highlighted.
The stream operation is covered in detail in the following sections.
The stream also requires use of some basic Get operations. The Get operation is supported by the structures highlighted in red in the diagram below.
CoreModel diagram: Control-InterfaceClassesGet
Figure 7-3 The ControlConstruct Get interface detail
The Get operations are discussed in the context of stream provider capability discovery.
The streaming model is considered both from the perspective of the provider and from the perspective of the client.
The provider supports various streams and can inform the client, on request, of the details of these streams.
It is assumed that the provider has used some policy etc. to determine what streams to support and has initialized those streams appropriately. Stream initialization involves instantiation on the provider of:
The provider will initialize the relevant streams ready for client connection. The streams may go through a lifecycle which may include initialization where the stream will be aligned with the current state and include normal active operation where the stream is available for connection. It may also be possible for the provider to pause a stream etc.
Prior to connecting, and outside the scope of this model, the client would be expected to deal with any necessary authentication and authorization. This may result in the acquisition of a token that will be used during interactions.
The figure below shows the key parts of the provider model related to expression of capability. The client will get the information on the supported and available streams prior to connecting to any streams. The process of getting the information related to the streams is discussed later.
CoreModel diagram: Control-WithLogAndStream-AvailableStreams
Figure 7-4 Available streams
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamProvider
The entity that provides access to stream capability information.
This class is Experimental.
Table 12: Attributes for StreamProvider
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_availableStream |
Experimental |
See referenced class |
_supportedStreamType |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::SupportedStreamType
Definition of a type of stream that is supported by the provider.
This class is Experimental.
Table 13: Attributes for SupportedStreamType
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
streamTypeName |
Experimental |
Name of the stream type. |
recordRetention |
Experimental |
Time in minutes.Statement of retention time and/or retention capacity in bytes.Key word "FOREVER" means that records will never be removed from the log.May be overridden for particular cases of specific LogStorageStrategy (via augment).Applies to all record types in the stream unless overridden by another parameter (such as tombstone retention for a compacted log). |
segmentSize |
Experimental |
Size of sub-structuring of the log. |
logStorageStrategy |
Experimental |
Indicates the storage characteristics of the log supporting the stream. |
logRecordStrategy |
Experimental |
|
recordTrigger |
Experimental |
Defines the trigger to log a record. |
streamTypeContent |
Experimental |
Identifies the classes that are supported through the stream.The list may be a subset of the classes within the context. |
_logDetails |
Experimental |
See referenced class |
_connectionProtocolDetails |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::AvailableStream
Details of a stream that can be connected to by a client application.
This class is Experimental.
Table 14: Attributes for AvailableStream
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
connectionAddress |
Experimental |
Provides the address for the connection.The format of the address and attachment mechanism will depend on the connection protocol defined in another attribute of this class.There may be a sequence of operations required, in which case, these should be listed as separate strings.A string may include wildcard substatements.A single string may list alternatives separated by an appropriate delimiter. |
streamState |
Experimental |
The state of the stream. |
streamId |
Experimental |
The id of the stream (alternative to the uuid). |
connectionProtocol |
Experimental |
Names the connection protocol for this particular available stream.The connection protocol is chosen from the list of connection protocols identified in the referenced SupportedStreamType. |
_supportedStreamType |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::LogDetails
Details of the log methods available for the specific stream type.Property examples given for a compacted log.
This class is Experimental.
Table 15: Attributes for LogDetails
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
tombstoneRetention |
Experimental |
Time in minutes.The time period for which a Tombstone record will be held in the log from when it was logged.This provides an adjustment to the essential Compaction strategy such that after the tombstoneRetention period there will be no records about a particular thing that existed but no longer exists.Tombstone retention overrides recordRetention for Tombstones.Key word "FOREVER" means that Tombstone records will never be removed from the log.Can be adjusted by an administrator (via a separate view) through the life of the stream. |
compactionDelay |
Experimental |
Time in minutes.The delay between logging the record and making the record available for compaction.This provides an adjustment to the essential Compaction strategy such that there may be several distinct records for the same thing in the where those records are not older than the Compaction Delay.Can be adjusted by an administrator (via a separate view) through the life of the stream. |
maxAllowedSegmentRollDelay |
Experimental |
The maximum time the log head segement can be allowed to be not made available for compaction.Applicable where the log is segmented and the head segment is not available for compaction.The setting influences the compaction behavior and may cause a delay before compaction that is much greater than the defined compaction delay.Time in seconds.Can be "FOREVER".Can be "NOT_APPLICABLE" (which indicates that compaction can act on the head segment). |
maxCompactionLag |
Experimental |
The maximum delay, in seconds, beyond the defined compaction delay for compaction processing to take place.May be "NOT_APPLICABLE" if compaction is essentially immediate (i.e., there is negligible delay). |
_streamLog |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::ConnectionProtocolDetails
Details of the connection protocols and encoding formats available for the specific stream type.
This class is Experimental.
Table 16: Attributes for ConnectionProtocolDetails
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
allowedConnectionProtocols |
Experimental |
Name of the allowed protocol(s).Where there is a list:- all protocols must use the same encoding format- there will be one or more available streams per connection protocolCONDITION: Mandatory where not default. |
encodingFormat |
Experimental |
The encoding format of the streamed records.CONDITION: Mandatory where not default. |
_controlPort |
Experimental |
See referenced class |
The stream provider will populate the streams with appropriate records depending upon the mode of operation of the stream. For a compacted log stream the stream will essentially hold current state and recent change.
CoreModel diagram: Control-WithLogAndStream-Provider
Figure 7-5 Stream Provider
The diagram above shows aggregate roots such as ForwardingConstruct. It is important to recognize that the aggregate root instance and all of its aggregate leaf instances are streamed as one unit. So when, for example, a ForwardingConstruct aggregate instance is created, the ForwardingConstruct instance along with its FcPort instances, FcSwitch instances etc. will be streamed as a single record. When there are changes to an FcPort instance of the ForwardingConstruct aggregate instance, this will be streamed as part of the ForwardingConstruct aggregate instance (as a single unit).
See also 7.6.1 Provider initializes streams on page .
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::TransmitStreamPipeline
Set up by ControlConstruct. Relates to a particular flow of information from the ExposureContextControls a specific stream intergrityintegrity (using sequence numbers etc.)Coordinates the TransmitFilter settings for the stream.Coordinates the StreamHandler.
This class is Experimental.
Table 17: Attributes for TransmitStreamPipeline
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_TransmitFilter |
Experimental |
See referenced class |
_streamHandler |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::TransmitFilter
Defines which events are sent to a specific Topic.The expectation is that ALL events from an ExposureContext will be available through the combination of TransmitFilters and streams such that a client connected to an appropriate set of streams can maintain alignment with the entire ExposureContext as defined by its ConstraintDomain. May want to allow the client to specify the streams but there is a danger that the client does not set up the right combination of streams to ensure that all content is available. Maybe a set of profiles? Based upon orchestrator internal partition.Malcolm's comment
Provider defines one or more profiles defining a set of streams all of which provide full ExposureContext access and the user selects a profile. May be by negotiation, but certainly not created by the client on the fly with random choices.If the desired profile does not exist then a slow timeframe process will cause it to become available in the next release of the product/catalogue/etc.
This class is Experimental.
Table 18: Attributes for TransmitFilter
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_streamLog |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamLog
Stores StreamLogRecords for a particular Topic.May do compaction/truncation etc. May use a technology such as Kafka.
This class is Experimental.
Table 19: Attributes for StreamLog
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_streamSource |
Experimental |
See referenced class |
_storedInformation |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamLogRecord
Definition of a record in a StreamLog.These records are immutable. Once logged they will never change (but can be removed from the log as appropriate).Includes log record header information.- record type (create, delete etc.) - record token and record sequence number- time the record was captured in the log- source authenticity token
This class is Experimental.
Table 20: Attributes for StreamLogRecord
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
token |
Experimental |
A coded (and compact) form of the fullLogRecordOffsetId.This property is used to request streaming from a particular point (e.g., the last correctly handled record).For a basic log solution this may simply be the sequence number. |
fullLogRecordOffsetId |
Experimental |
This property must minimally provide a logging sequence number.Note that when compaction is active, the streamed sequence may not have sequence numbers that simply increment by one.In a complex log solution there may be various parts to the log.The record token is a compressed form of log record reference.This property provides the verbose formFor example, it may include:- stream id- topic- partition- partition offset- sequence number (the offset is essentially the sequence number associated with the partition) |
logAppendTimeStamp |
Experimental |
The time when the record was appended to the log. |
entityKey |
Experimental |
The identifier of the entity that is used in a Compacted log as the compaction key.The entityKey value, where appropriate, may be based upon the identifiers from the event source.It can be built from some specific detail combination that meets the necessary uniqueness and durability requirements.entityKey is the value used during compaction.Ideally it is a UUID format, if this can be formed from the source identifier. |
recordType |
Experimental |
The type of the record.Can be used to understand which elements of the record will be present. |
recordAuthenticityToken |
Experimental |
A token generated using a method that allows the client to validate that the record came from the expected provider. |
_logReocrdBody |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamLogRecord
Definition of a record in a StreamLog.These records are immutable. Once logged they will never change (but can be removed from the log as appropriate).Includes log record header information.- record type (create, delete etc.)- record token and record sequence number- time the record was captured in the log- source authenticity token
This class is Experimental.
Table 21: Attributes for StreamLogRecord
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
token |
Experimental |
A coded (and compact) form of the fullLogRecordOffsetId.This property is used to request streaming from a particular point (e.g., the last correctly handled record).For a basic log solution this may simply be the sequence number. |
fullLogRecordOffsetId |
Experimental |
This property must minimally provide a logging sequence number.Note that when compaction is active, the streamed sequence may not have sequence numbers that simply increment by one.In a complex log solution there may be various parts to the log.The record token is a compressed form of log record reference.This property provides the verbose formFor example, it may include:- stream id- topic- partition- partition offset- sequence number (the offset is essentially the sequence number associated with the partition) |
logAppendTimeStamp |
Experimental |
The time when the record was appended to the log. |
entityKey |
Experimental |
The identifier of the entity that is used in a Compacted log as the compaction key.The entityKey value, where appropriate, may be based upon the identifiers from the event source.It can be built from some specific detail combination that meets the necessary uniqueness and durability requirements.entityKey is the value used during compaction.Ideally it is a UUID format, if this can be formed from the source identifier. |
recordType |
Experimental |
The type of the record.Can be used to understand which elements of the record will be present. |
recordAuthenticityToken |
Experimental |
A token generated using a method that allows the client to validate that the record came from the expected provider. |
_logReocrdBody |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::LogRecordBody
The key contents of the log record. Details for one Aggregate instance.- event time (allowing for time inaccuracy)- aggregate type- identifier of the containing parent aggregateNote that the Aggregate will reference other Aggregate instances some of which may be "behind" this record in the log.
This class is Experimental.
Table 22: Attributes for LogRecordBody
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
eventTimeStamp |
Experimental |
Time of the event at the origin of the event that triggered the generation of the record.The structure allows for time uncertainty. |
parentAddress |
Experimental |
Where the entity is a local class this provides the ordered list of ids from the closest global class (a UUID cast as a string) to the direct parent (which may be the global class).The field can include all entities back to the Context and hence can be used for global classes where the tree is being represented in full.Gives the position of the entity in the address tree (usually containment) that is raising the event by providing the name/id values in the address of the parent.Is the sequence of named levels in the tree up to but excluding the entity of the notification. |
recordContent |
Experimental |
The identifier of the object class in the record body detail.This property is used to control the conditional augmentation of the body with detail. |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::LogStreamControl
For stream transmitter, monitors StreamLog state and StreamHandler behaviour.For stream receiver, monitors ReceiveStreamBuffer.Controls the communications in response to monitored conditions dropping and restarting connections as appropriate.Need to explain how the client chooses the record to start from.
This class is Experimental.
Table 23: Attributes for LogStreamControl
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_controlport |
Experimental |
See referenced class |
_streamLog |
Experimental |
See referenced class |
_streamServer |
Experimental |
See referenced class |
_receiveStreamPipelineBuffer |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamHandler
Maintains flow integrity of a stream.Feeds StreamRecords to the ControlPort built from StreamLogRecords from the StreamLog.Responds to backpressure from the ControlPort accounting for Demand.
This class is Experimental.
Table 24: Attributes for StreamHandler
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
conveyedinformation |
Experimental |
To be provided |
_controlPort |
Experimental |
See referenced class |
_streamLog |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::StreamRecord
The record sent in the stream.Includes:- record identifier- time the record was formedNote that this record may contain records for multiple Aggregate instances of mixed Aggregate types.
This class is Experimental.
Table 25: Attributes for StreamRecord
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_streamLogRecord |
Experimental |
See referenced class |
The diagram above…[more description]
CoreModel diagram: Control-WithLogAndStream-Client
Figure 7-6 Stream Client
See also 7.6.3 Client connects to a stream on page .
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::ReceiveStreamPipelineBuffer
Buffer that balances flow from the communications and storage rate differences.Applies backpressure on the communications system. Forms part of the overall stream pipeline.
This class is Experimental.
Table 26: Attributes for ReceiveStreamPipelineBuffer
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_receiveFilter |
Experimental |
See referenced class |
_storedInformation |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::ReceiveFilter
Filter that removes stream records that are not relevant to a specific receiveBased on Fig 3-8, one CC exposes something in the EC, and the other CC gets the info from the EC. Furthermore, if the second CC wants to expose part/all of information to another CC, it can use another EC to expose the information. It looks only one EC, not two, exists between a sender and a receiver for a specific exposure.
Right?
Refer to Fig 7-9 the ECs in client and provider controller for discussion. ExposureContext or ControlConstruct (for control messages).
This class is Experimental.
Table 27: Attributes for ReceiveFilter
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_exposureContext |
Experimental |
See referenced class |
_controlConstruct |
Experimental |
See referenced class |
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::ChangeUpdater
Function that recognizes difference between the current state of an Aggregate (in the related ConstraintDomain) and the Aggregate details in the record received and causes necessary updates to the Aggregates in the related ConstraintDomain.This function deals with Idempotent behavior.Deals with properties the client is not interest in.
This class is Experimental.
Table 28: Attributes for ChangeUpdater
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_constraintDomain |
Experimental |
See referenced class |
May delete this section and only keep 7.5.4.1.
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::RequestConstructor
Function that coordinates requests originating from the ControlConstruct relates to specific contents of an ExposureContext and sends the request to the appropriate ControlPort.
This class is Experimental.
Table 29: Attributes for RequestConstructor
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_controlPort |
Experimental |
See referenced class |
_exposureContext |
Experimental |
See referenced class |
The following diagram shows the key classes for construction of a Get and processing of the response. Both the provider and client parts are shown together.
The solution provides a simple Get function where the client requests information that is maintained in the ConstraintDomain, aligned with the source via appropriate ViewMappingFunctions and accessed directly via the ExposureContext. This is the same information that is streamed on change.
The solution also offers a deep Get function where the information requested by the client is NOT directly available and where the ControlConstruct triggers an instantaneous mapping that acquires the data from deeper in the system, potentially the fundamental source (via a recursion of such ViewMappingFunctions) and then provides a fleeting view via the ConstraintDomain and the get.
A similar function is supported for the snapshot stream where the client operation triggers the streaming of a fleeting representation of data that is NOT maintained live in the ConstraintDomain associated with the ExposureContextThe association ReceiveFilterRoutesToControlConstruct (in Fig 7-7) is not described. More text is better in section 7.5.4(Get request)..
CoreModel diagram: Control-WithLogAndStream-Get
Figure 7-7 Get
Qualified Name: CoreModel::GeneralControllerModel::LogAndStream::RequestConstructor
Function that coordinates requests originating from the ControlConstruct relates to specific contents of an ExposureContext and sends the request to the appropriate ControlPort.
This class is Experimental.
Table 30: Attributes for RequestConstructor
Attribute Name |
Lifecycle Stereotype (empty = Mature) |
Description |
---|---|---|
_controlPort |
Experimental |
See referenced class |
_exposureContext |
Experimental |
See referenced class |
CoreModel diagram: Control-WithLogAndStream-Complete
Figure 7-8 Stream Model
The figure below shows a control hierarchy (right) with a device at the bottom with its controller above it and an orchestrator above that. The expanded view explains the symbols and show an arrangement of control entities (each discussed in this document). The Network View is any collection of model entities from the Core Model (as depicted in this document).
Figure 7-9 A controller hierarchy in detailWhat's the relationship between the EC in client controller and the EC in Provider controller?
Will the SD(stream detail) from provider controller be sent to the EC in client controller?
The following subsections run through a progression of lifecycles of the provider and the client. The text assumes that the provider sets up the streams first, then the client discovers the streams and finally the client connects.
Clearly, the provider could add streams on the fly for the client to discover etc.
Determining which specific views are to be presented and creating the VMFs etc. is outside the scope of this discussion. It is assumed in this discussion that the VMFs are in place etc.
Considering Figure 7-9 A controller hierarchy in detail on page :
At this point the provider is ready for client connection.
Considering Figure 7-9 A controller hierarchy in detail on page and assuming that "Provider initializes streams" has run to completion:
At this point the client has all necessary detail to enable it to connect to the provider streams.
Considering Figure 7-9 A controller hierarchy in detail on page and assuming that "Client gets capability information related to the provider streams" has run to completion so that the client has discovered AvailableStreams etc. from the Provider Controller.
At this point the provider is starting to stream to the client
The sequence 7-10 is continuous process with each steps running continually providing an ongoing flow.
Assuming that the provider is using a compacted log the client will achieve "Eventual Consistency" with the provider as the process above continues.
Considering the provider (CC(s))
If there are issues with the Stream detected by LogStreamControl of CC(s), it causes the CP of CC(s) to drop the appropriate connection. The CC(c) detects the connection has dropped and initiates a reconnection using the appropriate connection method at its CP. It then asks for records beyond the last one it successfully processed (recorded by its CD).
The provider receives a request for connection (via a ControlPort) and this is directed by the ReceiveFilter to the appropriate (addressed) ControlConstruct. The ControlConstruct (running a suitable Task) validates the request and, assuming valid, causes LogStreamControl to assess whether it is appropriate to continue to stream from the last record successfully received by the client or whether it is appropriate to restart the stream. The stream pipeline is started appropriately.
The client may detect disruption to the stream dues to communications failure or some loss of integrity of the flow (such as discontinuous sequence numbers). The client may chose to drop and reconnect from an appropriate point.
A controller in any control solution will be faced with the challenge that, regardless of the mechanism used to acquire information about the controlled system:
Due to this fundamental asynchronous nature of any real solution space and the skewed time of arrival of information, an eventual consistency approach has been chosen.
Clearly, the client solution will need to be able to deal with partially consistent inter-aggregate relationships and with the "gradual" emergence of clarity.
If changes are happening fast enough, the controller may not get to full clarity regarding one change before another change the blurs the view occurs.
If a controller is maintaining a full history of received information and that information carries an accurate timestamp from the source for each event, after some elapse time the controller will be able to form an accurate view of history. For example, if the controller waits for an hour after some events and then arranges the events in the chronological order of their occurrence, it will be able to construct a view of controlled system behavior.
Accurate event time recording at the origin of the detection of the event is necessary for successful interpretation.
Issues of time precision, time synchronization and determination of "event moment" can reduce the quality of the interpretation of the controlled environment.
It is beneficial for the solution to support the opportunity for:
Issues with time accuracy will degrade the control solution decision making.
A simple way to understand eventual consistency is to imagine a network that is changing such that there is a stream of changes and where the client has not absorbed the stream. If suddenly the network were to stop changing, then, once the client has absorbed the entire stream, the client will be aligned with network state.
In this document, fidelity is the degree of exactness with which the controlled system behavior is represented via the stream.
Loss of fidelity is the loss of some details of change (without losing eventual consistency). For example, the operational-state property of an LTP may initially be ENABLED, then become DISABLED and then ENABLED again. Loss of fidelity may lead to the operational-state being observed as continuously ENABLED.
It is possible for information on the controlled system to become permanently lost. For example:
The streaming solution should be such that the client is able to determine that there has been a loss of information due to limitations in the streaming solution itself.
Traditional solutions use request methods such as GET to acquire information and a POST/PUT/PATCH to apply changes.
The model caters for these traditional methods, but also allows for stream based request forms (see 7.8 Snapshot stream on page and 7.9 Streaming requests for change on page ).
Considering the traditional request methods, the following flow may occur:
To section is to be detailed in a future release.
A snapshot stream provides a flow of requested one-off measurements (including basic reading of values) where the request is made through the creation of a ControlTask (e.g., realizing a measurement job). The snapshot can be loosely synchronized across multiple devices using time of day etc.
To section is to be detailed in a future release.
In the current solution a request for change is made using a command strategy with a synchronous response to the command and which causes the initiation of a ControlTask that then coordinates the necessary activity providing asynchronous responses.
The streaming approach allows the client to stream requests to the provider. The provider is responsible for maintaining alignment with the client and dealing with the requests as it has resources available. The client may compact the stream to remove requests that have not yet been acted upon and that are no longer valid. The provider will create a task related to each request and maintain a stream of progress reports on each task as for the current solution.
Advancements include:
The model supports various forms of log that need to be described in more detail.
End of document