summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-11-05 07:00:23 -0800
committerSage Weil <sage@inktank.com>2012-11-30 13:18:02 -0800
commit662ac0b2f73b2924171286f08f85498c7e038aef (patch)
tree72d3ab74b4cde5820ac54b5cb6b0b0dd5584e2c7
parente42ed659b9b1d161f14a5edfbcdb4e0ca509f95b (diff)
downloadceph-662ac0b2f73b2924171286f08f85498c7e038aef.tar.gz
more pg_interval_t changes... end_stamp, primary_up_from
-rw-r--r--src/osd/osd_types.cc22
-rw-r--r--src/osd/osd_types.h5
2 files changed, 18 insertions, 9 deletions
diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc
index 55b5655cb61..b4121bbdbf3 100644
--- a/src/osd/osd_types.cc
+++ b/src/osd/osd_types.cc
@@ -1377,19 +1377,21 @@ void pg_info_t::generate_test_instances(list<pg_info_t*>& o)
// -- pg_notify_t --
void pg_notify_t::encode(bufferlist &bl) const
{
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
::encode(query_epoch, bl);
::encode(epoch_sent, bl);
::encode(info, bl);
+ ::encode(last_hb, bl);
ENCODE_FINISH(bl);
}
void pg_notify_t::decode(bufferlist::iterator &bl)
{
- DECODE_START(1, bl);
+ DECODE_START(2, bl);
::decode(query_epoch, bl);
::decode(epoch_sent, bl);
::decode(info, bl);
+ ::decode(last_hb, bl);
DECODE_FINISH(bl);
}
@@ -1427,7 +1429,8 @@ void pg_interval_t::encode(bufferlist& bl) const
::encode(up, bl);
::encode(acting, bl);
::encode(maybe_went_rw, bl);
- ::encode(start_stamp, bl);
+ ::encode(end_stamp, bl);
+ ::encode(primary_up_from, bl);
ENCODE_FINISH(bl);
}
@@ -1439,7 +1442,8 @@ void pg_interval_t::decode(bufferlist::iterator& bl)
::decode(up, bl);
::decode(acting, bl);
::decode(maybe_went_rw, bl);
- ::decode(start_stamp, bl);
+ ::decode(end_stamp, bl);
+ ::decode(primary_up_from, bl);
DECODE_FINISH(bl);
}
@@ -1455,7 +1459,8 @@ void pg_interval_t::dump(Formatter *f) const
f->open_array_section("acting");
for (vector<int>::const_iterator p = acting.begin(); p != acting.end(); ++p)
f->dump_int("osd", *p);
- f->dump_stream("start_stamp") << duration;
+ f->dump_stream("end_stamp") << duration;
+ f->dump_unsigned("primary_up_from", primary_up_from);
f->close_section();
}
@@ -1469,7 +1474,8 @@ void pg_interval_t::generate_test_instances(list<pg_interval_t*>& o)
o.back()->first = 4;
o.back()->last = 5;
o.back()->maybe_went_rw = true;
- o.back()->start_stamp = utime_t(22, 23);
+ o.back()->end_stamp = utime_t(22, 23);
+ o.back()->primary_up_from = 1322;
}
bool pg_interval_t::check_new_interval(
@@ -1495,7 +1501,9 @@ bool pg_interval_t::check_new_interval(
i.last = osdmap->get_epoch() - 1;
i.acting = old_acting;
i.up = old_up;
- i.start_stamp = osdmap->get_modified();
+ i.end_stamp = osdmap->get_modified();
+ if (old_acting.size())
+ i.primary_up_from = lastmap->get_osd_info(old_acting[0])->up_from;
if (i.acting.size() >=
osdmap->get_pools().find(pool_id)->second.min_size) {
diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h
index bab46e69430..e7592248020 100644
--- a/src/osd/osd_types.h
+++ b/src/osd/osd_types.h
@@ -1122,9 +1122,10 @@ struct pg_interval_t {
vector<int> up, acting;
epoch_t first, last;
bool maybe_went_rw;
- utime_t start_stamp; ///< timestamp of first osdmap epoch
+ utime_t end_stamp; ///< timestamp of first osdmap epoch
+ epoch_t primary_up_from; ///< primary's up_from
- pg_interval_t() : first(0), last(0), maybe_went_rw(false) {}
+ pg_interval_t() : first(0), last(0), maybe_went_rw(false), primary_up_from(0) {}
void encode(bufferlist& bl) const;
void decode(bufferlist::iterator& bl);