Fixes logging from monitor itself.
messages/MInodeFileCaps.h\
messages/MLock.h\
messages/MLog.h\
+ messages/MLogAck.h\
messages/MMDSBeacon.h\
messages/MMDSBoot.h\
messages/MMDSCacheRejoin.h\
#include "msg/Message.h"
#include "messages/MLog.h"
+#include "messages/MLogAck.h"
#include "mon/MonMap.h"
#include <iostream>
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) {
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;
class Messenger;
class MLog;
+class MLogAck;
class MonMap;
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),
#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 */
/*
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) {
--- /dev/null
+// -*- 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
#include "messages/MMonCommand.h"
#include "messages/MLog.h"
+#include "messages/MLogAck.h"
#include "common/Timer.h"
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;
}
#include "messages/MMonElection.h"
#include "messages/MLog.h"
+#include "messages/MLogAck.h"
#include "messages/MPing.h"
case MSG_LOG:
m = new MLog;
break;
+ case MSG_LOGACK:
+ m = new MLogAck;
+ break;
case CEPH_MSG_PING:
m = new MPing();
#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