Update docs The CLAMP Automation Composition Runtime 63/133963/3
authorFrancescoFioraEst <francesco.fiora@est.tech>
Wed, 29 Mar 2023 14:01:04 +0000 (15:01 +0100)
committerLiam Fallon <liam.fallon@est.tech>
Fri, 31 Mar 2023 11:40:34 +0000 (11:40 +0000)
Update "The CLAMP Automation Composition Runtime" docs

Issue-ID: POLICY-4600
Change-Id: I927a67fd021b4d92b01094c65c42efd4ea8d4682
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
docs/clamp/acm/design-impl/clamp-runtime-acm.rst

index 3e99ed1..ba5ffe3 100644 (file)
@@ -13,93 +13,133 @@ This article explains how CLAMP Automation Composition Runtime is implemented.
 
 Terminology
 ***********
 
 Terminology
 ***********
-- Broadcast message: a message for all participants (participantId=null and participantType=null)
-- Message to a participant: a message only for a participant (participantId and participantType properly filled)
+- Broadcast message: a message for all participants (participantId=null)
+- Message to a participant: a message only for a participant (participantId properly filled)
 - ThreadPoolExecutor: ThreadPoolExecutor executes the given task, into SupervisionAspect class is configured to execute tasks in ordered manner, one by one
 - Spring Scheduling: into SupervisionAspect class, the @Scheduled annotation invokes "schedule()" method every "runtime.participantParameters.heartBeatMs" milliseconds with a fixed delay
 - MessageIntercept: "@MessageIntercept" annotation is used into SupervisionHandler class to intercept "handleParticipantMessage" method calls using spring aspect oriented programming
 - GUI: swagger-ui, Postman or policy-gui
 - ThreadPoolExecutor: ThreadPoolExecutor executes the given task, into SupervisionAspect class is configured to execute tasks in ordered manner, one by one
 - Spring Scheduling: into SupervisionAspect class, the @Scheduled annotation invokes "schedule()" method every "runtime.participantParameters.heartBeatMs" milliseconds with a fixed delay
 - MessageIntercept: "@MessageIntercept" annotation is used into SupervisionHandler class to intercept "handleParticipantMessage" method calls using spring aspect oriented programming
 - GUI: swagger-ui, Postman or policy-gui
+- Message Broker: supported message Broker are DMaap and Strimzi-Kafka
 
 Design of Rest Api
 ******************
 
 
 Design of Rest Api
 ******************
 
-Create of a Automation Composition Type
-+++++++++++++++++++++++++++++++++++++++
-- GUI calls POST "/commission" endpoint with a Automation Composition Type Definition (Tosca Service Template) as body
+Check CLAMP Runtime and Participants
+++++++++++++++++++++++++++++++++++++
+- GUI calls GET "/onap/policy/clamp/acm/health" endpoint and receives the "UP" status as response
+- GUI calls GET "/onap/policy/clamp/acm/v2/participants" endpoint and receives all participants registered with supported Element Types as response
+
+Order an immediate Participant Report from all participants
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls PUT "/onap/policy/clamp/acm/v2/participants" endpoint
 - runtime-ACM receives the call by Rest-Api (CommissioningController)
 - runtime-ACM receives the call by Rest-Api (CommissioningController)
-- It saves to DB the Tosca Service Template using PolicyModelsProvider
-- if there are participants registered, it triggers the execution to send a broadcast PARTICIPANT_UPDATE message
-- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
+- It triggers the execution to send a broadcast PARTICIPANT_STATUS_REQ message
 
 
-Delete of a Automation Composition Type
-+++++++++++++++++++++++++++++++++++++++
-- GUI calls DELETE "/commission" endpoint
+Create of a Automation Composition Definition Type
+++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions" endpoint with a Automation Composition Type Definition (Tosca Service Template) as body
 - runtime-ACM receives the call by Rest-Api (CommissioningController)
 - runtime-ACM receives the call by Rest-Api (CommissioningController)
