From d16f9a188a57dc1b950f05baf900b0cddfda2fe5 Mon Sep 17 00:00:00 2001 From: sageweil Date: Fri, 24 Aug 2007 16:37:29 +0000 Subject: [PATCH] new debug.h git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1672 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/debug.h | 46 ++++++++++++ trunk/ceph/osd/OSD.cc | 133 ++++++++++----------------------- trunk/ceph/osd/OSD.h | 2 + trunk/ceph/osd/PG.cc | 2 +- trunk/ceph/osd/RAID4PG.cc | 1 + trunk/ceph/osd/ReplicatedPG.cc | 3 +- 6 files changed, 90 insertions(+), 97 deletions(-) create mode 100644 trunk/ceph/debug.h diff --git a/trunk/ceph/debug.h b/trunk/ceph/debug.h new file mode 100644 index 0000000000000..93d484d17fd28 --- /dev/null +++ b/trunk/ceph/debug.h @@ -0,0 +1,46 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2004-2006 Sage Weil + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#ifndef __DEBUG_H +#define __DEBUG_H + +#include "config.h" + +#undef dout + +/** + * for cleaner output, bracket each line with + * dbeginl (in the dout macro) and dendl (in place of endl). + */ +extern Mutex _dout_lock; +struct _dbeginl_t { + _dbeginl_t(int) {} +}; +struct _dendl_t { + _dendl_t(int) {} +}; +static const _dbeginl_t dbeginl = 0; +static const _dendl_t dendl = 0; + +inline ostream& operator<<(ostream& out, _dbeginl_t) { + _dout_lock.Lock(); + return out; +} +inline ostream& operator<<(ostream& out, _dendl_t) { + out << endl; + _dout_lock.Unlock(); + return out; +} + +#endif diff --git a/trunk/ceph/osd/OSD.cc b/trunk/ceph/osd/OSD.cc index 803c6e39d03d6..6aa1ecc429842 100644 --- a/trunk/ceph/osd/OSD.cc +++ b/trunk/ceph/osd/OSD.cc @@ -68,7 +68,8 @@ #include "config.h" -#undef dout + +#include "debug.h" #define dout(l) if (l<=g_conf.debug || l<=g_conf.debug_osd) cout << dbeginl << g_clock.now() << " osd" << whoami << " " << (osdmap ? osdmap->get_epoch():0) << " " #define derr(l) if (l<=g_conf.debug || l<=g_conf.debug_osd) cerr << dbeginl << g_clock.now() << " osd" << whoami << " " << (osdmap ? osdmap->get_epoch():0) << " " @@ -381,6 +382,7 @@ PG *OSD::_new_lock_pg(pg_t pgid) return pg; } + PG *OSD::_create_lock_pg(pg_t pgid, ObjectStore::Transaction& t) { dout(10) << "_create_lock_pg " << pgid << dendl; @@ -444,6 +446,28 @@ void OSD::_remove_unlock_pg(PG *pg) } +void OSD::try_create_pg(pg_t pgid, ObjectStore::Transaction& t) +{ + vector acting; + int nrep = osdmap->pg_to_acting_osds(pgid, acting); + int role = osdmap->calc_pg_role(whoami, acting, nrep); + if (role < 0) return; + + PG *pg = _create_lock_pg(pgid, t); + pg->set_role(role); + pg->acting.swap(acting); + pg->last_epoch_started_any = + pg->info.last_epoch_started = + pg->info.history.same_since = + pg->info.history.same_primary_since = + pg->info.history.same_acker_since = osdmap->get_epoch(); + pg->write_log(t); + if (g_conf.osd_hack_fast_startup) + pg->activate(t); + + dout(7) << "created " << *pg << dendl; + pg->unlock(); +} void OSD::load_pgs() { @@ -1113,101 +1137,19 @@ void OSD::advance_map(ObjectStore::Transaction& t) // create PGs // replicated - for (int nrep = 1; - nrep <= maxrep; // for low osd counts.. hackish bleh - nrep++) { - for (ps_t ps = 0; ps < numps; ++ps) { - vector acting; - pg_t pgid = pg_t(pg_t::TYPE_REP, nrep, ps, -1); - int nrep = osdmap->pg_to_acting_osds(pgid, acting); - int role = osdmap->calc_pg_role(whoami, acting, nrep); - if (role < 0) continue; - - PG *pg = _create_lock_pg(pgid, t); - pg->set_role(role); - pg->acting.swap(acting); - pg->last_epoch_started_any = - pg->info.last_epoch_started = - pg->info.history.same_since = - pg->info.history.same_primary_since = - pg->info.history.same_acker_since = osdmap->get_epoch(); - pg->write_log(t); - //pg->activate(t); - - dout(7) << "created " << *pg << dendl; - pg->unlock(); - } - - for (ps_t ps = 0; ps < numlps; ++ps) { - // local PG too - vector acting; - pg_t pgid = pg_t(pg_t::TYPE_REP, nrep, ps, whoami); - int nrep = osdmap->pg_to_acting_osds(pgid, acting); - int role = osdmap->calc_pg_role(whoami, acting, nrep); - - PG *pg = _create_lock_pg(pgid, t); - pg->acting.swap(acting); - pg->set_role(role); - pg->last_epoch_started_any = - pg->info.last_epoch_started = - pg->info.history.same_primary_since = - pg->info.history.same_acker_since = - pg->info.history.same_since = osdmap->get_epoch(); - pg->write_log(t); - //pg->activate(t); - - dout(7) << "created " << *pg << dendl; - pg->unlock(); - } + for (int nrep = 1; nrep <= maxrep; nrep++) { + for (ps_t ps = 0; ps < numps; ++ps) + try_create_pg(pg_t(pg_t::TYPE_REP, nrep, ps, -1), t); + for (ps_t ps = 0; ps < numlps; ++ps) + try_create_pg(pg_t(pg_t::TYPE_REP, nrep, ps, whoami), t); } // raided - for (int size = minraid; - size <= maxraid; - size++) { - for (ps_t ps = 0; ps < numps; ++ps) { - vector acting; - pg_t pgid = pg_t(pg_t::TYPE_RAID4, size, ps, -1); - int nrep = osdmap->pg_to_acting_osds(pgid, acting); - int role = osdmap->calc_pg_role(whoami, acting, nrep); - if (role < 0) continue; - - PG *pg = _create_lock_pg(pgid, t); - pg->set_role(role); - pg->acting.swap(acting); - pg->last_epoch_started_any = - pg->info.last_epoch_started = - pg->info.history.same_since = - pg->info.history.same_primary_since = - pg->info.history.same_acker_since = osdmap->get_epoch(); - pg->write_log(t); - //pg->activate(t); - - dout(7) << "created " << *pg << dendl; - pg->unlock(); - } - - for (ps_t ps = 0; ps < numlps; ++ps) { - // local PG too - vector acting; - pg_t pgid = pg_t(pg_t::TYPE_RAID4, size, ps, whoami); - int nrep = osdmap->pg_to_acting_osds(pgid, acting); - int role = osdmap->calc_pg_role(whoami, acting, nrep); - - PG *pg = _create_lock_pg(pgid, t); - pg->acting.swap(acting); - pg->set_role(role); - pg->last_epoch_started_any = - pg->info.last_epoch_started = - pg->info.history.same_primary_since = - pg->info.history.same_acker_since = - pg->info.history.same_since = osdmap->get_epoch(); - pg->write_log(t); - //pg->activate(t); - - dout(7) << "created " << *pg << dendl; - pg->unlock(); - } + for (int size = minraid; size <= maxraid; size++) { + for (ps_t ps = 0; ps < numps; ++ps) + try_create_pg(pg_t(pg_t::TYPE_RAID4, size, ps, -1), t); + for (ps_t ps = 0; ps < numlps; ++ps) + try_create_pg(pg_t(pg_t::TYPE_RAID4, size, ps, whoami), t); } dout(1) << "mkfs done, created " << pg_map.size() << " pgs" << dendl; @@ -1375,8 +1317,9 @@ void OSD::activate_map(ObjectStore::Transaction& t) } } - //if (osdmap->is_mkfs()) // hack: skip the queries/summaries if it's a mkfs - //return; + if (g_conf.osd_hack_fast_startup && + osdmap->is_mkfs()) // hack: skip the queries/summaries if it's a mkfs + return; do_notifies(notify_list); // notify? (residual|replica) do_queries(query_map); diff --git a/trunk/ceph/osd/OSD.h b/trunk/ceph/osd/OSD.h index cd3e29c3be8c0..27cc45f58f4b1 100644 --- a/trunk/ceph/osd/OSD.h +++ b/trunk/ceph/osd/OSD.h @@ -256,6 +256,8 @@ private: PG *_create_lock_pg(pg_t pg, ObjectStore::Transaction& t); // create new PG void _remove_unlock_pg(PG *pg); // remove from store and memory + void try_create_pg(pg_t pgid, ObjectStore::Transaction& t); + void load_pgs(); void project_pg_history(pg_t pgid, PG::Info::History& h, epoch_t from, vector& last); diff --git a/trunk/ceph/osd/PG.cc b/trunk/ceph/osd/PG.cc index 0d9b82c745611..4367294ccab66 100644 --- a/trunk/ceph/osd/PG.cc +++ b/trunk/ceph/osd/PG.cc @@ -26,7 +26,7 @@ #include "messages/MOSDPGRemove.h" #include "messages/MOSDPGActivateSet.h" -#undef dout +#include "debug.h" #define dout(l) if (l<=g_conf.debug || l<=g_conf.debug_osd) cout << dbeginl << g_clock.now() << " osd" << osd->whoami << " " << (osd->osdmap ? osd->osdmap->get_epoch():0) << " " << *this << " " diff --git a/trunk/ceph/osd/RAID4PG.cc b/trunk/ceph/osd/RAID4PG.cc index 8190f60a19663..0b3c9b1f0ee34 100644 --- a/trunk/ceph/osd/RAID4PG.cc +++ b/trunk/ceph/osd/RAID4PG.cc @@ -23,6 +23,7 @@ #include "messages/MOSDPGRemove.h" #include "config.h" +#include "debug.h" #undef dout #define dout(l) if (l<=g_conf.debug || l<=g_conf.debug_osd) cout << dbeginl << g_clock.now() << " osd" << osd->get_nodeid() << " " << (osd->osdmap ? osd->osdmap->get_epoch():0) << " " << *this << " " diff --git a/trunk/ceph/osd/ReplicatedPG.cc b/trunk/ceph/osd/ReplicatedPG.cc index 279c56b6f095e..a3b378cdb6706 100644 --- a/trunk/ceph/osd/ReplicatedPG.cc +++ b/trunk/ceph/osd/ReplicatedPG.cc @@ -25,7 +25,8 @@ #include "config.h" -#undef dout +#include "debug.h" + #define dout(l) if (l<=g_conf.debug || l<=g_conf.debug_osd) cout << dbeginl << g_clock.now() << " osd" << osd->get_nodeid() << " " << (osd->osdmap ? osd->osdmap->get_epoch():0) << " " << *this << " " #include -- 2.39.5