Subject: [pgAdmin][RM4818] Unable to handle loss of connection to server

From: Aditya Toshniwal <[email-masked]>
Date: Thu, 14 Nov 2019 12:14:55 +0530

Hi Hackers,

Attached is the workaround patch to set the default connection timeout to
30 seconds instead of the current value of infinite - 0, zero. The input is
present in the server properties dialogs advanced tab. The workaround
applies to the RM4724 as well.
The permanent solution would be to expand the nodes asynchronously -
https://redmine.postgresql.org/issues/4933

Also fixed a bug where sql editor is not closing if the server is
disconnected in between.

Kindly review.

-- 
Thanks and Regards,
Aditya Toshniwal
Sr. Software Engineer | EnterpriseDB India | Pune
"Don't Complain about Heat, Plant a TREE"

---

From: Akshay Joshi <[email-masked]>
Date: Fri, 15 Nov 2019 14:34:43 +0530

Hi Aditya

Following are the review comments:

   1. The default connection timeout should be *10* seconds.
   2. In case the network is disabled and when we expand the "Servers" node
   the database server(for which network is disabled) should be shown in the
   disconnected state.
   3.  For the above case when you try to connect to the server and at the
   same time trying to fetch the properties of the valid database server, it
   takes long time to fetch it.
   4.  Case when the network is disabled, the database servers password is
   saved and pgAdmin4 tries to connect the server, after connection timeout,
   there is no message to the user, only spinner gets disappeared. We should
   show a message.
   5. We should improve the error messages "timeout expired" and
   "Connection to the servers has been lost." to the more meaningful messages
   like "Check the network settings, check the firewall status."
   6. Install database server on Windows and Enable Windows Firewall. Try
   to connect to the same database server. Spinner is not showing, as a user I
   am not able to understand is there any action started at the backend or
   not. As a user, I'll keep trying to connect multiple times and after the
   connection timeout of each request dialog pops up.

-- 
*Thanks & Regards*
*Akshay Joshi*

*Sr. Software Architect*
*EnterpriseDB Software India Private Limited*
*Mobile: +91 976-788-8246*

---

From: Aditya Toshniwal <[email-masked]>
Date: Thu, 21 Nov 2019 11:50:58 +0530

Hi Hackers,

Attached is the updated patch to fix the review comments.
Please note, there is some problem with psycopg2/libpq where it hangs when
network is lost - https://github.com/psycopg/psycopg2/issues/561
I've also changed the code to make connections after the "Servers" node is
expanded to fix - RM4933, so that the servers are listed first.

Kindly review.

On Fri, Nov 15, 2019 at 2:34 PM Akshay Joshi <[email-masked]>
wrote:

>    2. In case the network is disabled and when we expand the "Servers"
>    node the database server(for which network is disabled) should be shown in
>    the disconnected state.
>    3.  For the above case when you try to connect to the server and at
>    the same time trying to fetch the properties of the valid database server,
>    it takes long time to fetch it.
>    4.  Case when the network is disabled, the database servers password
>    is saved and pgAdmin4 tries to connect the server, after connection
>    timeout, there is no message to the user, only spinner gets disappeared. We
>    should show a message.

---

From: Aditya Toshniwal <[email-masked]>
Date: Thu, 21 Nov 2019 11:58:02 +0530

Hi,

I forgot to mention, I've also changed the dashboard code. The dashboard
was sending graph data requests, but when the server lost connection the
requests remains pending for longer time. Because of this the server gets
flooded with lot of pending request and in turn slowing down the entire
application.
Code is changed so that only a certain number of requests remain pending
(currently 3), above which the request won't be sent.

On Thu, Nov 21, 2019 at 11:50 AM Aditya Toshniwal <
[email-masked]> wrote:

> On Fri, Nov 15, 2019 at 2:34 PM Akshay Joshi <
> [email-masked]> wrote:
>
>> Hi Aditya
>>
>>    6. Install database server on Windows and Enable Windows Firewall.
>>    Try to connect to the same database server. Spinner is not showing, as a
>>    user I am not able to understand is there any action started at the backend
>>    or not. As a user, I'll keep trying to connect multiple times and after the
>>> Attached is the workaround patch to set the default connection timeout
>>> to 30 seconds instead of the current value of infinite - 0, zero. The input
>>> is present in the server properties dialogs advanced tab. The workaround

---

From: Akshay Joshi <[email-masked]>
Date: Thu, 21 Nov 2019 16:48:34 +0530

Hi Aditya

- Update the timeout in the comment section from 30 seconds to 10 seconds
in aff1436e3c8c_.py.
- Asking for the database server password even if it is saved. Reproduction
steps:

   - Connect to the database server, saved the password.
      - Disabled the network. Try to connect to the database server.
      - Enable the network, try to connect to the database server.

- No error/spinner visible on GUI when the database server is connected
using SSH Tunnel. Reproduction steps:

   - Connect to the database server with SSH Tunnel, saved both the
      password.
      - Disabled the network and Reset the Layout.
      - Expand the Servers node and try to connect the same database
      server.

On Thu, Nov 21, 2019 at 11:58 AM Aditya Toshniwal <
[email-masked]> wrote:

>> Please note, there is some problem with psycopg2/libpq where it hangs
>> when network is lost - https://github.com/psycopg/psycopg2/issues/561
>> I've also changed the code to make connections after the "Servers" node
>> is expanded to fix - RM4933, so that the servers are listed first.
>>
>> Kindly review.
>>

-- 
*Thanks & Regards*
*Akshay Joshi*

*Sr. Software Architect*

---

From: Aditya Toshniwal <[email-masked]>
Date: Mon, 25 Nov 2019 12:36:55 +0530

Hi Hackers,

On Thu, Nov 21, 2019 at 4:48 PM Akshay Joshi <[email-masked]>
wrote:

>    - Update the timeout in the comment section from 30 seconds to 10
>    seconds in aff1436e3c8c_.py.
>
>
>    - Asking for the database server password even if it is saved.
>    Reproduction steps:
>
>
>    - No error/spinner visible on GUI when the database server is
>    connected using SSH Tunnel. Reproduction steps:
>
>
>>>>    4.  Case when the network is disabled, the database servers
>>>>    password is saved and pgAdmin4 tries to connect the server, after
>>>>    connection timeout, there is no message to the user, only spinner gets
>>>>    disappeared. We should show a message.

---

From: Akshay Joshi <[email-masked]>
Date: Tue, 26 Nov 2019 09:07:18 +0530

Thanks, patch applied.

On Mon, Nov 25, 2019 at 12:37 PM Aditya Toshniwal <
[email-masked]> wrote:

> On Thu, Nov 21, 2019 at 4:48 PM Akshay Joshi <
>>>>>    2. In case the network is disabled and when we expand the
>>>>>    "Servers" node the database server(for which network is disabled) should be
>>>>>    shown in the disconnected state.
>>>>>    3.  For the above case when you try to connect to the server and
>>>>>    at the same time trying to fetch the properties of the valid database
>>>>>    server, it takes long time to fetch it.
>>>>>> Attached is the workaround patch to set the default connection
>>>>>> timeout to 30 seconds instead of the current value of infinite - 0, zero.
>>>>>> The input is present in the server properties dialogs advanced tab. The
>>>>>> workaround applies to the RM4724 as well.

-- 
*Thanks & Regards*
*Akshay Joshi*

*Sr. Software Architect*