Merge pull request #185 from PCatinean/12.0-session-preserve-forward-port-pc

12.0 session preserve forward port pc
This commit is contained in:
Guewen Baconnier
2020-05-28 20:42:32 +02:00
committed by GitHub
co-authored by GitHub
3 changed files with 31 additions and 4 deletions
+10 -2
View File
@@ -18,6 +18,10 @@ The storage of sessions in Redis is activated using environment variables.
the sessions (default is 7 days)
* ``ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS`` is the time in seconds before expiration of
the anonymous sessions (default is 3 hours)
* ``ODOO_SESSION_REDIS_COPY_EXISTING_FS_SESSIONS`` when ``1`` or ``true`` copies the existing odoo sessions from
the filesystem to redis when starting
* ``ODOO_SESSION_REDIS_PURGE_EXISTING_FS_SESSIONS`` when ``1`` or ``true`` deletes the existing odoo sessions from
the filesystem to redis when starting
The keys are set to ``session:<session id>``.
@@ -32,8 +36,12 @@ Limitations
* The server has to be restarted in order for the sessions to be stored in
Redis.
* All the users will have to login again as their previous session will be
dropped.
* The addon monkey-patch ``odoo.http.Root.session_store`` with a custom
method when the Redis mode is active, so incompatibilities with other addons
is possible if they do the same.
Preseve Sessions
----------------
In order to preserve sessions when switching to redis run odoo with
``ODOO_SESSION_REDIS_COPY_EXISTING_FS_SESSIONS=true odoo --load session_redis --stop-after-init``
+1
View File
@@ -15,4 +15,5 @@
'website': 'http://www.camptocamp.com',
'data': [],
'installable': True,
'post_load': False,
}
+20 -2
View File
@@ -76,6 +76,20 @@ def purge_fs_sessions(path):
pass
def copy_fs_sessions(path):
from odoo.http import OpenERPSession
from werkzeug.contrib.sessions import FilesystemSessionStore
werkzeug_session_store = FilesystemSessionStore(path, session_class=OpenERPSession)
session_store = http.Root().session_store
filename_prefix_len = len('werkzeug_')
filename_suffix_len = len('.sess')
for fname in os.listdir(path):
session_file = fname[filename_prefix_len:filename_suffix_len * -1]
session = werkzeug_session_store.get(session_file)
session_store.save(session)
if is_true(os.environ.get('ODOO_SESSION_REDIS')):
if sentinel_host:
_logger.debug("HTTP sessions stored in Redis with prefix '%s'. "
@@ -87,5 +101,9 @@ if is_true(os.environ.get('ODOO_SESSION_REDIS')):
http.Root.session_store = session_store
http.session_gc = session_gc
# clean the existing sessions on the file system
purge_fs_sessions(odoo.tools.config.session_dir)
if is_true(os.environ.get('ODOO_SESSION_REDIS_COPY_EXISTING_FS_SESSIONS')):
copy_fs_sessions(odoo.tools.config.session_dir)
if is_true(os.environ.get('ODOO_SESSION_REDIS_PURGE_EXISTING_FS_SESSIONS')):
# clean the existing sessions on the file system
purge_fs_sessions(odoo.tools.config.session_dir)