Skip to content

Commit

Permalink
Fix db_migrate.py show error and back trace while loading configurati…
Browse files Browse the repository at this point in the history
…on on Linecard (sonic-net#3257)

Fix db_migrate.py show error and back trace while loading configuration on Linecard

#### Why I did it
    Fix [issue @](sonic-net/sonic-buildimage#18389)

#### How I did it
    Revert code change by sonic-net#3100
    Check DB config initialize state and ignore when initialized.

#### How to verify it
    Pass all UT.
    Manually test.

##### Work item tracking
- Microsoft ADO **(number only)**: 27384235

#### Which release branch to backport (provide reason below if selected)
    N/A

#### Description for the changelog
    Fix db_migrate.py show error and back trace while loading configuration on Linecard

#### A picture of a cute animal (not mandatory but encouraged)
  • Loading branch information
liuh-80 authored and arfeigin committed Jun 16, 2024
1 parent 0efca08 commit dccf863
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
12 changes: 9 additions & 3 deletions scripts/db_migrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@
import re

from sonic_py_common import device_info, logger
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector, SonicDBConfig
from minigraph import parse_xml
from utilities_common.helper import update_config
from utilities_common.general import load_db_config

INIT_CFG_FILE = '/etc/sonic/init_cfg.json'
MINIGRAPH_FILE = '/etc/sonic/minigraph.xml'
Expand Down Expand Up @@ -1277,7 +1276,14 @@ def main():
socket_path = args.socket
namespace = args.namespace

load_db_config()
# Can't load global config base on the result of is_multi_asic(), because on multi-asic device, when db_migrate.py
# run on the local database, ASIC instance will have not created the /var/run/redis0/sonic-db/database-config.json
if args.namespace is not None:
if not SonicDBConfig.isGlobalInit():
SonicDBConfig.initializeGlobalConfig()
else:
if not SonicDBConfig.isInit():
SonicDBConfig.initialize()

if socket_path:
dbmgtr = DBMigrator(namespace, socket=socket_path)
Expand Down
18 changes: 17 additions & 1 deletion tests/db_migrator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from unittest import mock
from deepdiff import DeepDiff

from swsscommon.swsscommon import SonicV2Connector
from swsscommon.swsscommon import SonicV2Connector, SonicDBConfig
from sonic_py_common import device_info

from .mock_tables import dbconnector
Expand Down Expand Up @@ -889,6 +889,22 @@ def test_init(self, mock_args):
import db_migrator
db_migrator.main()

@mock.patch('argparse.ArgumentParser.parse_args')
@mock.patch('swsscommon.swsscommon.SonicDBConfig.isInit', mock.MagicMock(return_value=False))
@mock.patch('swsscommon.swsscommon.SonicDBConfig.initialize', mock.MagicMock())
def test_init_no_namespace(self, mock_args):
mock_args.return_value=argparse.Namespace(namespace=None, operation='version_202405_01', socket=None)
import db_migrator
db_migrator.main()

@mock.patch('argparse.ArgumentParser.parse_args')
@mock.patch('swsscommon.swsscommon.SonicDBConfig.isGlobalInit', mock.MagicMock(return_value=False))
@mock.patch('swsscommon.swsscommon.SonicDBConfig.initializeGlobalConfig', mock.MagicMock())
def test_init_namespace(self, mock_args):
mock_args.return_value=argparse.Namespace(namespace="asic0", operation='version_202405_01', socket=None)
import db_migrator
db_migrator.main()


class TestGNMIMigrator(object):
@classmethod
Expand Down

0 comments on commit dccf863

Please sign in to comment.