-- if there are participants registered, runtime-ACM triggers the execution to send a broadcast PARTICIPANT_UPDATE message
-- the message is built by ParticipantUpdatePublisher with an empty list of ParticipantDefinition
-- It deletes the Automation Composition Type from DB
+- It validates the Automation Composition Type Definition
+- It saves to DB the Tosca Service Template using AcDefinitionProvider with new compositionId and COMMISSIONED status
+- the Rest-Api call returns the compositionId generated and the list of Element Definition Type
 
 
-Create of a Automation Composition
-++++++++++++++++++++++++++++++++++
-- GUI calls POST "/instantiation" endpoint with a Automation Composition as body
+Update of a Automation Composition Definition Type
+++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions" endpoint with a Automation Composition Type Definition (Tosca Service Template) as body. It have to contain the compositionId
+- runtime-ACM receives the call by Rest-Api (CommissioningController)
+- It checks that Automation Composition Type Definition is in COMMISSIONED status
+- It validates the Automation Composition Type Definition
+- It updates to DB the Tosca Service Template using AcDefinitionProvider using the compositionId
+- the Rest-Api call returns the compositionId and the list of Element Definition Type
+
+Priming of a Automation Composition Definition Type
++++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions/{compositionId}" endpoint with PRIME as primeOrder
+- runtime-ACM receives the call by Rest-Api (CommissioningController)
+- It checks that Automation Composition Type Definition is in COMMISSIONED status
+- It validates and update the AC Element Type Definition with supported Element Types by participants
+- It updates AC Definition to DB with PRIMING as status
+- It triggers the execution to send a broadcast PARTICIPANT_PRIME message
+- the message is built by ParticipantPrimePublisher using Tosca Service Template data
+
+Create of a Automation Composition Instance
++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" endpoint with a Automation Composition Instance as body. It have to contain the compositionId
 - runtime-ACM receives the call by Rest-Api (InstantiationController)
 - runtime-ACM receives the call by Rest-Api (InstantiationController)
-- It validates the Automation Composition
-- It saves the Automation Composition to DB
-- Design of an update of a Automation Composition
-- GUI calls PUT "/instantiation" endpoint with a Automation Composition as body
+- It validates the AC Instance and checks that the related composition has COMMISSIONED as status
+- It set the related participantId into the AC Element Instance using the participantId defined in AC Element Type Definition
+- It saves the Automation Composition to DB with UNDEPLOYED deployState and NONE lockState
+- the Rest-Api call returns the instanceId and the list of AC Element Instance
+
+Update of a Automation Composition Instance
++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" endpoint with a Automation Composition Instance as body. It have to contain the compositionId and the instanceId
 - runtime-ACM receives the call by Rest-Api (InstantiationController)
 - runtime-ACM receives the call by Rest-Api (InstantiationController)
-- It validates the Automation Composition
-- It saves the Automation Composition to DB
+- It checks that AC Instance is in UNDEPLOYED deployState
+- It updates the Automation Composition to DB
+- the Rest-Api call returns the instanceId and the list of AC Element Instance
 
 
-Delete of a Automation Composition
-++++++++++++++++++++++++++++++++++
-- GUI calls DELETE "/instantiation" endpoint
-- runtime-ACM receives the call by Rest-Api (InstantiationController)
-- It checks that Automation Composition is in UNINITIALISED status
-- It deletes the Automation Composition from DB
+Issues AC instance to change status
++++++++++++++++++++++++++++++++++++
 
 
-"issues Automation Composition commands to Automation Compositions"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+case **deployOrder: DEPLOY**
 
 
-case **UNINITIALISED to PASSIVE**
-
-- GUI calls "/instantiation/command" endpoint with PASSIVE as orderedState
-- runtime-ACM checks if participants registered are matching with the list of Automation Composition Element
-- It updates Automation Composition and Automation Composition elements to DB (orderedState = PASSIVE)
-- It validates the status order issued
-- It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_UPDATE message
-- the message is built by AutomationCompositionUpdatePublisher using Tosca Service Template data and AutomationComposition data. (with startPhase = 0)
-- It updates Automation Composition and Automation Composition elements to DB (state = UNINITIALISED2PASSIVE)
+- GUI calls "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" endpoint with DEPLOY as deployOrder
+- runtime-ACM receives the call by Rest-Api (InstantiationController)
+- It validates the status order issued (related AC Instance has UNDEPLOYED as deployState)
+- It updates the AC Instance to DB with DEPLOYING deployState
+- It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_DEPLOY message
+- the message is built by AutomationCompositionDeployPublisher using Tosca Service Template data and Instance data. (with startPhase = first startPhase)
 
 
-case **PASSIVE to UNINITIALISED**
+case **lockOrder: UNLOCK**
 
 
-- GUI calls "/instantiation/command" endpoint with UNINITIALISED as orderedState
-- runtime-ACM checks if participants registered are matching with the list of Automation Composition Element
-- It updates Automation Composition and Automation Composition elements to DB (orderedState = UNINITIALISED)
-- It validates the status order issued
+- GUI calls "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" endpoint with UNLOCK as lockOrder
+- runtime-ACM receives the call by Rest-Api (InstantiationController)
+- It validates the status order issued (related AC Instance has DEPLOYED as deployState and LOCK as lockOrder)
+- It updates the AC Instance to DB with LOCKING lockOrder
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
-- the message is built by AutomationCompositionStateChangePublisher with automationcompositionId
-- It updates Automation Composition and Automation Composition elements to DB (state = PASSIVE2UNINITIALISED)
+- the message is built by AutomationCompositionStateChangePublisher using Instance data. (with startPhase = first startPhase)
 
 
-case **PASSIVE to RUNNING**
+case **lockOrder: LOCK**
 
 
-- GUI calls "/instantiation/command" endpoint with RUNNING as orderedState
-- runtime-ACM checks if participants registered are matching with the list of Automation Composition Element.
-- It updates Automation Composition and Automation Composition elements to DB (orderedState = RUNNING)
-- It validates the status order issued
+- GUI calls "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" endpoint with LOCK as lockOrder
+- runtime-ACM receives the call by Rest-Api (InstantiationController)
+- It validates the status order issued (related AC Instance has DEPLOYED as deployState and UNLOCK as lockOrder)
+- It updates the AC Instance to DB with UNLOCKING lockOrder
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
-- the message is built by AutomationCompositionStateChangePublisher with automationcompositionId
-- It updates Automation Composition and Automation Composition elements to DB (state = PASSIVE2RUNNING)
+- the message is built by AutomationCompositionStateChangePublisher using Instance data. (with startPhase = last StartPhase)
 
 
-case **RUNNING to PASSIVE**
+case **deployOrder: UNDEPLOY**
 
 
-- GUI calls "/instantiation/command" endpoint with UNINITIALISED as orderedState
-- runtime-ACM checks if participants registered are matching with the list of Automation Composition Element
-- It updates Automation Composition and Automation Composition elements to db (orderedState = RUNNING)
-- It validates the status order issued
+- GUI calls "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" endpoint with UNDEPLOY as deployOrder
+- runtime-ACM receives the call by Rest-Api (InstantiationController)
+- It validates the status order issued (related AC Instance has DEPLOYED as deployState and LOCK as lockOrder)
+- It updates the AC Instance to DB with UNDEPLOYING deployState
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
 - It triggers the execution to send a broadcast AUTOMATION_COMPOSITION_STATE_CHANGE message
