summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2012-04-26 11:01:06 -0700
committerSage Weil <sage@newdream.net>2012-04-26 18:49:19 -0700
commited1024fb15729651a987ccf3fe9d1ecf91cae164 (patch)
tree5f4aa146da3d0cf164d7833f7470639eedb0b583
parent207eec65d5959a5ce1591f2bf5897dc5496b2d3e (diff)
downloadceph-ed1024fb15729651a987ccf3fe9d1ecf91cae164.tar.gz
osdmap: use shared_ptr<> for pg_temp
This will let us dedup later. Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--src/mon/OSDMonitor.cc16
-rw-r--r--src/osd/OSDMap.cc30
-rw-r--r--src/osd/OSDMap.h3
3 files changed, 25 insertions, 24 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index 08e5e0d88e3..2d22d31dffd 100644
--- a/src/mon/OSDMonitor.cc
+++ b/src/mon/OSDMonitor.cc
@@ -249,8 +249,8 @@ void OSDMonitor::remove_redundant_pg_temp()
{
dout(10) << "remove_redundant_pg_temp" << dendl;
- for (map<pg_t,vector<int> >::iterator p = osdmap.pg_temp.begin();
- p != osdmap.pg_temp.end();
+ for (map<pg_t,vector<int> >::iterator p = osdmap.pg_temp->begin();
+ p != osdmap.pg_temp->end();
p++) {
if (pending_inc.new_pg_temp.count(p->first) == 0) {
vector<int> raw_up;
@@ -934,14 +934,14 @@ bool OSDMonitor::preprocess_pgtemp(MOSDPGTemp *m)
for (map<pg_t,vector<int> >::iterator p = m->pg_temp.begin(); p != m->pg_temp.end(); p++) {
dout(20) << " " << p->first
- << (osdmap.pg_temp.count(p->first) ? osdmap.pg_temp[p->first] : empty)
+ << (osdmap.pg_temp->count(p->first) ? (*osdmap.pg_temp)[p->first] : empty)
<< " -> " << p->second << dendl;
// removal?
- if (p->second.empty() && osdmap.pg_temp.count(p->first))
+ if (p->second.empty() && osdmap.pg_temp->count(p->first))
return false;
// change?
- if (p->second.size() && (osdmap.pg_temp.count(p->first) == 0 ||
- osdmap.pg_temp[p->first] != p->second))
+ if (p->second.size() && (osdmap.pg_temp->count(p->first) == 0 ||
+ (*osdmap.pg_temp)[p->first] != p->second))
return false;
}
@@ -2571,8 +2571,8 @@ int OSDMonitor::_prepare_remove_pool(uint64_t pool)
pending_inc.old_pools.insert(pool);
// remove any pg_temp mappings for this pool too
- for (map<pg_t,vector<int32_t> >::iterator p = osdmap.pg_temp.begin();
- p != osdmap.pg_temp.end();
+ for (map<pg_t,vector<int32_t> >::iterator p = osdmap.pg_temp->begin();
+ p != osdmap.pg_temp->end();
++p)
if (p->first.pool() == pool) {
dout(10) << "_prepare_remove_pool " << pool << " removing obsolete pg_temp "
diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc
index 767fd868c59..fd05ce96e21 100644
--- a/src/osd/OSDMap.cc
+++ b/src/osd/OSDMap.cc
@@ -707,9 +707,9 @@ int OSDMap::apply_incremental(Incremental &inc)
// pg rebuild
for (map<pg_t, vector<int> >::iterator p = inc.new_pg_temp.begin(); p != inc.new_pg_temp.end(); p++) {
if (p->second.empty())
- pg_temp.erase(p->first);
+ pg_temp->erase(p->first);
else
- pg_temp[p->first] = p->second;
+ (*pg_temp)[p->first] = p->second;
}
// blacklist
@@ -810,8 +810,8 @@ void OSDMap::_raw_to_up_osds(pg_t pg, vector<int>& raw, vector<int>& up) const
bool OSDMap::_raw_to_temp_osds(const pg_pool_t& pool, pg_t pg, vector<int>& raw, vector<int>& temp) const
{
pg = pool.raw_pg_to_pg(pg);
- map<pg_t,vector<int> >::const_iterator p = pg_temp.find(pg);
- if (p != pg_temp.end()) {
+ map<pg_t,vector<int> >::const_iterator p = pg_temp->find(pg);
+ if (p != pg_temp->end()) {
temp.clear();
for (unsigned i=0; i<p->second.size(); i++) {
if (!exists(p->second[i]) || is_down(p->second[i]))
@@ -927,10 +927,10 @@ void OSDMap::encode_client_old(bufferlist& bl) const
::encode(osd_addrs->client_addr, bl);
// for ::encode(pg_temp, bl);
- n = pg_temp.size();
+ n = pg_temp->size();
::encode(n, bl);
- for (map<pg_t,vector<int32_t> >::const_iterator p = pg_temp.begin();
- p != pg_temp.end();
+ for (map<pg_t,vector<int32_t> >::const_iterator p = pg_temp->begin();
+ p != pg_temp->end();
++p) {
old_pg_t opg = p->first.get_old_pg();
::encode(opg, bl);
@@ -970,7 +970,7 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const
::encode(osd_weight, bl);
::encode(osd_addrs->client_addr, bl);
- ::encode(pg_temp, bl);
+ ::encode(*pg_temp, bl);
// crush
bufferlist cbl;
@@ -1048,15 +1048,15 @@ void OSDMap::decode(bufferlist::iterator& p)
::decode(osd_weight, p);
::decode(osd_addrs->client_addr, p);
if (v <= 5) {
- pg_temp.clear();
+ pg_temp->clear();
::decode(n, p);
while (n--) {
old_pg_t opg;
::decode_raw(opg, p);
- ::decode(pg_temp[pg_t(opg)], p);
+ ::decode((*pg_temp)[pg_t(opg)], p);
}
} else {
- ::decode(pg_temp, p);
+ ::decode(*pg_temp, p);
}
// crush
@@ -1148,8 +1148,8 @@ void OSDMap::dump(Formatter *f) const
f->close_section();
f->open_array_section("pg_temp");
- for (map<pg_t,vector<int> >::const_iterator p = pg_temp.begin();
- p != pg_temp.end();
+ for (map<pg_t,vector<int> >::const_iterator p = pg_temp->begin();
+ p != pg_temp->end();
p++) {
f->open_array_section("osds");
for (vector<int>::const_iterator q = p->second.begin(); q != p->second.end(); ++q)
@@ -1267,8 +1267,8 @@ void OSDMap::print(ostream& out) const
}
out << std::endl;
- for (map<pg_t,vector<int> >::const_iterator p = pg_temp.begin();
- p != pg_temp.end();
+ for (map<pg_t,vector<int> >::const_iterator p = pg_temp->begin();
+ p != pg_temp->end();
p++)
out << "pg_temp " << p->first << " " << p->second << "\n";
diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h
index 66cc543f533..a7a5cc2572d 100644
--- a/src/osd/OSDMap.h
+++ b/src/osd/OSDMap.h
@@ -165,7 +165,7 @@ private:
vector<__u32> osd_weight; // 16.16 fixed point, 0x10000 = "in", 0 = "out"
vector<osd_info_t> osd_info;
- map<pg_t,vector<int> > pg_temp; // temp pg mapping (e.g. while we rebuild)
+ std::tr1::shared_ptr< map<pg_t,vector<int> > > pg_temp; // temp pg mapping (e.g. while we rebuild)
map<int64_t,pg_pool_t> pools;
map<int64_t,string> pool_name;
@@ -189,6 +189,7 @@ private:
flags(0),
num_osd(0), max_osd(0),
osd_addrs(new addrs_s),
+ pg_temp(new map<pg_t,vector<int> >),
cluster_snapshot_epoch(0),
crush(new CrushWrapper) {
memset(&fsid, 0, sizeof(fsid));