Enhanced Feature table to support 'always_enabled' value for state and auto-restart fields. (#6000)
Added new flag value 'always_enabled' for the state and auto-restart field of feature table init_cfg.json is updated to initialize state field of database/swss/syncd/teamd feature and auto-restart field of database feature as always_enabled Once the state/auto-restart value is initialized as "always_enabled" it is immutable and cannot be change via feature config commands. (config feature..) PR#Azure/sonic-utilities#1271 hostcfgd will not take any action if state field value is 'always_enabled' Since we have always_enabled field for auto-restart updated supervisor-proc-exit-listener not to have special check for database and always rely on value from Feature table.
This commit is contained in:
parent
7fca9f6c69
commit
fad481edc1
@ -18,15 +18,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{%- set features = [("bgp", "enabled", false, "enabled"),
|
{%- set features = [("bgp", "enabled", false, "enabled"),
|
||||||
("database", "enabled", false, "disabled"),
|
("database", "always_enabled", false, "always_enabled"),
|
||||||
("dhcp_relay", "enabled", false, "enabled"),
|
("dhcp_relay", "enabled", false, "enabled"),
|
||||||
("lldp", "enabled", false, "enabled"),
|
("lldp", "enabled", false, "enabled"),
|
||||||
("pmon", "enabled", false, "enabled"),
|
("pmon", "enabled", false, "enabled"),
|
||||||
("radv", "enabled", false, "enabled"),
|
("radv", "enabled", false, "enabled"),
|
||||||
("snmp", "enabled", true, "enabled"),
|
("snmp", "enabled", true, "enabled"),
|
||||||
("swss", "enabled", false, "enabled"),
|
("swss", "always_enabled", false, "enabled"),
|
||||||
("syncd", "enabled", false, "enabled"),
|
("syncd", "always_enabled", false, "enabled"),
|
||||||
("teamd", "enabled", false, "enabled")] %}
|
("teamd", "always_enabled", false, "enabled")] %}
|
||||||
{%- if sonic_asic_platform == "vs" %}{% do features.append(("gbsyncd", "enabled", false, "enabled")) %}{% endif %}
|
{%- if sonic_asic_platform == "vs" %}{% do features.append(("gbsyncd", "enabled", false, "enabled")) %}{% endif %}
|
||||||
{%- if include_iccpd == "y" %}{% do features.append(("iccpd", "disabled", false, "enabled")) %}{% endif %}
|
{%- if include_iccpd == "y" %}{% do features.append(("iccpd", "disabled", false, "enabled")) %}{% endif %}
|
||||||
{%- if include_mgmt_framework == "y" %}{% do features.append(("mgmt-framework", "enabled", true, "enabled")) %}{% endif %}
|
{%- if include_mgmt_framework == "y" %}{% do features.append(("mgmt-framework", "enabled", true, "enabled")) %}{% endif %}
|
||||||
|
@ -77,27 +77,26 @@ def main(argv):
|
|||||||
groupname = payload_headers['groupname']
|
groupname = payload_headers['groupname']
|
||||||
|
|
||||||
# Read the status of auto-restart feature from Config_DB.
|
# Read the status of auto-restart feature from Config_DB.
|
||||||
if container_name != 'database':
|
config_db = swsssdk.ConfigDBConnector()
|
||||||
config_db = swsssdk.ConfigDBConnector()
|
config_db.connect()
|
||||||
config_db.connect()
|
features_table = config_db.get_table(FEATURE_TABLE_NAME)
|
||||||
features_table = config_db.get_table(FEATURE_TABLE_NAME)
|
if not features_table:
|
||||||
if not features_table:
|
syslog.syslog(syslog.LOG_ERR, "Unable to retrieve features table from Config DB. Exiting...")
|
||||||
syslog.syslog(syslog.LOG_ERR, "Unable to retrieve features table from Config DB. Exiting...")
|
sys.exit(2)
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
if container_name not in features_table:
|
if container_name not in features_table:
|
||||||
syslog.syslog(syslog.LOG_ERR, "Unable to retrieve feature '{}'. Exiting...".format(container_name))
|
syslog.syslog(syslog.LOG_ERR, "Unable to retrieve feature '{}'. Exiting...".format(container_name))
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
|
||||||
restart_feature = features_table[container_name].get('auto_restart')
|
restart_feature = features_table[container_name].get('auto_restart')
|
||||||
if not restart_feature:
|
if not restart_feature:
|
||||||
syslog.syslog(syslog.LOG_ERR, "Unable to determine auto-restart feature status for '{}'. Exiting...".format(container_name))
|
syslog.syslog(syslog.LOG_ERR, "Unable to determine auto-restart feature status for '{}'. Exiting...".format(container_name))
|
||||||
sys.exit(4)
|
sys.exit(4)
|
||||||
|
|
||||||
# If container is database or auto-restart feature is enabled and at the same time
|
# If auto-restart feature is not disabled and at the same time
|
||||||
# a critical process exited unexpectedly, terminate supervisor
|
# a critical process exited unexpectedly, terminate supervisor
|
||||||
if ((container_name == 'database' or restart_feature == 'enabled') and expected == 0 and
|
if (restart_feature != 'disabled' and expected == 0 and
|
||||||
(processname in critical_process_list or groupname in critical_group_list)):
|
(processname in critical_process_list or groupname in critical_group_list)):
|
||||||
MSG_FORMAT_STR = "Process {} exited unxepectedly. Terminating supervisor..."
|
MSG_FORMAT_STR = "Process {} exited unxepectedly. Terminating supervisor..."
|
||||||
msg = MSG_FORMAT_STR.format(payload_headers['processname'])
|
msg = MSG_FORMAT_STR.format(payload_headers['processname'])
|
||||||
syslog.syslog(syslog.LOG_INFO, msg)
|
syslog.syslog(syslog.LOG_INFO, msg)
|
||||||
|
@ -252,6 +252,10 @@ class HostConfigDaemon:
|
|||||||
|
|
||||||
|
|
||||||
def update_feature_state(self, feature_name, state, feature_table):
|
def update_feature_state(self, feature_name, state, feature_table):
|
||||||
|
if state == "always_enabled":
|
||||||
|
syslog.syslog(syslog.LOG_INFO, "Feature '{}' service is always enabled"
|
||||||
|
.format(feature_name))
|
||||||
|
return
|
||||||
has_timer = ast.literal_eval(feature_table[feature_name].get('has_timer', 'False'))
|
has_timer = ast.literal_eval(feature_table[feature_name].get('has_timer', 'False'))
|
||||||
has_global_scope = ast.literal_eval(feature_table[feature_name].get('has_global_scope', 'True'))
|
has_global_scope = ast.literal_eval(feature_table[feature_name].get('has_global_scope', 'True'))
|
||||||
has_per_asic_scope = ast.literal_eval(feature_table[feature_name].get('has_per_asic_scope', 'False'))
|
has_per_asic_scope = ast.literal_eval(feature_table[feature_name].get('has_per_asic_scope', 'False'))
|
||||||
|
Loading…
Reference in New Issue
Block a user