-- the message is built by AutomationCompositionStateChangePublisher with automationcompositionId
-- It updates Automation Composition and Automation Composition elements to db (state = RUNNING2PASSIVE)
+- the message is built by AutomationCompositionStateChangePublisher using Instance data. (with startPhase = last StartPhase)
+
+Delete of a Automation Composition Instance
++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls DELETE "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" endpoint
+- runtime-ACM receives the call by Rest-Api (InstantiationController)
+- It checks that AC Instance is in UNDEPLOYED deployState
+- It deletes the AC Instance from DB
+
+Depriming of a Automation Composition Definition Type
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls POST "/onap/policy/clamp/acm/v2/compositions/{compositionId}" endpoint with DEPRIME as primeOrder
+- runtime-ACM receives the call by Rest-Api (CommissioningController)
+- It checks that Automation Composition Type Definition is in PRIMED status
+- It updates AC Definition to DB with DEPRIMING as status
+- It triggers the execution to send a broadcast PARTICIPANT_PRIME message
+- the message is built by ParticipantPrimePublisher using Tosca Service Template data
+
+Delete of a Automation Composition Definition Type
+++++++++++++++++++++++++++++++++++++++++++++++++++
+- GUI calls DELETE "/onap/policy/clamp/acm/v2/compositions/{compositionId}" endpoint
+- runtime-ACM receives the call by Rest-Api (CommissioningController)
+- It checks that AC Definition Type is in COMMISSIONED status
+- It deletes the Automation Composition Type from DB
 
 StartPhase
 **********
 
 StartPhase
 **********
@@ -137,80 +177,72 @@ Example where it could be used:
     description: Automation Composition element for the http requests of PMSH microservice
     properties:
       provider: ONAP
     description: Automation Composition element for the http requests of PMSH microservice
     properties:
       provider: ONAP
-      participant_id:
-        name: HttpParticipant0
-        version: 1.0.0
-      participantType:
-        name: org.onap.acm.HttpAutomationCompositionParticipant
-        version: 2.3.4
       uninitializedToPassiveTimeout: 180
       startPhase: 1
 
 How StartPhase works
 ++++++++++++++++++++
       uninitializedToPassiveTimeout: 180
       startPhase: 1
 
 How StartPhase works
 ++++++++++++++++++++
-In state changes from UNITITIALISED → PASSIVE, Automation Composition elements are started in increasing order of their startPhase.
+In state changes from UNDEPLOYED → DEPLOYED or LOCKED → UNLOCKED, Automation Composition elements are started in increasing order of their startPhase.
 
 
-Example with Http_PMSHMicroserviceAutomationCompositionElement with startPhase to 1 and PMSH_K8SMicroserviceAutomationCompositionElement with startPhase to 0
+Example of DEPLOY order with Http_PMSHMicroserviceAutomationCompositionElement with startPhase to 1 and PMSH_K8SMicroserviceAutomationCompositionElement with startPhase to 0
 
 
-- runtime-ACM sends a broadcast AUTOMATION_COMPOSITION_UPDATE message to all participants with startPhase = 0
-- participant receives the AUTOMATION_COMPOSITION_UPDATE message and runs to PASSIVE state (only CL elements defined as startPhase = 0)
-- runtime-ACM receives AUTOMATION_COMPOSITION_UPDATE_ACT messages from participants and set the state (from the CL element of the message) to PASSIVE
-- runtime-ACM calculates that all CL elements with startPhase = 0 are set to proper state and sends a broadcast AUTOMATION_COMPOSITION_UPDATE message with startPhase = 1
-- participant receives the AUTOMATION_COMPOSITION_UPDATE message and runs to PASSIVE state (only CL elements defined as startPhase = 1)
-- runtime-ACM calculates that all CL elements are set to proper state and set CL to PASSIVE
+- runtime-ACM sends a broadcast AUTOMATION_COMPOSITION_DEPLOY message to all participants with startPhase = 0
+- participant receives the AUTOMATION_COMPOSITION_DEPLOY message and runs to DEPLOYED state (only AC elements defined as startPhase = 0)
+- runtime-ACM receives AUTOMATION_COMPOSITION_DEPLOY_ACK messages from participants and set the state (from the AC element of the message) to DEPLOYED
+- runtime-ACM calculates that all AC elements with startPhase = 0 are set to proper state and sends a broadcast AUTOMATION_COMPOSITION_DEPLOY message with startPhase = 1
+- participant receives the AUTOMATION_COMPOSITION_DEPLOY message and runs to DEPLOYED state (only AC elements defined as startPhase = 1)
+- runtime-ACM receives AUTOMATION_COMPOSITION_DEPLOY_ACK messages from participants and set the state (from the AC element of the message) to DEPLOYED
+- runtime-ACM calculates that all AC elements are set to proper state and set AC to DEPLOYED
 
 
-In that scenario the message AUTOMATION_COMPOSITION_UPDATE has been sent two times.
+In that scenario the message AUTOMATION_COMPOSITION_DEPLOY has been sent two times.
 
 Design of managing messages
 ***************************
 
 PARTICIPANT_REGISTER
 ++++++++++++++++++++
 
 Design of managing messages
 ***************************
 
 PARTICIPANT_REGISTER
 ++++++++++++++++++++
