Skip to content

Commit b0908bd

Browse files
authored
[202305][db_migrator] add db migrator version space for 202305/202311 branch (sonic-net#3084)
Signed-off-by: Ying Xie <[email protected]>
1 parent 8f343eb commit b0908bd

File tree

2 files changed

+83
-5
lines changed

2 files changed

+83
-5
lines changed

scripts/db_migrator.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,14 @@
3737
class DBMigrator():
3838
def __init__(self, namespace, socket=None):
3939
"""
40-
Version string format:
40+
Version string format (202305 and above):
41+
version_<branch>_<build>
42+
branch: master, 202311, 202305, etc.
43+
build: sequentially increase with leading 0 to make it 2 digits.
44+
because the minor number has been removed to make it different
45+
from the old format, adding a leading 0 to make sure that we
46+
have double digit version number spaces.
47+
Version string format (before 202305):
4148
version_<major>_<minor>_<build>
4249
major: starting from 1, sequentially incrementing in master
4350
branch.
@@ -47,7 +54,7 @@ def __init__(self, namespace, socket=None):
4754
none-zero values.
4855
build: sequentially increase within a minor version domain.
4956
"""
50-
self.CURRENT_VERSION = 'version_4_0_3'
57+
self.CURRENT_VERSION = 'version_202305_01'
5158

5259
self.TABLE_NAME = 'VERSIONS'
5360
self.TABLE_KEY = 'DATABASE'
@@ -1008,9 +1015,19 @@ def version_4_0_2(self):
10081015
def version_4_0_3(self):
10091016
"""
10101017
Version 4_0_3.
1011-
This is the latest version for master branch
1018+
This is the latest version for 202211 branch
10121019
"""
10131020
log.log_info('Handling version_4_0_3')
1021+
1022+
self.set_version('version_202305_01')
1023+
return 'version_202305_01'
1024+
1025+
def version_202305_01(self):
1026+
"""
1027+
Version 202305_01.
1028+
This is current last erversion for 202305 branch
1029+
"""
1030+
log.log_info('Handling version_202305_01')
10141031
return None
10151032

10161033
def get_version(self):

tests/db_migrator_test.py

+63-2
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,78 @@
2525
def get_sonic_version_info_mlnx():
2626
return {'asic_type': 'mellanox'}
2727

28+
def version_greater_than(v1, v2):
29+
# Return True when v1 is later than v2. Otherwise return False.
30+
if 'master' in v1:
31+
if 'master' in v2:
32+
# both are master versions, directly compare.
33+
return v1 > v2
34+
35+
# v1 is master verson and v2 is not, v1 is higher
36+
return True
37+
38+
if 'master' in v2:
39+
# v2 is master version and v1 is not.
40+
return False
41+
42+
s1 = v1.split('_')
43+
s2 = v2.split('_')
44+
if len(s1) == 3:
45+
# new format version_<barnch>_<ver>
46+
if len(s2) == 3:
47+
# Both are new format version string
48+
return v1 > v2
49+
return True
50+
51+
if len(s2) == 3:
52+
# v2 is new format and v1 is old format.
53+
return False
54+
55+
# Both are old format version_a_b_c
56+
return v1 > v2
57+
2858

2959
def advance_version_for_expected_database(migrated_db, expected_db, last_interested_version):
3060
# In case there are new db versions greater than the latest one that mellanox buffer migrator is interested,
3161
# we just advance the database version in the expected database to make the test pass
3262
expected_dbversion = expected_db.get_entry('VERSIONS', 'DATABASE')
3363
dbmgtr_dbversion = migrated_db.get_entry('VERSIONS', 'DATABASE')
3464
if expected_dbversion and dbmgtr_dbversion:
35-
if expected_dbversion['VERSION'] == last_interested_version and dbmgtr_dbversion['VERSION'] > expected_dbversion['VERSION']:
65+
if expected_dbversion['VERSION'] == last_interested_version and version_greater_than(dbmgtr_dbversion['VERSION'], expected_dbversion['VERSION']):
3666
expected_dbversion['VERSION'] = dbmgtr_dbversion['VERSION']
3767
expected_db.set_entry('VERSIONS', 'DATABASE', expected_dbversion)
3868

3969

70+
class TestVersionComparison(object):
71+
@classmethod
72+
def setup_class(cls):
73+
cls.version_comp_list = [
74+
# Old format v.s old format
75+
{ 'v1' : 'version_1_0_1', 'v2' : 'version_1_0_2', 'result' : False },
76+
{ 'v1' : 'version_1_0_2', 'v2' : 'version_1_0_1', 'result' : True },
77+
{ 'v1' : 'version_1_0_1', 'v2' : 'version_2_0_1', 'result' : False },
78+
{ 'v1' : 'version_2_0_1', 'v2' : 'version_1_0_1', 'result' : True },
79+
# New format v.s old format
80+
{ 'v1' : 'version_1_0_1', 'v2' : 'version_202311_01', 'result' : False },
81+
{ 'v1' : 'version_202311_01', 'v2' : 'version_1_0_1', 'result' : True },
82+
{ 'v1' : 'version_1_0_1', 'v2' : 'version_master_01', 'result' : False },
83+
{ 'v1' : 'version_master_01', 'v2' : 'version_1_0_1', 'result' : True },
84+
# New format v.s new format
85+
{ 'v1' : 'version_202311_01', 'v2' : 'version_202311_02', 'result' : False },
86+
{ 'v1' : 'version_202311_02', 'v2' : 'version_202311_01', 'result' : True },
87+
{ 'v1' : 'version_202305_01', 'v2' : 'version_202311_01', 'result' : False },
88+
{ 'v1' : 'version_202311_01', 'v2' : 'version_202305_01', 'result' : True },
89+
{ 'v1' : 'version_202311_01', 'v2' : 'version_master_01', 'result' : False },
90+
{ 'v1' : 'version_master_01', 'v2' : 'version_202311_01', 'result' : True },
91+
{ 'v1' : 'version_master_01', 'v2' : 'version_master_02', 'result' : False },
92+
{ 'v1' : 'version_master_02', 'v2' : 'version_master_01', 'result' : True },
93+
]
94+
95+
def test_version_comparison(self):
96+
for rec in self.version_comp_list:
97+
assert version_greater_than(rec['v1'], rec['v2']) == rec['result'], 'test failed: {}'.format(rec)
98+
99+
40100
class TestMellanoxBufferMigrator(object):
41101
@classmethod
42102
def setup_class(cls):
@@ -671,5 +731,6 @@ def test_fast_reboot_upgrade_to_4_0_3(self):
671731
dbmgtr = db_migrator.DBMigrator(None)
672732
dbmgtr.migrate()
673733
expected_db = self.mock_dedicated_config_db(db_after_migrate)
734+
advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_4_0_3')
674735
assert not self.check_config_db(dbmgtr.configDB, expected_db.cfgdb)
675-
assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION']
736+
assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION'], '{} {}'.format(dbmgtr.CURRENT_VERSION, dbmgtr.get_version())

0 commit comments

Comments
 (0)