diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index 8b11f56e25..41d5419398 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -646,7 +646,7 @@ def migrate_routing_config_mode(self): # overwrite the routing-config-mode as per minigraph parser # Criteria for update: # if config mode is missing in base OS or if base and target modes are not same - # Eg. in 201811 mode is "unified", and in newer branches mode is "separated" + # Eg. in 201811 mode is "unified", and in newer branches mode is "separated" if ('docker_routing_config_mode' not in device_metadata_old and 'docker_routing_config_mode' in device_metadata_new) or \ (device_metadata_old.get('docker_routing_config_mode') != device_metadata_new.get('docker_routing_config_mode')): device_metadata_old['docker_routing_config_mode'] = device_metadata_new.get('docker_routing_config_mode') @@ -988,12 +988,14 @@ def version_4_0_0(self): # reading FAST_REBOOT table can't be done with stateDB.get as it uses hget behind the scenes and the table structure is # not using hash and won't work. # FAST_REBOOT table exists only if fast-reboot was triggered. - keys = self.stateDB.keys(self.stateDB.STATE_DB, "FAST_REBOOT|system") - if keys: - enable_state = 'true' - else: - enable_state = 'false' - self.stateDB.set(self.stateDB.STATE_DB, 'FAST_RESTART_ENABLE_TABLE|system', 'enable', enable_state) + keys = self.stateDB.keys(self.stateDB.STATE_DB, "FAST_RESTART_ENABLE_TABLE|system") + if not keys: + keys = self.stateDB.keys(self.stateDB.STATE_DB, "FAST_REBOOT|system") + if keys: + enable_state = 'true' + else: + enable_state = 'false' + self.stateDB.set(self.stateDB.STATE_DB, 'FAST_RESTART_ENABLE_TABLE|system', 'enable', enable_state) self.set_version('version_4_0_1') return 'version_4_0_1' @@ -1010,7 +1012,6 @@ def version_4_0_2(self): Version 4_0_2. """ log.log_info('Handling version_4_0_2') - if self.stateDB.keys(self.stateDB.STATE_DB, "FAST_REBOOT|system"): self.migrate_config_db_flex_counter_delay_status() diff --git a/tests/db_migrator_input/state_db/fast_reboot_upgrade_from_202205.json b/tests/db_migrator_input/state_db/fast_reboot_upgrade_from_202205.json new file mode 100644 index 0000000000..b2e3169d4b --- /dev/null +++ b/tests/db_migrator_input/state_db/fast_reboot_upgrade_from_202205.json @@ -0,0 +1,5 @@ +{ + "FAST_RESTART_ENABLE_TABLE|system": { + "enable": "true" + } +} \ No newline at end of file diff --git a/tests/db_migrator_test.py b/tests/db_migrator_test.py index eead2753d5..26e0c6cc28 100644 --- a/tests/db_migrator_test.py +++ b/tests/db_migrator_test.py @@ -483,6 +483,25 @@ def test_rename_fast_reboot_table_check_enable(self): diff = DeepDiff(resulting_table, expected_table, ignore_order=True) assert not diff + def test_ignore_rename_fast_reboot_table(self): + device_info.get_sonic_version_info = get_sonic_version_info_mlnx + dbconnector.dedicated_dbs['STATE_DB'] = os.path.join(mock_db_path, 'state_db', 'fast_reboot_upgrade_from_202205') + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'empty-config-input') + + import db_migrator + dbmgtr = db_migrator.DBMigrator(None) + dbmgtr.migrate() + + dbconnector.dedicated_dbs['STATE_DB'] = os.path.join(mock_db_path, 'state_db', 'fast_reboot_upgrade_from_202205') + expected_db = SonicV2Connector(host='127.0.0.1') + expected_db.connect(expected_db.STATE_DB) + + resulting_table = dbmgtr.stateDB.get_all(dbmgtr.stateDB.STATE_DB, 'FAST_RESTART_ENABLE_TABLE|system') + expected_table = expected_db.get_all(expected_db.STATE_DB, 'FAST_RESTART_ENABLE_TABLE|system') + + diff = DeepDiff(resulting_table, expected_table, ignore_order=True) + assert not diff + class TestWarmUpgrade_to_2_0_2(object): @classmethod def setup_class(cls): @@ -688,4 +707,4 @@ def test_fast_reboot_upgrade_to_4_0_3(self): dbmgtr.migrate() expected_db = self.mock_dedicated_config_db(db_after_migrate) assert not self.check_config_db(dbmgtr.configDB, expected_db.cfgdb) - assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION'] \ No newline at end of file + assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION']