From bcd7d179e8d1b6a73f55431e7c574a8dbde7bdaf Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Sun, 14 Jul 2019 12:12:32 +0200 Subject: [PATCH] rough draft current/next selection --- inventory_provider/tasks/common.py | 54 +++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/inventory_provider/tasks/common.py b/inventory_provider/tasks/common.py index 2a965e12..a774e96a 100644 --- a/inventory_provider/tasks/common.py +++ b/inventory_provider/tasks/common.py @@ -1,17 +1,61 @@ +import logging import redis import redis.sentinel +logger = logging.getLogger(__name__) + + +def _get_redis(config, dbid=None): + + if 'sentinel' in config: + _params = config['sentinel'] + else: + _params = config['redis'] + + if dbid is None: + dbid = min(_params['databases']) + + assert dbid in _params['databases'] + + kwargs = { + 'db': dbid, + 'socket_timeout': 0.1 + } -def get_redis(config): if 'sentinel' in config: sentinel = redis.sentinel.Sentinel([( config['sentinel']['hostname'], config['sentinel']['port'])], - socket_timeout=0.1) - return sentinel.master_for( + **kwargs) + return dbid, sentinel.master_for( config['sentinel']['name'], socket_timeout=0.1) else: - return redis.StrictRedis( + return dbid, redis.StrictRedis( host=config['redis']['hostname'], - port=config['redis']['port']) + port=config['redis']['port'], + **kwargs) + + +def _get_specific_redis(config, db_id_key): + db, r = _get_redis(config) + required_db = r.get(db_id_key) + if required_db is None: + logger.warning('can''t determine current db, using: {}'.format(db)) + return r + + required_db = int(required_db.decode('utf-8')) + if db == required_db: + return r + + db, r = _get_redis(config, required_db) + assert db == required_db + return r + + +def get_current_redis(config): + return _get_specific_redis(config, 'db:current') + + +def get_next_redis(config): + return _get_specific_redis(config, 'db:current') -- GitLab