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