diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index ecb40d880f..e41bef1334 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -44,7 +44,7 @@ def __init__(self, namespace, socket=None): none-zero values. build: sequentially increase within a minor version domain. """ - self.CURRENT_VERSION = 'version_2_0_4' + self.CURRENT_VERSION = 'version_2_0_5' self.TABLE_NAME = 'VERSIONS' self.TABLE_KEY = 'DATABASE' @@ -665,9 +665,26 @@ def version_2_0_3(self): def version_2_0_4(self): """ - Current latest version. Nothing to do here. + Version 2_0_4 """ log.log_info('Handling version_2_0_4') + # Migrate "pfc_enable" to "pfc_enable" and "pfcwd_sw_enable" + # 1. pfc_enable means enable pfc on certain queues + # 2. pfcwd_sw_enable means enable PFC software watchdog on certain queues + # By default, PFC software watchdog is enabled on all pfc enabled queues. + qos_maps = self.configDB.get_table('PORT_QOS_MAP') + for k, v in qos_maps.items(): + if 'pfc_enable' in v: + v['pfcwd_sw_enable'] = v['pfc_enable'] + self.configDB.set_entry('PORT_QOS_MAP', k, v) + + return 'version_2_0_5' + + def version_2_0_5(self): + """ + Current latest version. Nothing to do here. + """ + log.log_info('Handling version_2_0_5') return None def get_version(self): diff --git a/tests/db_migrator_input/config_db/qos_map_table_expected.json b/tests/db_migrator_input/config_db/qos_map_table_expected.json new file mode 100644 index 0000000000..946f7f02d9 --- /dev/null +++ b/tests/db_migrator_input/config_db/qos_map_table_expected.json @@ -0,0 +1,36 @@ +{ + "VERSIONS|DATABASE": { + "VERSION": "version_2_0_5" + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_enable": "3,4", + "pfcwd_sw_enable": "3,4", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet100": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_enable": "3,4", + "pfcwd_sw_enable": "3,4", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet92": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet96": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + } + } +} + diff --git a/tests/db_migrator_input/config_db/qos_map_table_input.json b/tests/db_migrator_input/config_db/qos_map_table_input.json new file mode 100644 index 0000000000..c7dbce9658 --- /dev/null +++ b/tests/db_migrator_input/config_db/qos_map_table_input.json @@ -0,0 +1,34 @@ +{ + "VERSIONS|DATABASE": { + "VERSION": "version_2_0_4" + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_enable": "3,4", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet100": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_enable": "3,4", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet92": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + }, + "Ethernet96": { + "dscp_to_tc_map": "[DSCP_TO_TC_MAP|AZURE]", + "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", + "tc_to_pg_map": "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", + "tc_to_queue_map": "[TC_TO_QUEUE_MAP|AZURE]" + } + } +} + diff --git a/tests/db_migrator_test.py b/tests/db_migrator_test.py index 0cda3d37ac..96e139b934 100644 --- a/tests/db_migrator_test.py +++ b/tests/db_migrator_test.py @@ -281,7 +281,7 @@ def setup_class(cls): def teardown_class(cls): os.environ['UTILITIES_UNIT_TESTING'] = "0" dbconnector.dedicated_dbs['CONFIG_DB'] = None - + def test_lacp_key_migrator(self): dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'portchannel-input') import db_migrator @@ -348,3 +348,28 @@ def test_qos_buffer_migrator_for_cold_reboot(self): self.check_config_db(dbmgtr.configDB, expected_db.cfgdb) self.check_appl_db(dbmgtr.appDB, expected_appl_db) self.clear_dedicated_mock_dbs() + + +class TestPfcEnableMigrator(object): + @classmethod + def setup_class(cls): + os.environ['UTILITIES_UNIT_TESTING'] = "2" + + @classmethod + def teardown_class(cls): + os.environ['UTILITIES_UNIT_TESTING'] = "0" + dbconnector.dedicated_dbs['CONFIG_DB'] = None + + def test_pfc_enable_migrator(self): + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'qos_map_table_input') + import db_migrator + dbmgtr = db_migrator.DBMigrator(None) + dbmgtr.migrate() + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'qos_map_table_expected') + expected_db = Db() + + resulting_table = dbmgtr.configDB.get_table('PORT_QOS_MAP') + expected_table = expected_db.cfgdb.get_table('PORT_QOS_MAP') + + diff = DeepDiff(resulting_table, expected_table, ignore_order=True) + assert not diff