Versions Compared

Key

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

In the current implementation, ACM supports multi-participant with same supported element Type but different participantId, so they need different properties file.

...

  • In a scenario of high number of compositions, if participant is restarting it will be slow-down the restarting action: AC-runtime will send a message for each composition primed and instance deployed to the participant.
    To avoid the restarting action, participant needs a database support;
  • In a scenario where a participant is stuck in deploying, the instance will be in TIMEOUT and the user can take action like deploy again or undeploy. In that scenario the intermediary-participant has to receive the next message, kill the thread that is stuck in deploying and create a new thread.
  • In a scenario where we are increasing the number or participants, could be useful to have different topic name for source and sink. This solution will eliminate the number of useless messages in kafka.
    Example: 
    • for ACM-runtime:
      • sink: POLICY-ACM-PARTICIPANT
      • source: POLICY-ACM-RUNTIME
    • for participant: 
      • sink: POLICY-ACM-RUNTIME
      • source: POLICY-ACM-PARTICIPANT


Solution

Add dynamic participantId support and add database support,

...

  • Distributed Coordinator ED (Etcd): Distributed systems use etcd as a consistent key-value store for configuration management, service discovery, and coordinating distributed work. Many organizations use etcd to implement production systems such as container schedulers, service discovery services, and distributed data storage.

  • Document Database PG (PostgreSql)
  • Key Value Database AG (Apache Geode): Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing.(https://geode.apache.org/docs/guide/114/getting_started/intro_to_clients.html) or (https://docs.spring.io/spring-boot-data-geode-build/1.7.5/reference/html5/).
  • Key Value Database RD (Redis): RDB is NOT good if you need to minimize the chance of data loss in case Redis stops working.
  • Wide Column Database CD (Apache Cassandra)
  • Search Engine (Open Search): It supports Rest Api, https://opensearch.org/docs/latest/clients/java/

...

Create a composition index

PUT https://{{address}}:9200/compositions


Code Block
languagexml
collapsetrue
{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 1
    }
  },
  "mappings": {
    "properties": {
      "compositionId": {
        "type": "text"
      }
    }
  }
}

Create a composition document

POST https://{{address}}:9200/compositions/_doc/0da7f17d-68d4-47f3-9dbf-b380413c5fad

Code Block
languagexml
collapsetrue
{
  "compositionId": "0da7f17d-68d4-47f3-9dbf-b380413c5fad",
  "automationCompositionElementDefinitionList": [
    {
      "acElementDefinitionId": {
        "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement",
        "version": "1.2.3"
      },
      "automationCompositionElementToscaNodeTemplate": {
        "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
        "type_version": "1.0.0",
        "properties": {
          "provider": "ONAP",
          "startPhase": 0,
          "uninitializedToPassiveTimeout": 180,
          "podStatusCheckInterval": 30
        },
        "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement",
        "version": "1.2.3",
        "metadata": {},
        "description": "Automation composition element for the K8S microservice for AC Element Starter"
      },
      "outProperties": {}
    },
    {
      "acElementDefinitionId": {
        "name": "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement",
        "version": "1.2.3"
      },
      "automationCompositionElementToscaNodeTemplate": {
        "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
        "type_version": "1.0.0",
        "properties": {
          "provider": "ONAP",
          "startPhase": 0,
          "uninitializedToPassiveTimeout": 180,
          "podStatusCheckInterval": 30
        },
        "name": "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement",
        "version": "1.2.3",
        "metadata": {},
        "description": "Automation composition element for the K8S microservice for AC Element Bridge"
      },
      "outProperties": {}
    },
    {
      "acElementDefinitionId": {
        "name": "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement",
        "version": "1.2.3"
      },
      "automationCompositionElementToscaNodeTemplate": {
        "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
        "type_version": "1.0.0",
        "properties": {
          "provider": "ONAP",
          "startPhase": 0,
          "uninitializedToPassiveTimeout": 180,
          "podStatusCheckInterval": 30
        },
        "name": "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement",
        "version": "1.2.3",
        "metadata": {},
        "description": "Automation composition element for the K8S microservice for AC Element Sink"
      },
      "outProperties": {}
    }
  ]
}

Fetch a composition document

GET https://{{address}}:9200/compositions/_doc/0da7f17d-68d4-47f3-9dbf-b380413c5fad

Create an instance index

PUT https://{{address}}:9200/instances

Code Block
languagexml
collapsetrue
{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 1
    }
  },
  "mappings": {
    "properties": {
      "instanceId": {
        "type": "text"
      }
    }
  }
}

...

Create an instance document

POST https://{{address}}:9200/instances/_doc/caf50cde-11a2-4915-a49c-609762714a6f

