As discussed, I have implemented the server side session management using the SQLite database.
Implementation:
* It creates/reuses the sqlite database per session.
* Stores the key (as text)/value (as blob) in the sqlite database.
* Needs to provide the session directory, where you want to store those sessions. If this directory does not exist, it creates the directory with 700 permission. (Default: <USER_HOME>/.pgadmin/sessions directory.)
* Also - sets default value for the log file to be stored in the '<USER_HOME>/.pgadmin' directory. This will allow us to keep separate configuration per user on any operation system, when running through runtime.
This implementation uses sqlite as session storage, it may affect because of explicit file system I/O operation. Though - performance should not be a big issue, as we're not targeting to support very huge parallel sessions.
Thanks - applied.
Thanks.
I assume it's expected at this point that new connections still fail if the backend is restarted (that would come with graceful reconnections)?
Hmm..
I did not get that.
Do you mean to say?
- New Connection to the server should not be established (if it was restarted).
- What about the existing connection, should it re-establish the connection after the backend restart (when allowed)?
There are still some cases, even with the graceful reconnection patch, where reconnections don't happen and you get a red alert message on the UI. I've yet to figure out exactly what they are though - but I think whether the pgAdmin server or the Python server has restarted or dropped connections, they should gracefully be re-established.