summaryrefslogtreecommitdiff
path: root/src/mon/AuthMonitor.cc
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-05 14:10:27 -0700
committerSage Weil <sage@inktank.com>2013-08-05 14:10:27 -0700
commit60830537cb787ff778e96693c557682367d42ca4 (patch)
tree78b9bed0cad5c759ce8fd334d17cd5feaf9a56c2 /src/mon/AuthMonitor.cc
parenta0929955cb84fb8cfdeb551d6863e4955b8e2a71 (diff)
downloadceph-wip-mon-global-id.tar.gz
mon: make max_global_id increase a bit more robustwip-mon-global-id
- Increase it in one go, not with lots of additions - Deal with weird edge cases where max_global_id is not a sane value Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/mon/AuthMonitor.cc')
-rw-r--r--src/mon/AuthMonitor.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/mon/AuthMonitor.cc b/src/mon/AuthMonitor.cc
index 629451b5eac..b5cd2325b6f 100644
--- a/src/mon/AuthMonitor.cc
+++ b/src/mon/AuthMonitor.cc
@@ -216,11 +216,13 @@ void AuthMonitor::update_from_paxos(bool *need_bootstrap)
*/
}
-void AuthMonitor::increase_max_global_id()
+void AuthMonitor::increase_max_global_id(uint64_t min)
{
assert(mon->is_leader());
-
- max_global_id += g_conf->mon_globalid_prealloc;
+ assert(g_conf->mon_globalid_prealloc > (int)mon->monmap->size());
+ if (min < max_global_id)
+ min = max_global_id;
+ max_global_id = min + g_conf->mon_globalid_prealloc;
dout(10) << "increasing max_global_id to " << max_global_id << dendl;
Incremental inc;
inc.inc_type = GLOBAL_ID;
@@ -348,9 +350,9 @@ uint64_t AuthMonitor::assign_global_id(MAuth *m, bool should_increase_max)
bool return_next = (next_global_id <= max_global_id);
// bump the max?
- while (mon->is_leader() &&
- next_global_id >= max_global_id - g_conf->mon_globalid_prealloc / 2) {
- increase_max_global_id();
+ if (mon->is_leader() &&
+ next_global_id + (g_conf->mon_globalid_prealloc / 2) >= max_global_id) {
+ increase_max_global_id(next_global_id);
}
if (return_next) {
@@ -921,7 +923,7 @@ done:
bool AuthMonitor::prepare_global_id(MMonGlobalID *m)
{
dout(10) << "AuthMonitor::prepare_global_id" << dendl;
- increase_max_global_id();
+ increase_max_global_id(0);
m->put();
return true;