Code Block
languagexml
collapsetrue
{
    "instanceId": "caf50cde-11a2-4915-a49c-609762714a6f",
    "compositionId": "0da7f17d-68d4-47f3-9dbf-b380413c5fad",
    "deployState": "DEPLOYED",
    "lockState": "LOCKED",
    "elements": {
        "709c62b3-8918-41b9-a747-d21eb79c6c23": {
            "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
            "definition": {
                "name": "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement",
                "version": "1.2.3"
            },
            "deployState": "DEPLOYED",
            "lockState": "LOCKED",
            "properties": {
                "baseUrl": "http://10.101.0.249:30802",
                "httpHeaders": {
                    "Content-Type": "application/json",
                    "Authorization": "Basic YWNtVXNlcjp6YiFYenRHMzQ="
                },
                "configurationEntities": [
                    {
                        "configurationEntityId": {
                            "name": "onap.policy.clamp.ac.sink",
                            "version": "1.0.0"
                        },
                        "restSequence": [
                            {
                                "restRequestId": {
                                    "name": "request3",
                                    "version": "1.0.1"
                                },
                                "httpMethod": "POST",
                                "path": "/activate",
                                "body": "{ \"receiverId\": { \"name\": \"onap.policy.clamp.ac.sink\", \"version\": \"1.0.0\" }, \"timerMs\": 20000, \"elementType\": \"SINK\", \"topicParameterGroup\": { \"server\": \"message-router\", \"listenerTopic\": \"POLICY_UPDATE_MSG\", \"publisherTopic\": \"AC_ELEMENT_MSG\", \"fetchTimeout\": 15000, \"topicCommInfrastructure\": \"dmaap\" } }",
                                "expectedResponse": 201
                            }
                        ]
                    }
                ]
            },
            "outProperties": {}
        },
        "709c62b3-8918-41b9-a747-d21eb79c6c24": {
            "id": "709c62b3-8918-41b9-a747-d21eb79c6c24",
            "definition": {
                "name": "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement",
                "version": "1.2.3"
            },
            "deployState": "DEPLOYED",
            "lockState": "LOCKED",
            "properties": {
                "baseUrl": "http://10.101.0.249:30800",
                "httpHeaders": {
                    "Content-Type": "application/json",
                    "Authorization": "Basic YWNtVXNlcjp6YiFYenRHMzQ="
                },
                "configurationEntities": [
                    {
                        "configurationEntityId": {
                            "name": "onap.policy.clamp.ac.starter",
                            "version": "1.0.0"
                        },
                        "restSequence": [
                            {
                                "restRequestId": {
                                    "name": "request1",
                                    "version": "1.0.1"
                                },
                                "httpMethod": "POST",
                                "path": "/activate",
                                "body": "{ \"receiverId\": { \"name\": \"onap.policy.clamp.ac.startertobridge\", \"version\": \"1.0.0\" }, \"timerMs\": 20000, \"elementType\": \"STARTER\", \"topicParameterGroup\": { \"server\": \"message-router:3904\", \"listenerTopic\": \"POLICY_UPDATE_MSG\", \"publisherTopic\": \"AC_ELEMENT_MSG\", \"fetchTimeout\": 15000, \"topicCommInfrastructure\": \"dmaap\" } }",
                                "expectedResponse": 201
                            }
                        ]
                    }
                ]
            },
            "outProperties": {}
        },
        "709c62b3-8918-41b9-a747-d21eb79c6c25": {
            "id": "709c62b3-8918-41b9-a747-d21eb79c6c25",
            "definition": {
                "name": "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement",
                "version": "1.2.3"
            },
            "deployState": "DEPLOYED",
            "lockState": "LOCKED",
            "properties": {
                "baseUrl": "http://10.101.0.249:30801",
                "httpHeaders": {
                    "Content-Type": "application/json",
                    "Authorization": "Basic YWNtVXNlcjp6YiFYenRHMzQ="
                },
                "configurationEntities": [
                    {
                        "configurationEntityId": {
                            "name": "onap.policy.clamp.ac.bridge",
                            "version": "1.0.0"
                        },
                        "restSequence": [
                            {
                                "restRequestId": {
                                    "name": "request2",
                                    "version": "1.0.1"
                                },
                                "httpMethod": "POST",
                                "path": "/activate",
                                "body": "{ \"receiverId\": { \"name\": \"onap.policy.clamp.ac.bridgetosink\", \"version\": \"1.0.0\" }, \"timerMs\": 20000, \"elementType\": \"BRIDGE\", \"topicParameterGroup\": { \"server\": \"message-router:3904\", \"listenerTopic\": \"POLICY_UPDATE_MSG\", \"publisherTopic\": \"AC_ELEMENT_MSG\", \"fetchTimeout\": 15000, \"topicCommInfrastructure\": \"dmaap\" } }",
                                "expectedResponse": 201
                            }
                        ]
                    }
                ]
            },
            "outProperties": {}
        }
    },
    "stateChangeResult": "NO_ERROR"
}

Fetch an instance document

GET https://{{address}}:9200/instances/_doc/caf50cde-11a2-4915-a49c-609762714a6f