mirror of
https://github.com/camptocamp/odoo-cloud-platform.git
synced 2026-06-24 16:48:36 +00:00
[IMP] session_redis: add option to copy sessions from filesystem when starting
This commit is contained in:
committed by
Paul
co-authored by
Paul
parent
18b5ceaebc
commit
9ac4d26470
@@ -18,6 +18,10 @@ The storage of sessions in Redis is activated using environment variables.
|
|||||||
the sessions (default is 7 days)
|
the sessions (default is 7 days)
|
||||||
* ``ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS`` is the time in seconds before expiration of
|
* ``ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS`` is the time in seconds before expiration of
|
||||||
the anonymous sessions (default is 3 hours)
|
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>``.
|
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
|
* The server has to be restarted in order for the sessions to be stored in
|
||||||
Redis.
|
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
|
* The addon monkey-patch ``odoo.http.Root.session_store`` with a custom
|
||||||
method when the Redis mode is active, so incompatibilities with other addons
|
method when the Redis mode is active, so incompatibilities with other addons
|
||||||
is possible if they do the same.
|
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``
|
||||||
|
|||||||
@@ -76,6 +76,20 @@ def purge_fs_sessions(path):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def copy_fs_sessions(path):
|
||||||
|
from odoo.http import OpenERPSession
|
||||||
|
import werkzeug.contrib.sessions
|
||||||
|
werkzeug_session_store = werkzeug.contrib.sessions.FilesystemSessionStore(path, session_class=OpenERPSession)
|
||||||
|
session_store = http.Root().session_store
|
||||||
|
filename_prefix='werkzeug_'
|
||||||
|
filename_suffix = '.sess'
|
||||||
|
|
||||||
|
for fname in os.listdir(path):
|
||||||
|
path = os.path.join(path, fname)
|
||||||
|
session = werkzeug_session_store.get(fname[len(filename_prefix):len(filename_suffix) * -1])
|
||||||
|
session_store.save(session)
|
||||||
|
|
||||||
|
|
||||||
if is_true(os.environ.get('ODOO_SESSION_REDIS')):
|
if is_true(os.environ.get('ODOO_SESSION_REDIS')):
|
||||||
if sentinel_host:
|
if sentinel_host:
|
||||||
_logger.debug("HTTP sessions stored in Redis with prefix '%s'. "
|
_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.Root.session_store = session_store
|
||||||
http.session_gc = session_gc
|
http.session_gc = session_gc
|
||||||
|
|
||||||
|
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
|
# clean the existing sessions on the file system
|
||||||
purge_fs_sessions(odoo.tools.config.session_dir)
|
purge_fs_sessions(odoo.tools.config.session_dir)
|
||||||
|
|||||||
Reference in New Issue
Block a user