diff options
author | Amitay Isaacs <amitay@gmail.com> | 2013-04-30 13:23:59 +1000 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2013-05-24 09:06:38 +1000 |
commit | 4581582a5ef061558a51710521d7cf89e4314583 (patch) | |
tree | a45571332e4099421b63648517ac1afc3265856a /ctdb/server/ctdb_lock.c | |
parent | 0c9d72eb189721f025a4ffdafaedfdcf94023ad3 (diff) | |
download | samba-4581582a5ef061558a51710521d7cf89e4314583.tar.gz samba-4581582a5ef061558a51710521d7cf89e4314583.tar.xz samba-4581582a5ef061558a51710521d7cf89e4314583.zip |
locking: Refactor code to iterate over databases based on priority
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
(This used to be ctdb commit a3275854812aca86032704134fdf6a129069c86a)
Diffstat (limited to 'ctdb/server/ctdb_lock.c')
-rw-r--r-- | ctdb/server/ctdb_lock.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_lock.c b/ctdb/server/ctdb_lock.c index bdf3257fe2b..46fc57ae33f 100644 --- a/ctdb/server/ctdb_lock.c +++ b/ctdb/server/ctdb_lock.c @@ -113,6 +113,48 @@ static bool later_db(struct ctdb_context *ctdb, const char *name) return false; } +typedef int (*db_handler_t)(struct ctdb_db_context *ctdb_db, + uint32_t priority, + void *private_data); + +static int ctdb_db_iterator(struct ctdb_context *ctdb, uint32_t priority, + db_handler_t handler, void *private_data) +{ + struct ctdb_db_context *ctdb_db; + int ret; + + for (ctdb_db = ctdb->db_list; ctdb_db; ctdb_db = ctdb_db->next) { + if (ctdb_db->priority != priority) { + continue; + } + if (later_db(ctdb, ctdb_db->db_name)) { + continue; + } + ret = handler(ctdb_db, priority, private_data); + if (ret != 0) { + return -1; + } + } + + /* If priority != 1, later_db check is not required and can return */ + if (priority != 1) { + return 0; + } + + for (ctdb_db = ctdb->db_list; ctdb_db; ctdb_db = ctdb_db->next) { + if (!later_db(ctdb, ctdb_db->db_name)) { + continue; + } + ret = handler(ctdb_db, priority, private_data); + if (ret != 0) { + return -1; + } + } + + return 0; +} + + /* * lock all databases */ |