From d73dfa02a2f92a5abcd5110214a96d6d2ef3d97c Mon Sep 17 00:00:00 2001 From: RhodeCode Admin Date: Wed, 9 Aug 2023 13:09:43 +0200 Subject: [PATCH] redis-sessions: fixed cleanup command failing on serialized errors. somehow beaker mangles the data when logout happens we cannot de-serialize it properly then --- rhodecode/lib/user_sessions.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/rhodecode/lib/user_sessions.py b/rhodecode/lib/user_sessions.py index 479b4492..12b3763a 100644 --- a/rhodecode/lib/user_sessions.py +++ b/rhodecode/lib/user_sessions.py @@ -21,7 +21,9 @@ import re import time import datetime import dateutil +import dateutil.relativedelta import pickle +import base64 from rhodecode.model.db import DbSession, Session @@ -199,6 +201,7 @@ class RedisAuthSessions(BaseAuthSessions): import redis args = { 'socket_timeout': 60, + 'decode_responses': False, 'url': self.config.get('beaker.session.url') } @@ -217,14 +220,21 @@ class RedisAuthSessions(BaseAuthSessions): client = self._get_client() expiry_time = time.time() - older_than_seconds deleted_keys = 0 + for key in client.keys('beaker_cache:*'): data = client.get(key) if data: - json_data = pickle.loads(data) + accessed_time = 0 + data = base64.b64decode(data) + try: + json_data = pickle.loads(data) accessed_time = json_data['_accessed_time'] + except pickle.UnpicklingError: + accessed_time = 0 except KeyError: accessed_time = 0 + if accessed_time < expiry_time: client.delete(key) deleted_keys += 1