Re: [pgAdmin4][Patch]: RM 1253 - Store and reload current location in treeview

From: Khushboo Vashi <khushboo(dot)vashi(at)enterprisedb(dot)com>
To: Dave Page <dpage(at)pgadmin(dot)org>
Cc: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>, Aditya Toshniwal <aditya(dot)toshniwal(at)enterprisedb(dot)com>, pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: [pgAdmin4][Patch]: RM 1253 - Store and reload current location in treeview
Date: 2018-10-04 14:37:58
Message-ID: CAFOhELcPp+DoDp_jZ0tHcHD8a+k1QgGLnW0OEos7wVJFmnaGFA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

On Thu, Oct 4, 2018 at 7:52 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:

> Hi
>
> On Thu, Oct 4, 2018 at 1:12 PM Khushboo Vashi <
> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>
>> Hi,
>>
>> Please find the attached updated patch.
>>
>
> This seems to behave quite strangely - only sporadically saving the
> treeview state, and then not always (maybe ever?) restoring the selected
> node. When I watch the Python console, even with the save interval set to 1
> second, I very rarely see the state being saved. For example:
>
> 2018-10-04 15:14:01,341: INFO werkzeug: 127.0.0.1 - - [04/Oct/2018
> 15:14:01] "GET /browser/database/children/1/1/44243 HTTP/1.1" 200 -
> 2018-10-04 15:14:01,355: INFO werkzeug: 127.0.0.1 - - [04/Oct/2018
> 15:14:01] "POST /settings/save_tree_state/ HTTP/1.1" 200 -
> 2018-10-04 15:14:02,357: INFO werkzeug: 127.0.0.1 - - [04/Oct/2018
> 15:14:02] "POST /settings/save_tree_state/ HTTP/1.1" 200 -
> 2018-10-04 15:14:23,459: INFO werkzeug: 127.0.0.1 - - [04/Oct/2018
> 15:14:23] "GET /preferences/ HTTP/1.1" 200 -
>
> You can see there it called it twice, then 21 seconds later I opened the
> preferences panel to check what the interval was set to (it was still 1
> second). Even as I type this some minutes later, it still hasn't called it
> again. I think it's essential that works reliably, as it's so unreliable to
> do it on Window close.
>
>
I have checked the previous state and the current state and if both are
same then I skip the save call.
Is this the case or even if you change the tree view state it is not saving?

