Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception seen when trying to connect and database service is not responding #72

Open
rajendra-dendukuri opened this issue May 22, 2020 · 4 comments

Comments

@rajendra-dendukuri
Copy link
Contributor

  1. Stop all services including database and verify that none of the containers are running.

root@sonic:/home/admin# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@sonic:/home/admin#

2 Now try to initiate a connection with retry option. A py exception is observed.

root@sonic:/home/admin# cat test.py
#!/usr/bin/env python2.7
from swsssdk import SonicV2Connector

state_db = SonicV2Connector(host='17.0.0.1')
state_db.connect(state_db.STATE_DB,True)
root@sonic:/home/admin#

root@sonic:/home/admin# ./test.py
Traceback (most recent call last):
File "./test.py", line 5, in
state_db.connect(state_db.STATE_DB,True)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/dbconnector.py", line 255, in connect
super(SonicV2Connector, self).connect(db_id, retry_on)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/interface.py", line 169, in connect
self._persistent_connect(db_id)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/interface.py", line 198, in _persistent_connect
self.close(db_id)

File "/usr/local/lib/python2.7/dist-packages/swsssdk/dbconnector.py", line 258, in close
db_id = self.get_dbid(db_name)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/dbconnector.py", line 277, in get_dbid
return SonicDBConfig.get_dbid(db_name, self.namespace)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/dbconnector.py", line 215, in get_dbid
SonicDBConfig.db_name_validation(db_name, namespace)
File "/usr/local/lib/python2.7/dist-packages/swsssdk/dbconnector.py", line 143, in db_name_validation
raise RuntimeError(msg)
RuntimeError: 6 is not a valid database name in configuration file
root@sonic:/home/admin#

@rajendra-dendukuri
Copy link
Contributor Author

rajendra-dendukuri commented May 22, 2020

@dzhangalibaba Can you please take a look at this.

diff --git a/src/swsssdk/interface.py b/src/swsssdk/interface.py
index a3a13cb..fa0d530 100644
--- a/src/swsssdk/interface.py
+++ b/src/swsssdk/interface.py
@@ -194,7 +194,7 @@ class DBInterface(object):
             except RedisError:
                 t_wait = self.CONNECT_RETRY_WAIT_TIME
                 logger.warning("Connecting to DB '{}' failed, will retry in {}s".format(db_id, t_wait))
-                self.close(db_id)
+                DBInterface.close(self, db_id)

@dzhangalibaba
Copy link
Collaborator

Thanks finding that, will raise a PR to fix it.

@dzhangalibaba
Copy link
Collaborator

please help review the fix

@rajendra-dendukuri
Copy link
Contributor Author

Another related issue..

When the database docker is down, the sonic-db-cli eternally waits for a response. Whereas redis-cli immediately errors out. I think we would want to bring in this parity.

diff --git a/src/swsssdk/scripts/sonic-db-cli b/src/swsssdk/scripts/sonic-db-cli
index ecdaa62..454fb5b 100755
--- a/src/swsssdk/scripts/sonic-db-cli
+++ b/src/swsssdk/scripts/sonic-db-cli
@@ -64,11 +64,15 @@ def execute_cmd(dbname, cmd, namespace, use_unix_socket=False):
     else:
         dbconn = swsssdk.SonicV2Connector(use_unix_socket_path=True, namespace=namespace, decode_responses=True)
     try:
-        dbconn.connect(dbname)
+        dbconn.connect(dbname, retry_on=False)
     except RuntimeError:
         msg = "Invalid database name input : '{}'".format(dbname)
         print(msg, file=sys.stderr)
         sys.exit(1)
+    except Exception as e:
+        msg = "Failed to connect.\nException :'{}'".format(str(e))
+        print(msg, file=sys.stderr)
+        sys.exit(1)

Apart from the above, maybe add another -p option for a continuous retry? Comments?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants