.. This work is licensed under a Creative Commons Attribution 4.0 International License. | |
.. http://creativecommons.org/licenses/by/4.0 | |
.. _design: | |
Design | |
====== | |
There are 4 processes created as below | |
Main process | |
------------ | |
This is the initial process which does the following. | |
- Download CBS configuration and update the vnf_table_1 | |
- Spawns HB worker process, DB Monitoring process and CBS polling | |
process (if required) | |
- Periodically update the hb_common table | |
HB worker process | |
----------------- | |
This process is created by main process and does the following. | |
- It waits on the HB Json event message from DMaaP message router | |
- It receives the HB Json message and retrieves sourceName, | |
lastEpochTime, eventName in the incoming message | |
- It checks for the received eventName against the eventName in | |
vnf_table_1. If eventName is not matched, then it discards the | |
message. | |
- It checks for the received sourceName in the vnf_table_2. If the | |
sourceName is already there in vnf_table_2, then it updates the | |
received HB Json message in vnf_table_2 against that sourceName. If | |
the sourceName is not there in vnf_table_2, then it adds an entry in | |
vnf_table_2 for that eventName and increments the sourceName count in | |
vnf_table_1 | |
DB Monitoring process | |
--------------------- | |
This process is created by main process and does the following. | |
- The DB monitoring process scans through each entry of vnf_table_1 and | |
looks at the corresponding vnf_table_2 and checks the condition for | |
Control Loop event is met or not | |
- If it finds that the multiple consecutive HB are missed, it raises | |
the Control Loop event. | |
- It also clears the control loop event by looking at recently received | |
HB message. | |
- Because of reconfiguration procedure, some of the existing entries in | |
vnf_table_1 may become invalid. DB Monitoring process would clean the | |
DB by looking at validity flag maintained in each vnf_table_1 table | |
entry. If not valid, it removes the entry in vnf_table_1 and also | |
removes the corresponding entries of vnf_table_2. | |
CBS polling process | |
------------------- | |
If the local configuration file (config/hbproperties.yaml) indicates | |
that CBS polling is required, then main process would create the CBS | |
polling process. It does the following. | |
- It takes the CBS polling interval from the configuration file. | |
- For every CBS polling interval, it sets the hb_common with state as | |
reconfiguration to indicate the main process to download CBS | |
configuration | |
CBS configuration download support | |
---------------------------------- | |
Apart from the above, a function/method is provided to Docker container | |
that would download the CBS configuration whenever the configuration | |
changes. This method/function would read hb_common state and change the | |
state to reconfiguration. | |
Heartbeat Microserice Multi instance support | |
-------------------------------------------- | |
In order to work smoothly in an environment having multiple HB micro | |
services instances, processes would work differently as mentioned below. | |
**Main Process:** | |
Active Instance: | |
- Download CBS configuration and process it | |
- Spawns processes | |
- Periodically update hb_common with last accessed time to indicate that active instance is Alive. | |
Inactive Instance: | |
- Spawns processes | |
- Constantly check hb_common entry for last accessed time | |
- If the last accessed time is more than a minute or so, then it assumes the role of active instance | |
**HB worker process:** Both active and inactive instance behaves the sames as metnioned in the Design section. | |
**DB Monitoring process:** Both active periodically checks its process ID/hostname with hb_common data to know whether it is an active instance or not. If inactive instance it does nothing. If active instance, it behaves as mentioned in design section. | |
**CBS Polling process:** Periodically checks its process ID/hostname with hb_common data to know whether it is an active instance or not. If inactive instance it does nothing. If active instance, it behaves as mentioned in design section. | |
Handling of some of the failure scenarios | |
----------------------------------------- | |
Failure to download the configuration from CBS – In this case, local | |
configuration file etc/config.json is considered as the configuration | |
file and vnf_table_1 is updated accordingly. | |
The Reconfiguration procedure is as below | |
----------------------------------------- | |
- If the state is Reconfiguration, then HB worker process, DB | |
monitoring process and CBS polling process would wait for | |
reconfiguration to complete. | |
- Set each entry as invalid by using validity flag in vnf_table_1 | |
- Download the json file from CBS. | |
- Set the validity flag to indicate to valid when an entry is updated. | |
Postgres Database | |
----------------- | |
There are 3 tables maintained. | |
**Vnf_table_1 table:** | |
This is table is indexed by eventName. Each entry | |
has following parameters in it. | |
- eventName | |
- Configured heartbeat Missed Count | |
- Configured Heartbeat Interval | |
- Number of SourceName having same eventName | |
- Validity flag that indicates VNF entry is valid or not | |
- It also has following parameter related to Control loop event | |
- policyVersion | |
- policyName | |
- policyScope | |
- target_type | |
- target | |
- closedLoopControlName | |
- version | |
**Vnf_table_2 table:** | |
For each sourceName there would be an entry in vnf_table_2. | |
This is indexed by eventName and SourceName. Each entry has | |
below parameters | |
- SourceName | |
- Last received heartbeat epoch time | |
- Control loop event raised flag. 0 indicates not raised, 1 indicates | |
CL event raised | |
**hb_common table:** | |
This is a single entry table. | |
- The configuration status which would have one of the below. | |
- **RECONFIGURATION** – indicates CBS configuration processing is in | |
progress. | |
- **RUNNING** – CBS configuration is completed and ready to process HB | |
event and send CL event. | |
- The process ID – This indicates the main process ID of the active HB | |
instance which is responsible to take care of reconfiguration | |
- The source Name – It has 2 parts, hostname and service name. The | |
hostname is the Docker container ID. The service name is the | |
environment variable set for SERVICE_NAME | |
- The last accessed time – The time last accessed by the main process | |
having the above process ID. |