From 9da420ebf4fde597d4c62e8382ac922005e064e5 Mon Sep 17 00:00:00 2001 From: sageweil Date: Wed, 29 Aug 2007 15:26:07 +0000 Subject: [PATCH] fixed objecter timeout to request new osdmap git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1728 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/client/Client.cc | 5 ++++- trunk/ceph/osdc/Objecter.cc | 16 ++++++++++++++++ trunk/ceph/osdc/Objecter.h | 13 +++---------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/trunk/ceph/client/Client.cc b/trunk/ceph/client/Client.cc index 7d0dc5c0f5377..7153461009061 100644 --- a/trunk/ceph/client/Client.cc +++ b/trunk/ceph/client/Client.cc @@ -229,10 +229,13 @@ void Client::dump_cache() void Client::init() { + Mutex::Locker lock(client_lock); objecter->init(); } -void Client::shutdown() { +void Client::shutdown() +{ + Mutex::Locker lock(client_lock); dout(1) << "shutdown" << dendl; objecter->shutdown(); messenger->shutdown(); diff --git a/trunk/ceph/osdc/Objecter.cc b/trunk/ceph/osdc/Objecter.cc index d0e0bbd9e6502..78a4bdaf30bb3 100644 --- a/trunk/ceph/osdc/Objecter.cc +++ b/trunk/ceph/osdc/Objecter.cc @@ -36,6 +36,19 @@ // messages ------------------------------ +void Objecter::init() +{ + assert(client_lock.is_locked()); // otherwise event cancellation is unsafe + timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this)); +} + +void Objecter::shutdown() +{ + assert(client_lock.is_locked()); // otherwise event cancellation is unsafe + timer.cancel_all(); +} + + void Objecter::dispatch(Message *m) { switch (m->get_type()) { @@ -263,6 +276,9 @@ void Objecter::tick() break; } } + + // reschedule + timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this)); } diff --git a/trunk/ceph/osdc/Objecter.h b/trunk/ceph/osdc/Objecter.h index 121225622c58d..30b1c3840a0c4 100644 --- a/trunk/ceph/osdc/Objecter.h +++ b/trunk/ceph/osdc/Objecter.h @@ -54,7 +54,6 @@ class Objecter { Mutex &client_lock; SafeTimer timer; - Context *tick_event; class C_Tick : public Context { Objecter *ob; @@ -173,18 +172,12 @@ class Objecter { messenger(m), monmap(mm), osdmap(om), last_tid(0), client_inc(-1), num_unacked(0), num_uncommitted(0), - client_lock(l), timer(l), tick_event(0) + client_lock(l), timer(l) { } ~Objecter() { } - void init() { - assert(client_lock.is_locked()); // otherwise event cancellation is unsafe - timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this)); - } - void shutdown() { - assert(client_lock.is_locked()); // otherwise event cancellation is unsafe - if (tick_event) timer.cancel_event(tick_event); - } + void init(); + void shutdown(); // messages public: -- 2.39.5