Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 73 additions & 7 deletions scripts/db_migrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def __init__(self, namespace, socket=None):
none-zero values.
build: sequentially increase within a minor version domain.
"""
self.CURRENT_VERSION = 'version_4_0_1'
self.CURRENT_VERSION = 'version_5_0_1' # latest version for master branch

self.TABLE_NAME = 'VERSIONS'
self.TABLE_KEY = 'DATABASE'
Expand Down Expand Up @@ -167,7 +167,7 @@ def migrate_mgmt_ports_on_s6100(self):
self.appDB.set(self.appDB.APPL_DB, 'PORT_TABLE:PortConfigDone', 'count', str(total_count))
log.log_notice("Port count updated from {} to : {}".format(portCount, self.appDB.get(self.appDB.APPL_DB, 'PORT_TABLE:PortConfigDone', 'count')))
return True

def migrate_intf_table(self):
'''
Migrate all data from existing INTF table in APP DB during warmboot with IP Prefix
Expand Down Expand Up @@ -572,7 +572,7 @@ def migrate_port_qos_map_global(self):
dscp_to_tc_map_table_names = self.configDB.get_keys('DSCP_TO_TC_MAP')
if len(dscp_to_tc_map_table_names) == 0:
return

qos_maps = self.configDB.get_table('PORT_QOS_MAP')
if 'global' not in qos_maps.keys():
# We are unlikely to have more than 1 DSCP_TO_TC_MAP in previous versions
Expand All @@ -596,6 +596,53 @@ def migrate_route_table(self):
route_key = "ROUTE_TABLE:{}".format(route_prefix)
self.appDB.set(self.appDB.APPL_DB, route_key, 'weight','')

def update_edgezone_aggregator_config(self):
"""
Update cable length configuration in ConfigDB for T0 neighbor interfaces
connected to EdgeZone Aggregator devices, while resetting the port values to trigger a buffer change
1. Find a list of all interfaces connected to an EdgeZone Aggregator device.
2. If all the cable lengths are the same, do nothing and return.
2. If there are different cable lengths, update CABLE_LENGTH values for these interfaces with a constant value of 40m.
4. Reset port values to trigger buffer manager event listener to bring across new buffer changes for specified ports
"""
device_neighbor_metadata = self.configDB.get_table("DEVICE_NEIGHBOR_METADATA")
device_neighbors = self.configDB.get_table("DEVICE_NEIGHBOR")
cable_length = self.configDB.get_table("CABLE_LENGTH")
port_table = self.configDB.get_table("PORT")
edgezone_aggregator_devs = []
edgezone_aggregator_intfs = []
EDGEZONE_AGG_CABLE_LENGTH = "40m"
for k, v in device_neighbor_metadata.items():
if "type" in v:
if v["type"] == "EdgeZoneAggregator":
edgezone_aggregator_devs.append(k)

if len(edgezone_aggregator_devs) == 0:
return

for intf, intf_info in device_neighbors.items():
if intf_info["name"] in edgezone_aggregator_devs:
edgezone_aggregator_intfs.append(intf)

cable_length_table = self.configDB.get_entry("CABLE_LENGTH", "AZURE")
curr_cable_intf = next(iter(cable_length_table))
curr_cable_length = cable_length_table[curr_cable_intf]
index = 0

for intf, length in cable_length_table.items():
index += 1
if curr_cable_length != length:
break
elif index == len(cable_length_table):
""" All cable lengths are the same, nothing to modify """
return

for intf, length in cable_length_table.items():
if intf in edgezone_aggregator_intfs:
cable_length_table[intf] = EDGEZONE_AGG_CABLE_LENGTH
""" Set new cable length values """
self.configDB.set(self.configDB.CONFIG_DB, "CABLE_LENGTH|AZURE", intf, EDGEZONE_AGG_CABLE_LENGTH)

def version_unknown(self):
"""
version_unknown tracks all SONiC versions that doesn't have a version
Expand Down Expand Up @@ -757,7 +804,7 @@ def version_2_0_1(self):
def version_2_0_2(self):
"""
Version 2_0_2
This is the latest version for 202012 branch
This is the latest version for 202012 branch
"""
log.log_info('Handling version_2_0_2')
self.set_version('version_3_0_0')
Expand Down Expand Up @@ -882,13 +929,32 @@ def version_4_0_0(self):
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'

def version_4_0_1(self):
"""
Version 4_0_1.
This is the latest version for master branch
This is the latest version for 202211 branch
"""
log.log_info('Handling version_4_0_1')
self.set_version('version_5_0_0')
return 'version_5_0_0'

