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.