]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: use separate message type for log ack
authorSage Weil <sage@newdream.net>
Fri, 27 Mar 2009 20:23:34 +0000 (13:23 -0700)
committerSage Weil <sage@newdream.net>
Fri, 27 Mar 2009 20:23:34 +0000 (13:23 -0700)
Fixes logging from monitor itself.

src/Makefile.am
src/common/LogClient.cc
src/common/LogClient.h
src/include/ceph_fs.h
src/messages/MLog.h
src/messages/MLogAck.h [new file with mode: 0644]
src/mon/LogMonitor.cc
src/msg/Message.cc
src/msg/Message.h

index e3108e5c7884f98c77f3f27f82bf536e20cb51b4..4e98cc9ca8f2ba74ccf327fde15905097d999adc 100644 (file)
@@ -498,6 +498,7 @@ noinst_HEADERS = \
         messages/MInodeFileCaps.h\
         messages/MLock.h\
        messages/MLog.h\
+       messages/MLogAck.h\
         messages/MMDSBeacon.h\
         messages/MMDSBoot.h\
         messages/MMDSCacheRejoin.h\
index 50b9a3f244e93811569e763b59bd9776746cf383..ffd5e34b816b0a21c610a371f03d8edb28c8f57a 100644 (file)
@@ -20,6 +20,7 @@
 #include "msg/Message.h"
 
 #include "messages/MLog.h"
+#include "messages/MLogAck.h"
 #include "mon/MonMap.h"
 
 #include <iostream>
@@ -69,15 +70,21 @@ void LogClient::send_log()
   if (log_queue.empty())
     return;
   MLog *log = new MLog(monmap->get_fsid(), log_queue);
-  int mon = monmap->pick_mon();
+
+  int mon;
+  if (messenger->get_myname().is_mon())
+    mon = messenger->get_myname().num();  // if we are a monitor, queue for ourselves
+  else
+    mon = monmap->pick_mon();
+
   dout(10) << "send_log to mon" << mon << dendl;
   messenger->send_message(log, monmap->get_inst(mon));
 }
 