-- A participant starts and send a PARTICIPANT_REGISTER message
-- ParticipantRegisterListener collects the message from DMaap
-- if not present, it saves participant reference with status UNKNOWN to DB
-- if is present a Automation Composition Type, it triggers the execution to send a PARTICIPANT_UPDATE message to the participant registered (message of Priming)
-- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
-- It triggers the execution to send a PARTICIPANT_REGISTER_ACK message to the participant registered
-- MessageIntercept intercepts that event, if PARTICIPANT_UPDATE message has been sent, it will be add a task to handle PARTICIPANT_REGISTER in SupervisionScanner
-- SupervisionScanner starts the monitoring for participantUpdate
-
-PARTICIPANT_UPDATE_ACK
+- A participant starts and send a PARTICIPANT_REGISTER message with participantId and supported Element Types
+- runtime-ACM collects the message from Message Broker by ParticipantRegisterListener
+- if not present, it saves participant reference with status ON_LINE to DB
+
+PARTICIPANT_PRIME_ACK
 ++++++++++++++++++++++
 ++++++++++++++++++++++
-- A participant sends PARTICIPANT_UPDATE_ACK message in response to a PARTICIPANT_UPDATE message
-- ParticipantUpdateAckListener collects the message from DMaap
-- MessageIntercept intercepts that event and adds a task to handle PARTICIPANT_UPDATE_ACK in SupervisionScanner
-- SupervisionScanner removes the monitoring for participantUpdate
-- It updates the status of the participant to DB
+- A participant sends PARTICIPANT_PRIME_ACK message in response to a PARTICIPANT_PRIME message
+- ParticipantPrimeAckListener collects the message from Message Broker
+- It updates AC Definition to DB with PRIMED/DEPRIMED as status
 
 PARTICIPANT_STATUS
 ++++++++++++++++++
 
 PARTICIPANT_STATUS
 ++++++++++++++++++
-- A participant sends a scheduled PARTICIPANT_STATUS message
-- ParticipantStatusListener collects the message from DMaap
+- A participant sends a scheduled PARTICIPANT_STATUS message with participantId and supported Element Types
+- runtime-ACM collects the message from Message Broker by ParticipantStatusListener
+- if not present, it saves participant reference with status ON_LINE to DB
 - MessageIntercept intercepts that event and adds a task to handle PARTICIPANT_STATUS in SupervisionScanner
 - SupervisionScanner clears and starts the monitoring for participantStatus
 
 - MessageIntercept intercepts that event and adds a task to handle PARTICIPANT_STATUS in SupervisionScanner
 - SupervisionScanner clears and starts the monitoring for participantStatus
 
-AUTOMATION_COMPOSITION_UPDATE_ACK
+AUTOMATION_COMPOSITION_DEPLOY_ACK
 +++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++
