]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: include fsid in MPGStats
authorSage Weil <sage@newdream.net>
Tue, 28 Oct 2008 20:49:32 +0000 (13:49 -0700)
committerSage Weil <sage@newdream.net>
Tue, 28 Oct 2008 20:49:32 +0000 (13:49 -0700)
src/messages/MPGStats.h
src/mon/PGMonitor.cc
src/osd/OSD.cc

index 31d721f31b08c80ddfa63aeec73328e1e60a2c76..4cabe6b803fa6154c88d8f7d5ff5eb86090b1541 100644 (file)
 
 class MPGStats : public Message {
 public:
+  ceph_fsid fsid;
   map<pg_t,pg_stat_t> pg_stat;
   osd_stat_t osd_stat;
   
   MPGStats() : Message(MSG_PGSTATS) {}
+  MPGStats(ceph_fsid& f) : Message(MSG_PGSTATS), fsid(f) {}
 
   const char *get_type_name() { return "pg_stats"; }
   void print(ostream& out) {
@@ -30,11 +32,13 @@ public:
   }
 
   void encode_payload() {
+    ::encode(fsid, payload);
     ::encode(osd_stat, payload);
     ::encode(pg_stat, payload);
   }
   void decode_payload() {
     bufferlist::iterator p = payload.begin();
+    ::decode(fsid, p);
     ::decode(osd_stat, p);
     ::decode(pg_stat, p);
   }
index e911f3ce00895f4dcae55f91de65eba94cc1cc8e..5ecde061e72e9942cf157fd8a824d84fdd1a87b4 100644 (file)
@@ -267,10 +267,18 @@ bool PGMonitor::prepare_pg_stats(MPGStats *stats)
 {
   dout(10) << "prepare_pg_stats " << *stats << " from " << stats->get_orig_source() << dendl;
   int from = stats->get_orig_source().num();
+
+  if (!ceph_fsid_equal(&stats->fsid, &mon->monmap->fsid)) {
+    dout(0) << "handle_statfs on fsid " << stats->fsid << " != " << mon->monmap->fsid << dendl;
+    delete stats;
+    return false;
+  }
   if (!stats->get_orig_source().is_osd() ||
       !mon->osdmon->osdmap.is_up(from) ||
       stats->get_orig_source_inst() != mon->osdmon->osdmap.get_inst(from)) {
     dout(1) << " ignoring stats from non-active osd" << dendl;
+    delete stats;
+    return false;
   }
       
   // osd stat
index 5aa1b31b6e7326f3f8b1f4be604dc4e9e7d43457..2eba360898601df85fb8b7972a1d86f09b41d721 100644 (file)
@@ -1110,7 +1110,7 @@ void OSD::send_pg_stats()
   if (!pg_stat_pending.empty() || osd_stat_pending) {
     dout(1) << "send_pg_stats - " << pg_stat_pending.size() << " pgs updated" << dendl;
     
-    MPGStats *m = new MPGStats;
+    MPGStats *m = new MPGStats(osdmap->get_fsid());
     for (map<pg_t,eversion_t>::iterator p = pg_stat_pending.begin();
         p != pg_stat_pending.end();
         p++) {