>
>> Thanks,
>> Khushboo
>>
>> On Mon, Oct 1, 2018 at 7:14 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:
>>
>>> Hi
>>>
>>> On Mon, Oct 1, 2018 at 1:53 PM Khushboo Vashi <
>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>
>>>> Hi Dave
>>>>
>>>>
>>>> On Mon, Oct 1, 2018 at 4:02 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Mon, Oct 1, 2018 at 11:06 AM Khushboo Vashi <
>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Sep 25, 2018 at 6:26 PM Khushboo Vashi <
>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Sep 25, 2018 at 6:17 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Sep 25, 2018 at 3:00 AM Khushboo Vashi <
>>>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>>>
>>>>>>>>> Hi Dave,
>>>>>>>>>
>>>>>>>>> On Tue, Sep 25, 2018 at 12:15 AM Dave Page <dpage(at)pgadmin(dot)org>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi
>>>>>>>>>> On Mon, Sep 24, 2018 at 2:05 AM Khushboo Vashi <
>>>>>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Please find the attached updated patch.
>>>>>>>>>>>
>>>>>>>>>>> Feature Details:
>>>>>>>>>>> - The current tree state as well as the previous will be stored
>>>>>>>>>>> in the sqlite database.
>>>>>>>>>>> - The time interval to store the tree state is configurable via
>>>>>>>>>>> preferences and the default is 30 secs.
>>>>>>>>>>> -1 can be used to stop the tree saving functionality,
>>>>>>>>>>> - Jasmine test cases are included.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Khushboo
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> This is looking good, however there are a couple of cases where I
>>>>>>>>>> think it's not quite working as I would expect:
>>>>>>>>>>
>>>>>>>>>> 1) As soon as the user opens pgAdmin, the tree state should be
>>>>>>>>>> restored.
>>>>>>>>>>
>>>>>>>>>> As per our initial discussion, we have decided that once the user
>>>>>>>>> connects / expands the server, then we will restore that server state.
>>>>>>>>>
>>>>>>>>> *"If the user has switched network that may cause a whole bunch of
>>>>>>>>> connection failures after some period of time. Perhaps we should only
>>>>>>>>> restore when opening a particular server." *
>>>>>>>>>
>>>>>>>>
>>>>>>>> Yeah, I remember that now. I guess it just seems less than ideal -
>>>>>>>> but I'm not sure how we could open everything by default without risking
>>>>>>>> connection failures. Let's stick with the original plan (ie. what you've
>>>>>>>> implemented).
>>>>>>>>
>>>>>>> Okay.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2) If a database or server is disconnected, I would expect it's
>>>>>>>>>> state to be stored. When it is explicitly re-connected by the user, the
>>>>>>>>>> state should be restored.
>>>>>>>>>>
>>>>>>>>>> This is already implemented and working. Am I missing any
>>>>>>>>> particular scenario?
>>>>>>>>>
>>>>>>>>
>>>>>>>> I tried disconnecting a server and database, and when I re-opened
>>>>>>>> it, the state wasn't restored. Do we explicitly save the state on
>>>>>>>> disconnect, or was it that I needed to wait up to 30 seconds (or should
>>>>>>>> have waited 30 seconds before disconnecting)?
>>>>>>>>
>>>>>>> I have explicitly saved the state on the server disconnection. So,
>>>>>>> on the reconnection of the server, the state should be restored.
>>>>>>> But this logic is only applicable on server not on the databases.
>>>>>>> So, once you disconnect the database the state will not be restored.
>>>>>>> Should I include databases also ?
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> I think that covers the different cases I'm imagining.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>> I wrote that to try to convince myself I hadn't forgotten anything
>>>>>>>> - I think I had though. When the state is restored on any given branch of
>>>>>>>> the tree, the previously selected node should be re-selected. That doesn't
>>>>>>>> seem to be happening at the moment.
>>>>>>>>
>>>>>>>> This means even if I have opened multiple servers/databases, the
>>>>>> selected item will remain only one.
>>>>>> Is this correct?
>>>>>>
>>>>>
>>>>> The selected item will be the previously selected item from whatever
>>>>> was just restored.
>>>>>
>>>>>
>>>> Previously when the last selected node was not considered, I stored the
>>>> data in the database as below:
>>>>
>>>> {
>>>>
>>>> 1:
>>>>
>>>> [
>>>>
>>>>
>>>> “server_group/1,server/1,coll-database/1,database/16393,coll-schema/16393,schema/2200,coll-table/2200,table/16400”,
>>>>
>>>>
>>>> "server_group/1,server/1,coll-database/1,database/16393,coll-schema/16393,schema/2200,coll-table/2200,table/16394,coll-column/16394”,
>>>>
>>>>
>>>> "server_group/1,server/1,coll-database/1,database/12669,coll-schema/12669,schema/2200,coll-table/2200,table/16397,coll-column/16397”
>>>>
>>>> ]
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> Here key is the server_id i.e. 1 and all the paths are stored as above
>>>>
>>>>
>>>> Now, we are adding previously selected item as well as the database
>>>> restore option, so I am thinking of changing the data storage structure as
>>>> below.
>>>>
>>>>
>>>>
>>>> {
>>>>
>>>> 1:
>>>>
>>>> {
>>>>
>>>> 'paths':
>>>>
>>>> [
>>>>
>>>>
>>>> “server_group/1,server/1,coll-database/1,database/16393,coll-schema/16393,schema/2200,coll-table/2200,table/16400”,
>>>>
>>>>
>>>> "server_group/1,server/1,coll-database/1,database/16393,coll-schema/16393,schema/2200,coll-table/2200,table/16394,coll-column/16394”,
>>>>
>>>>
>>>> "server_group/1,server/1,coll-database/1,database/12669,coll-schema/12669,schema/2200,coll-table/2200,table/16397,coll-column/16397”
>>>>
>>>> ],
>>>>
>>>> 'selected' :
>>>>
>>>> {
>>>>
>>>> "server/1": "coll-database/1",
>>>>
>>>> "database/16393": "table/16400",
>>>>
>>>> "database/12669": "coll-column/16397"
>>>>
>>>> },
>>>>
>>>> 'connection_status':
>>>>
>>>> {
>>>>
>>>> "database/16393": 1,
>>>>
>>>> "database/12669": 0
>>>>
>>>> }
>>>>
>>>>
>>>> }
>>>>
>>>> }
>>>>
>>>> Please review it and let me know your suggestion.
>>>>
>>>
>>> Looks reasonable to me.
>>>
>>>
>>>>
>>>> Thanks,
>>>> Khushboo
>>>>
>>>>
>>>>
>>>>> Will do.
>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Thanks, Dave.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>> Khushboo
>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Dave Page
>>>>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>>>>> Twitter: @pgsnake
>>>>>>>>>>
>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Dave Page
>>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>>> Twitter: @pgsnake
>>>>>>>>
>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>
>>>>>>>
>>>>>
>>>>> --
>>>>> Dave Page
>>>>> Blog: http://pgsnake.blogspot.com
>>>>> Twitter: @pgsnake
>>>>>
>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>> The Enterprise PostgreSQL Company
>>>>>
>>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Murtuza Zabuawala 2018-10-04 16:05:45 [pgAdmin4][Patch]: Code refactoring
Previous Message Dave Page 2018-10-04 14:21:57 Re: [pgAdmin4][Patch]: RM 1253 - Store and reload current location in treeview