Skip to content

Commit

Permalink
Added support to render template format of delayed flag on Feature …
Browse files Browse the repository at this point in the history
…Table. (sonic-net#135)

What I did:
Added support to render template format of delayed flag on Feature Table.

Why I did:
To fix: sonic-net/sonic-buildimage#19126

How I verify:
Manual Verification
UT updated

Signed-off-by: Abhishek Dosi <abdosi@microsoft.com>
  • Loading branch information
abdosi authored and mssonicbld committed Jul 9, 2024
1 parent 29a04f5 commit 6fac1c4
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
14 changes: 13 additions & 1 deletion scripts/featured
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class Feature(object):
self.name = feature_name
self.state = self._get_feature_table_key_render_value(feature_cfg.get('state'), device_config or {}, ['enabled', 'disabled', 'always_enabled', 'always_disabled'])
self.auto_restart = feature_cfg.get('auto_restart', 'disabled')
self.delayed = safe_eval(feature_cfg.get('delayed', 'False'))
self.delayed = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('delayed', 'False'), device_config or {}, ['True', 'False']))
self.has_global_scope = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('has_global_scope', 'True'), device_config or {}, ['True', 'False']))
self.has_per_asic_scope = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('has_per_asic_scope', 'False'), device_config or {}, ['True', 'False']))
self.has_per_dpu_scope = safe_eval(feature_cfg.get('has_per_dpu_scope', 'False'))
Expand Down Expand Up @@ -224,6 +224,7 @@ class FeatureHandler(object):
self.update_feature_state(feature)
self.sync_feature_scope(feature)
self.resync_feature_state(feature)
self.sync_feature_delay_state(feature)

def update_feature_state(self, feature):
cached_feature = self._cached_config[feature.name]
Expand Down Expand Up @@ -472,6 +473,17 @@ class FeatureHandler(object):
for ns, db in self.ns_cfg_db.items():
db.mod_entry('FEATURE', feature.name, {'state': feature.state})

def sync_feature_delay_state(self, feature):
current_entry = self._config_db.get_entry('FEATURE', feature.name)
current_feature_delay_state = current_entry.get('delayed') if current_entry else None

if str(feature.delayed) == str(current_feature_delay_state):
return

self._config_db.mod_entry('FEATURE', feature.name, {'delayed': str(feature.delayed)})
for ns, db in self.ns_cfg_db.items():
db.mod_entry('FEATURE', feature.name, {'delayed': str(feature.delayed)})

def set_feature_state(self, feature, state):
self._feature_state_table.set(feature.name, [('state', state)])

Expand Down
1 change: 1 addition & 0 deletions tests/featured/featured_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ def test_feature_config_parsing_defaults(self):
@mock.patch('featured.FeatureHandler.update_systemd_config', mock.MagicMock())
@mock.patch('featured.FeatureHandler.update_feature_state', mock.MagicMock())
@mock.patch('featured.FeatureHandler.sync_feature_scope', mock.MagicMock())
@mock.patch('featured.FeatureHandler.sync_feature_delay_state', mock.MagicMock())
def test_feature_resync(self):
mock_db = mock.MagicMock()
mock_db.get_entry = mock.MagicMock()
Expand Down
32 changes: 32 additions & 0 deletions tests/featured/test_vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@
"set_owner": "kube",
"state": "enabled"
},
"pmon": {
"state": "enabled",
"delayed": "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}False{% else %}True{% endif %}",
"has_global_scope": "False",
"has_per_asic_scope": "True",
"auto_restart": "enabled",
"high_mem_alert": "disabled"
}
},
},
"expected_config_db": {
Expand Down Expand Up @@ -78,6 +86,14 @@
"set_owner": "kube",
"state": "enabled"
},
"pmon": {
"auto_restart": "enabled",
"has_global_scope": "False",
"has_per_asic_scope": "True",
"delayed": "True",
"high_mem_alert": "disabled",
"state": "enabled"
}
},
},
"enable_feature_subprocess_calls": [
Expand Down Expand Up @@ -1095,6 +1111,14 @@
"has_per_asic_scope": "True",
"auto_restart": "enabled",
"high_mem_alert": "disabled"
},
"pmon": {
"state": "enabled",
"delayed": "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}False{% else %}True{% endif %}",
"has_global_scope": "False",
"has_per_asic_scope": "True",
"auto_restart": "enabled",
"high_mem_alert": "disabled"
}
},
},
Expand Down Expand Up @@ -1131,6 +1155,14 @@
"delayed": "False",
"high_mem_alert": "disabled",
"state": "enabled"
},
"pmon": {
"auto_restart": "enabled",
"has_global_scope": "False",
"has_per_asic_scope": "True",
"delayed": "False",
"high_mem_alert": "disabled",
"state": "enabled"
}
},
},
Expand Down

0 comments on commit 6fac1c4

Please sign in to comment.