Re: RM3694-If database is already connected and click on database then connect database should not displayed in Menu

From: Khushboo Vashi <khushboo(dot)vashi(at)enterprisedb(dot)com>
To: Satish V <satish(dot)v(at)enterprisedb(dot)com>
Cc: Aditya Toshniwal <aditya(dot)toshniwal(at)enterprisedb(dot)com>, pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: RM3694-If database is already connected and click on database then connect database should not displayed in Menu
Date: 2020-04-30 11:40:19
Message-ID: CAFOhELdpWnkyEXz860+ehm-xiV-KUOGHincqi1HC4jgXUYetDg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi Satish,

Some minor comments:

- Fix PEP8 issues.
- Use gettext in database.js file for the info message.
- No need to assign text value in res object (res.info = 'Database already
connected.'), use this text directly in Alertify.info.

Thanks,
Khushboo

On Thu, Apr 30, 2020 at 1:59 PM Satish V <satish(dot)v(at)enterprisedb(dot)com> wrote:

> Hi,
>
> I made the changes to the code such that conn.connect() will happen only
> when there is no prior connection exist. In short, connection via context
> menu will not trigger this conn.connect().
> In the client side code, instead of error alert, info alert is used to
> inform the user.
>
> Kindly review the patch and suggest the changes if required.
>
> Thanks,
> Sathish V
>
> On Thu, Apr 30, 2020 at 2:43 AM Khushboo Vashi <
> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>
>>
>>
>> On Thu, Apr 30, 2020 at 12:04 PM Aditya Toshniwal <
>> aditya(dot)toshniwal(at)enterprisedb(dot)com> wrote:
>>
>>> Hi,
>>>
>>> On Thu, Apr 30, 2020 at 11:55 AM Khushboo Vashi <
>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Apr 30, 2020 at 10:55 AM Aditya Toshniwal <
>>>> aditya(dot)toshniwal(at)enterprisedb(dot)com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> On Thu, Apr 30, 2020 at 10:48 AM Khushboo Vashi <
>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Apr 30, 2020 at 10:14 AM Aditya Toshniwal <
>>>>>> aditya(dot)toshniwal(at)enterprisedb(dot)com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Apr 30, 2020 at 9:41 AM Satish V <satish(dot)v(at)enterprisedb(dot)com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Kushboo,
>>>>>>>>
>>>>>>>> Thanks for the update. I will check the same and make
>>>>>>>> appropriate changes.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Sathish
>>>>>>>>
>>>>>>>> On Thu, Apr 30, 2020 at 9:20 AM Khushboo Vashi <
>>>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>>>
>>>>>>>>> Hi Satish,
>>>>>>>>>
>>>>>>>>> As per the RM, the fix is supposed to be at the front-end but it
>>>>>>>>> seems difficult at the moment as on the selection of the database, we
>>>>>>>>> connect it and at the same time the context menu is being called.
>>>>>>>>> As you have tried to fix at the backend, some of the review
>>>>>>>>> comments are below.
>>>>>>>>>
>>>>>>>>> 1. If the database is already connected, no need to call
>>>>>>>>> conn.connect again.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> info_already_connected = conn.connected()
>>>>>>>>>
>>>>>>>>> status, errmsg = conn.connect()
>>>>>>>>>
>>>>>>>>> I've noticed conn.connected() is misleading sometimes. Let's say
>>>>>>> if the PG server is stopped and no query is fired from pgadmin after that,
>>>>>>> then conn.connected() will still give True. It is updated only when
>>>>>>> a query is fired to the PG server. I would suggest let it connect again as
>>>>>>> there is no harm and this function is very important. We don't want to mess
>>>>>>> it up for the sake of a message.
>>>>>>>
>>>>>> It's true that conn.connected() is misleading but we already get the
>>>>>> connection before checking conn.connected() with conn =
>>>>>> manager.connection(did=did, auto_reconnect=True).
>>>>>> So, if the database server is stopped, it will throw the error.
>>>>>>
>>>>> I just checked the manager.connection function, and it is not
>>>>> connecting or checking. It will just give the connection object stored in
>>>>> the memory.
>>>>>
>>>> :).
>>>>
>>>>
>>>> databases/__init__.py : def connect()
>>>>
>>>>
>>>> manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
>>>>
>>>> conn = manager.connection(did=did, auto_reconnect=True)
>>>>
>>>>
>>>>
>>>> Above 2 lines will handle which I just just mentioned above.
>>>>
>>> I didn't find any code which will call the connect, apart
>>> from auto_reconnect being used when we execute some query. Nevertheless, I
>>> still believe we should not remove the connect call for the sake of a
>>> message, for which I think the user won't even bother.
>>>
>>>>
>>>>
>>> To understand the code properly, comment out the line conn.connect()
>> from the def connect(), restart the pgadmin server and try to connect the
>> database from the client side.
>> So, you get to know that there is no harm in my suggestion.
>>
>>> 2. If you want to raise an error at the client side, use the appropriate function or status (check file ajax.py) at the server side and send the appropriate response.
>>>>>>>>>
>>>>>>>>> Below code needs to be changed.
>>>>>>>>>
>>>>>>>>> if(res.data.info_already_connected){
>>>>>>>>>
>>>>>>>>> Alertify.error(res.info);
>>>>>>>>>
>>>>>>>>> } else {
>>>>>>>>>
>>>>>>>>> Alertify.success(res.info);
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> The problem is test cases. Almost all the test cases have checked
>>>>>>> for response "Database connected.". If the function is changed at the
>>>>>>> server side then all the test cases (around 85+) would have to be changed
>>>>>>> to handle this.
>>>>>>>
>>>>>> It's a valid point, so I would suggest to show the warning/info at
>>>>>> the client side, no need to show the error message.
>>>>>>
>>>>> Yes, info is a good option.
>>>>>
>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Khushboo
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Apr 29, 2020 at 8:20 PM Satish V <
>>>>>>>>> satish(dot)v(at)enterprisedb(dot)com> wrote:
>>>>>>>>>
>>>>>>>>>> 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
>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Thanks and Regards,
>>>>>>> Aditya Toshniwal
>>>>>>> pgAdmin Hacker | Sr. Software Engineer | EnterpriseDB India | Pune
>>>>>>> "Don't Complain about Heat, Plant a TREE"
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Thanks and Regards,
>>>>> Aditya Toshniwal
>>>>> pgAdmin Hacker | Sr. Software Engineer | EnterpriseDB India | Pune
>>>>> "Don't Complain about Heat, Plant a TREE"
>>>>>
>>>>
>>>
>>> --
>>> Thanks and Regards,
>>> Aditya Toshniwal
>>> pgAdmin Hacker | Sr. Software Engineer | EnterpriseDB India | Pune
>>> "Don't Complain about Heat, Plant a TREE"
>>>
>>

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Akshay Joshi 2020-04-30 11:55:35 pgAdmin 4 commit: Raise an exception under Python < 3.4.
Previous Message Akshay Joshi 2020-04-30 11:16:44 pgAdmin 4 commit: Tag REL-4_21 has been created.