def version_5_0_0(self):
"""
Version 5_0_0.
"""
log.log_info('Handling version_5_0_0')
# Update cable length data and re-assign interface speed for T0 devices with interfaces connected to EdgeZone Aggregators
self.update_edgezone_aggregator_config()
self.set_version('version_5_0_1')
return 'version_5_0_1'

def version_5_0_1(self):
"""
Version 5_0_1.
This is the latest version for master branch
"""
log.log_info('Handling version_5_0_1')
return None

def get_version(self):
Expand Down Expand Up @@ -930,7 +996,7 @@ def common_migration_ops(self):
# removed together with calling to migrate_copp_table function.
if self.asic_type != "mellanox":
self.migrate_copp_table()
if self.asic_type == "broadcom" and 'Force10-S6100' in self.hwsku:
if self.asic_type == "broadcom" and 'Force10-S6100' in self.hwsku:
self.migrate_mgmt_ports_on_s6100()
else:
log.log_notice("Asic Type: {}, Hwsku: {}".format(self.asic_type, self.hwsku))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
{
"DEVICE_NEIGHBOR_METADATA|ARISTA01T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA02T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA03T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA04T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR|Ethernet0": {
"name": "ARISTA01T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet4": {
"name": "ARISTA02T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet8": {
"name": "ARISTA03T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet12": {
"name": "ARISTA04T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet16": {
"name": "Servers1",
"port": "eth0"
},
"DEVICE_NEIGHBOR|Ethernet20": {
"name": "Servers2",
"port": "eth0"
},
"PORT|Ethernet0": {
"admin_status": "up",
"alias": "Ethernet1/1",
"description": "",
"index": "1",
"lanes": "77,78",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet4": {
"admin_status": "up",
"alias": "Ethernet2/1",
"description": "",
"index": "2",
"lanes": "79,80",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet8": {
"admin_status": "up",
"alias": "Ethernet3/1",
"description": "",
"index": "3",
"lanes": "81,82",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet12": {
"admin_status": "up",
"alias": "Ethernet4/1",
"description": "",
"index": "4",
"lanes": "83,84",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet16": {
"admin_status": "up",
"alias": "Ethernet5/1",
"description": "",
"index": "5",
"lanes": "85,86",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet20": {
"admin_status": "up",
"alias": "Ethernet6/1",
"description": "",
"index": "6",
"lanes": "87,88",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"CABLE_LENGTH|AZURE": {
"Ethernet0": "300m",
"Ethernet4": "300m",
"Ethernet8": "300m",
"Ethernet12": "300m",
"Ethernet16": "5m",
"Ethernet20": "5m"
},
"VERSIONS|DATABASE": {
"VERSION": "version_4_0_1"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
{
"DEVICE_NEIGHBOR_METADATA|ARISTA01T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA02T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA03T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR_METADATA|ARISTA04T1": {
"hwsku": "Arista-VM",
"mgmt_addr": "10.64.247.200",
"type": "EdgeZoneAggregator"
},
"DEVICE_NEIGHBOR|Ethernet0": {
"name": "ARISTA01T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet4": {
"name": "ARISTA02T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet8": {
"name": "ARISTA03T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet12": {
"name": "ARISTA04T1",
"port": "Ethernet1"
},
"DEVICE_NEIGHBOR|Ethernet16": {
"name": "Servers1",
"port": "eth0"
},
"DEVICE_NEIGHBOR|Ethernet20": {
"name": "Servers2",
"port": "eth0"
},
"PORT|Ethernet0": {
"admin_status": "up",
"alias": "Ethernet1/1",
"description": "",
"index": "1",
"lanes": "77,78",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet4": {
"admin_status": "up",
"alias": "Ethernet2/1",
"description": "",
"index": "2",
"lanes": "79,80",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet8": {
"admin_status": "up",
"alias": "Ethernet3/1",
"description": "",
"index": "3",
"lanes": "81,82",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet12": {
"admin_status": "up",
"alias": "Ethernet4/1",
"description": "",
"index": "4",
"lanes": "83,84",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet16": {
"admin_status": "up",
"alias": "Ethernet5/1",
"description": "",
"index": "5",
"lanes": "85,86",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"PORT|Ethernet20": {
"admin_status": "up",
"alias": "Ethernet6/1",
"description": "",
"index": "6",
"lanes": "87,88",
"mtu": "9100",
"pfc_asym": "off",
"speed": "100000",
"tpid": "0x8100"
},
"CABLE_LENGTH|AZURE": {
"Ethernet0": "40m",
"Ethernet4": "40m",
"Ethernet8": "40m",
"Ethernet12": "40m",
"Ethernet16": "5m",
"Ethernet20": "5m"
},
"VERSIONS|DATABASE": {
"VERSION": "version_5_0_1"
}
}
Loading