-void LogClient::handle_log(MLog *m)
+void LogClient::handle_log_ack(MLogAck *m)
 {
   Mutex::Locker l(log_lock);
-  dout(10) << "handle_log " << *m << dendl;
+  dout(10) << "handle_log_ack " << *m << dendl;
 
   version_t last = m->last;
   while (log_queue.size() && log_queue.begin()->seq <= last) {
@@ -92,8 +99,8 @@ bool LogClient::dispatch_impl(Message *m)
   dout(20) << "dispatch " << m << dendl;
 
   switch (m->get_type()) {
-  case MSG_LOG:
-    handle_log((MLog*)m);
+  case MSG_LOGACK:
+    handle_log_ack((MLogAck*)m);
     return true;
   }
   return false;
index cdc9118b752afca6d5479d542a66368276649b7b..3dcc448cb165d5abd591a461950f25acfa771ce7 100644 (file)
@@ -24,6 +24,7 @@
 
 class Messenger;
 class MLog;
+class MLogAck;
 class MonMap;
 
 
@@ -43,7 +44,7 @@ class LogClient : public Dispatcher {
   void log(log_type type, string& s);
   void log(log_type type, stringstream& s);
   void send_log();
-  void handle_log(MLog *m);
+  void handle_log_ack(MLogAck *m);
 
   LogClient(Messenger *m, MonMap *mm) : 
     messenger(m), monmap(mm), 
index fc49addffe3fbee3440a1ffbedf3501ae0182835..cf5704fd78e412417d6ec86580c7784d7c940c9d 100644 (file)
@@ -45,7 +45,7 @@
 #define CEPH_MON_PROTOCOL     4 /* cluster internal */
 #define CEPH_OSDC_PROTOCOL    6 /* public/client */
 #define CEPH_MDSC_PROTOCOL   12 /* public/client */
-#define CEPH_MONC_PROTOCOL    9 /* public/client */
+#define CEPH_MONC_PROTOCOL   10 /* public/client */
 
 
 /*
index effa853238fdebe5d5ec3c1b27ca1fab07ab1d0a..de94845b9bf80c626ae4cda2f25118699cc3a588 100644 (file)
@@ -23,11 +23,9 @@ public:
   deque<LogEntry> entries;
   version_t last;
   
-  MLog() : Message(MSG_PGSTATS) {}
-  MLog(ceph_fsid_t& f, deque<LogEntry>& e) : 
-    Message(MSG_LOG), fsid(f), entries(e), last(0) { }
-  MLog(ceph_fsid_t& f, version_t l) : 
-    Message(MSG_LOG), fsid(f), last(l) {}
+  MLog() : Message(MSG_LOG) {}
+  MLog(ceph_fsid_t& f, deque<LogEntry>& e) : Message(MSG_LOG), fsid(f), entries(e), last(0) { }
+  MLog(ceph_fsid_t& f, version_t l) : Message(MSG_LOG), fsid(f), last(l) {}
 
   const char *get_type_name() { return "log"; }
   void print(ostream& out) {
diff --git a/src/messages/MLogAck.h b/src/messages/MLogAck.h
new file mode 100644 (file)
index 0000000..f4d4286
--- /dev/null
@@ -0,0 +1,44 @@
+// -*- 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 <sage@newdream.net>
+ *
+ * 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 __MLOGACK_H
+#define __MLOGACK_H
+
+#include "include/LogEntry.h"
+
+class MLogAck : public Message {
+public:
+  ceph_fsid_t fsid;
+  version_t last;
+  
+  MLogAck() : Message(MSG_LOGACK) {}
+  MLogAck(ceph_fsid_t& f, version_t l) : Message(MSG_LOGACK), fsid(f), last(l) {}
+
+  const char *get_type_name() { return "log_ack"; }
+  void print(ostream& out) {
+    out << "log(last " << last << ")";
+  }
+
+  void encode_payload() {
+    ::encode(fsid, payload);
+    ::encode(last, payload);
+  }
+  void decode_payload() {
+    bufferlist::iterator p = payload.begin();
+    ::decode(fsid, p);
+    ::decode(last, p);
+  }
+};
+
+#endif
index 5fdee174546490bc9ab826449eaee6f72e8bc77a..9e235929df74518d2101a87be4d4d603785526cc 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "messages/MMonCommand.h"
 #include "messages/MLog.h"
+#include "messages/MLogAck.h"
 
 #include "common/Timer.h"
 
@@ -238,7 +239,7 @@ bool LogMonitor::prepare_log(MLog *m)
 void LogMonitor::_updated_log(MLog *m, entity_inst_t who)
 {
   dout(7) << "_updated_log for " << who << dendl;
-  mon->messenger->send_message(new MLog(m->fsid, m->entries.rbegin()->seq), who);
+  mon->messenger->send_message(new MLogAck(m->fsid, m->entries.rbegin()->seq), who);
   delete m;
 }
 
index ad2f1779fe1dff77408d78a0c777e8b9c7860fde..ac0c63924c1c512360856031be8186214f1fd635 100644 (file)
@@ -24,6 +24,7 @@ using namespace std;
 
 #include "messages/MMonElection.h"
 #include "messages/MLog.h"
+#include "messages/MLogAck.h"
 
 #include "messages/MPing.h"
 
@@ -179,6 +180,9 @@ Message *decode_message(ceph_msg_header& header, ceph_msg_footer& footer,
   case MSG_LOG:
     m = new MLog;
     break;
+  case MSG_LOGACK:
+    m = new MLogAck;
+    break;
 
   case CEPH_MSG_PING:
     m = new MPing();
index a661569cddd7e759c480cdc2a93da0acac16792e..4d584b1269330d17e3424c8523a410576a938851 100644 (file)
@@ -26,8 +26,9 @@
 #define MSG_MON_COMMAND            50
 #define MSG_MON_COMMAND_ACK        51
 #define MSG_LOG                    52
-#define MSG_MON_OBSERVE            53
-#define MSG_MON_OBSERVE_NOTIFY     54
+#define MSG_LOGACK                 53
+#define MSG_MON_OBSERVE            54
+#define MSG_MON_OBSERVE_NOTIFY     55
 
 // osd internal
 #define MSG_OSD_PING         70