1
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2
// vim: ts=8 sw=2 smarttab
4
* Ceph - scalable distributed file system
6
* Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
8
* This is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License version 2.1, as published by the Free Software
11
* Foundation. See file COPYING.
16
#ifndef CEPH_MMONPROBE_H
17
#define CEPH_MMONPROBE_H
19
#include "msg/Message.h"
20
#include "mon/MonMap.h"
22
class MMonProbe : public Message {
32
static const char *get_opname(int o) {
34
case OP_PROBE: return "probe";
35
case OP_REPLY: return "reply";
36
case OP_SLURP: return "slurp";
37
case OP_SLURP_LATEST: return "slurp_latest";
38
case OP_DATA: return "data";
39
default: assert(0); return 0;
48
map<string, version_t> paxos_versions;
51
map<string, map<version_t,bufferlist> > paxos_values;
52
bufferlist latest_value;
53
version_t latest_version, newest_version, oldest_version;
55
MMonProbe() : Message(MSG_MON_PROBE) {}
56
MMonProbe(const uuid_d& f, int o, const string& n)
57
: Message(MSG_MON_PROBE), fsid(f), op(o), name(n),
58
latest_version(0), newest_version(0), oldest_version(0) {}
63
const char *get_type_name() { return "mon_probe"; }
64
void print(ostream& out) {
65
out << "mon_probe(" << get_opname(op) << " " << fsid << " name " << name;
67
out << " quorum " << quorum;
68
if (paxos_versions.size())
69
out << " versions " << paxos_versions;
70
if (machine_name.length())
71
out << " machine_name " << machine_name << " " << oldest_version << "-" << newest_version;
75
void encode_payload(CephContext *cct) {
76
::encode(fsid, payload);
77
::encode(op, payload);
78
::encode(name, payload);
79
::encode(quorum, payload);
80
::encode(monmap_bl, payload);
81
::encode(paxos_versions, payload);
82
::encode(machine_name, payload);
83
::encode(oldest_version, payload);
84
::encode(newest_version, payload);
85
::encode(paxos_values, payload);
86
::encode(latest_value, payload);
87
::encode(latest_version, payload);
89
void decode_payload(CephContext *cct) {
90
bufferlist::iterator p = payload.begin();
95
::decode(monmap_bl, p);
96
::decode(paxos_versions, p);
97
::decode(machine_name, p);
98
::decode(oldest_version, p);
99
::decode(newest_version, p);
100
::decode(paxos_values, p);
101
::decode(latest_value, p);
102
::decode(latest_version, p);