From 3d79d6112b9d3a9376f6beba85ec817e2e4e06f3 Mon Sep 17 00:00:00 2001 From: sageweil Date: Thu, 15 Feb 2007 18:59:52 +0000 Subject: [PATCH] fixed get_new_proposal_number git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1097 29311d96-e01e-0410-9327-a35deaab8ce9 --- branches/riccardo/monitor2/mon/Paxos.cc | 15 +++++++++++---- branches/riccardo/monitor2/mon/Paxos.h | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/branches/riccardo/monitor2/mon/Paxos.cc b/branches/riccardo/monitor2/mon/Paxos.cc index adafbe652d8e0..f2af3670559b4 100644 --- a/branches/riccardo/monitor2/mon/Paxos.cc +++ b/branches/riccardo/monitor2/mon/Paxos.cc @@ -63,16 +63,23 @@ void Paxos::handle_old_round(MMonPaxos *m) /* * return a globally unique, monotonically increasing proposal number */ -version_t Paxos::get_new_proposal_number() +version_t Paxos::get_new_proposal_number(version_t gt) { - // read, update, write + // read last version_t last = mon->store->get_int("last_paxos_proposal"); + if (last < gt) + last = gt; + + // update + last = last >> 8; last++; - mon->store->put_int(last, "last_paxos_proposal"); // make it unique among all monitors. - version_t pn = (100000000ULL * (version_t)whoami) + last; + version_t pn = (last << 8) + (version_t)whoami; + // write + mon->store->put_int(pn, "last_paxos_proposal"); + dout(10) << "get_new_proposal_number = " << pn << endl; return pn; } diff --git a/branches/riccardo/monitor2/mon/Paxos.h b/branches/riccardo/monitor2/mon/Paxos.h index 3bf934be13007..52a509d25aa76 100644 --- a/branches/riccardo/monitor2/mon/Paxos.h +++ b/branches/riccardo/monitor2/mon/Paxos.h @@ -45,7 +45,7 @@ class Paxos { void handle_ack(MMonPaxos*); void handle_old_round(MMonPaxos*); - version_t get_new_proposal_number(); + version_t get_new_proposal_number(version_t gt=0); // accepter void handle_collect(MMonPaxos*); -- 2.39.5