-- A participant sends AUTOMATION_COMPOSITION_UPDATE_ACK message in response to a AUTOMATION_COMPOSITION_UPDATE  message. It will send a AUTOMATION_COMPOSITION_UPDATE_ACK - for each CL-elements moved to the ordered state as indicated by the AUTOMATION_COMPOSITION_UPDATE
-- AutomationCompositionUpdateAckListener collects the message from DMaap
-- It checks the status of all Automation Composition elements and checks if the Automation Composition is primed
-- It updates the CL to DB if it is changed
+- A participant sends AUTOMATION_COMPOSITION_DEPLOY_ACK message in response to a AUTOMATION_COMPOSITION_DEPLOY message. It will send a AUTOMATION_COMPOSITION_DEPLOY_ACK - for each AC elements moved to the DEPLOYED state
+- AutomationCompositionUpdateAckListener collects the message from Message Broker
+- It checks the status of all Automation Composition elements and checks if the Automation Composition is fully DEPLOYED
+- It updates the AC to DB
 - MessageIntercept intercepts that event and adds a task to handle a monitoring execution in SupervisionScanner
 
 AUTOMATION_COMPOSITION_STATECHANGE_ACK
 ++++++++++++++++++++++++++++++++++++++
 - MessageIntercept intercepts that event and adds a task to handle a monitoring execution in SupervisionScanner
 
 AUTOMATION_COMPOSITION_STATECHANGE_ACK
 ++++++++++++++++++++++++++++++++++++++
-Design of a AUTOMATION_COMPOSITION_STATECHANGE_ACK is similar to the design for AUTOMATION_COMPOSITION_UPDATE_ACK
+- A participant sends AUTOMATION_COMPOSITION_STATECHANGE_ACK message in response to a AUTOMATION_COMPOSITION_STATECHANGE message. It will send a AUTOMATION_COMPOSITION_DEPLOY_ACK - for each AC elements moved to the ordered state
+- AutomationCompositionStateChangeAckListener collects the message from Message Broker
+- It checks the status of all Automation Composition elements and checks if the transition process of the Automation Composition is terminated
+- It updates the AC to DB
+- MessageIntercept intercepts that event and adds a task to handle a monitoring execution in SupervisionScanner
 
 Design of monitoring execution in SupervisionScanner
 ****************************************************
 Monitoring is designed to process the follow operations:
 
 
 Design of monitoring execution in SupervisionScanner
 ****************************************************
 Monitoring is designed to process the follow operations:
 
-- to determine the next startPhase in a AUTOMATION_COMPOSITION_UPDATE message
-- to update CL state: in a scenario that "AutomationComposition.state" is in a kind of transitional state (example UNINITIALISED2PASSIVE), if all  - CL-elements are moved properly to the specific state, the "AutomationComposition.state" will be updated to that and saved to DB
-- to retry AUTOMATION_COMPOSITION_UPDATE/AUTOMATION_COMPOSITION_STATE_CHANGE messages. if there is a CL Element not in the proper state, it will retry a broadcast message
-- to retry PARTICIPANT_UPDATE message to the participant in a scenario that runtime-ACM do not receive PARTICIPANT_UPDATE_ACT from it
-- to send PARTICIPANT_STATUS_REQ to the participant in a scenario that runtime-ACM do not receive PARTICIPANT_STATUS from it
+- to determine the next startPhase in a AUTOMATION_COMPOSITION_DEPLOY message
+- to update AC deployState: in a scenario that "AutomationComposition.deployState" is in a kind of transitional state (example DEPLOYING), if all  - AC elements are moved properly to the specific state, the "AutomationComposition.deployState" will be updated to that and saved to DB
+- to update AC lockState: in a scenario that "AutomationComposition.lockState" is in a kind of transitional state (example LOCKING), if all  - AC elements are moved properly to the specific state, the "AutomationComposition.lockState" will be updated to that and saved to DB
+- to retry AUTOMATION_COMPOSITION_DEPLOY/AUTOMATION_COMPOSITION_STATE_CHANGE messages. if there is a AC Element not in the proper state, it will retry a broadcast message
 
 The solution Design of retry, timeout, and reporting for all Participant message dialogues are implemented into the monitoring execution.
 
 
 The solution Design of retry, timeout, and reporting for all Participant message dialogues are implemented into the monitoring execution.