summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-02-12 13:08:36 -0800
committerSamuel Just <sam.just@inktank.com>2013-02-20 13:29:19 -0800
commit22ec5bc315024c00e5f50c513658de9e779c929c (patch)
treee4972c00f7ba32a36659c0cf59dbe5b3acc54b82
parent359c0dfd298cb1965ebdb6a0ff49e619ed442b04 (diff)
downloadceph-22ec5bc315024c00e5f50c513658de9e779c929c.tar.gz
PG: check object_contexts on flushed
At FlushedEvt, all outstanding io should be complete and the object_contexts map should be empty. Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/PG.cc1
-rw-r--r--src/osd/PG.h1
-rw-r--r--src/osd/ReplicatedPG.cc5
-rw-r--r--src/osd/ReplicatedPG.h1
4 files changed, 8 insertions, 0 deletions
diff --git a/src/osd/PG.cc b/src/osd/PG.cc
index 3c10230c41a..09d27a6a037 100644
--- a/src/osd/PG.cc
+++ b/src/osd/PG.cc
@@ -5436,6 +5436,7 @@ PG::RecoveryState::Reset::react(const FlushedEvt&)
{
PG *pg = context< RecoveryMachine >().pg;
pg->flushed = true;
+ pg->on_flushed();
pg->requeue_ops(pg->waiting_for_active);
return discard_event();
}
diff --git a/src/osd/PG.h b/src/osd/PG.h
index ec3d4664a90..39bc6b5ab98 100644
--- a/src/osd/PG.h
+++ b/src/osd/PG.h
@@ -1916,6 +1916,7 @@ public:
virtual void on_role_change() = 0;
virtual void on_change() = 0;
virtual void on_activate() = 0;
+ virtual void on_flushed() = 0;
virtual void on_shutdown() = 0;
virtual void remove_watchers_and_notifies() = 0;
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 23174b937dd..ffa1a93845b 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -6256,6 +6256,11 @@ void ReplicatedPG::on_shutdown()
remove_watchers_and_notifies();
}
+void ReplicatedPG::on_flushed()
+{
+ assert(object_contexts.empty());
+}
+
void ReplicatedPG::on_activate()
{
for (unsigned i = 1; i<acting.size(); i++) {
diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h
index 79b11bd4561..848cd1412b7 100644
--- a/src/osd/ReplicatedPG.h
+++ b/src/osd/ReplicatedPG.h
@@ -1108,6 +1108,7 @@ public:
void on_role_change();
void on_change();
void on_activate();
+ void on_flushed();
void on_removal();
void on_shutdown();
};