Hi Hackers, In the patch attached, we are gracefully informing the end user, using an alert message, that the database is already connected when they click "Connect Database..." after right clicking on a disconnected database.
As this problem deals with racing conditions, it is highly complex to show the "Disconnect database" option in the menu upon right click. So we are alerting the end user with the information of "Database already connected". Thanks, Sathish V
diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 9216f21..a931371 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -456,6 +456,7 @@ class DatabaseView(PGChildNodeView): from pgadmin.utils.driver import get_driver manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection(did=did, auto_reconnect=True) + info_already_connected = conn.connected() status, errmsg = conn.connect() if not status: @@ -469,13 +470,14 @@ class DatabaseView(PGChildNodeView): else: current_app.logger.info('Connection Established for Database Id: \ %s' % (did)) - return make_json_response( success=1, - info=_("Database connected."), + info=_("Database already connected") if info_already_connected + else _("Database connected"), data={ 'icon': 'pg-icon-database', 'connected': True, + 'info_already_connected': info_already_connected, 'info_prefix': '{0}/{1}'. format(Server.query.filter_by(id=sid)[0].name, conn.db) } diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js index f458d69..24e7205 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js @@ -534,7 +534,13 @@ define('pgadmin.node.database', [ res.info = `${_.escape(res.data.info_prefix)} - ${res.info}`; } - Alertify.success(res.info); + if(res.data.info_already_connected){ + Alertify.error(res.info); + } else { + Alertify.success(res.info); + } + + obj.trigger('connected', obj, item, data); pgBrowser.Events.trigger( 'pgadmin:database:connected', item, data