From 3eecfe08eebee2bad363938b778d928988718bcb Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 11 May 2009 13:36:59 -0700 Subject: [PATCH] class: remove redundant fields from the class library --- src/ceph.cc | 6 ++--- src/include/ClassEntry.h | 24 ++++++++++---------- src/messages/MClass.h | 12 +++++++++- src/mon/ClassMonitor.cc | 49 +++++++++++++++++++++++++--------------- src/msg/Message.h | 1 + 5 files changed, 58 insertions(+), 34 deletions(-) diff --git a/src/ceph.cc b/src/ceph.cc index e4459037bff93..3bc6c40be4840 100644 --- a/src/ceph.cc +++ b/src/ceph.cc @@ -190,11 +190,11 @@ void handle_notify(MMonObserveNotify *notify) dout(0) << " class " << iter->second << dendl; } } else { - ClassImpl impl; + ClassLibrary info; while (!p.end()) { - impl.decode(p); - dout(0) << " class " << impl << dendl; + info.decode(p); + dout(0) << " class " << info << dendl; } } break; diff --git a/src/include/ClassEntry.h b/src/include/ClassEntry.h index ca7044de32d9d..99c1332cc52f8 100644 --- a/src/include/ClassEntry.h +++ b/src/include/ClassEntry.h @@ -19,20 +19,16 @@ #include "include/encoding.h" struct ClassImpl { - string name; - version_t version; bufferlist binary; utime_t stamp; version_t seq; void encode(bufferlist& bl) const { - ::encode(name, bl); - ::encode(version, bl); + ::encode(binary, bl); ::encode(seq, bl); } void decode(bufferlist::iterator& bl) { - ::decode(name, bl); - ::decode(version, bl); + ::decode(binary, bl); ::decode(seq, bl); } }; @@ -77,6 +73,11 @@ struct ClassLibraryIncremental { bufferlist::iterator iter = impl.begin(); ::decode(i, iter); } + + void decode_info(ClassLibrary& l) { + bufferlist::iterator iter = info.begin(); + ::decode(l, iter); + } }; WRITE_CLASS_ENCODER(ClassLibraryIncremental) @@ -91,7 +92,11 @@ struct ClassList { ClassLibrary library; library.version = version; library.name = name; - library_map[name] = library; + add(library); + } + + void add(ClassLibrary& library) { + library_map[library.name] = library; } void remove(const string& name, const version_t version) { @@ -118,9 +123,4 @@ inline ostream& operator<<(ostream& out, const ClassLibrary& e) return out << e.name << " (v" << e.version << ")"; } -inline ostream& operator<<(ostream& out, const ClassImpl& e) -{ - return out << e.name << " (v" << e.version << ")"; -} - #endif diff --git a/src/messages/MClass.h b/src/messages/MClass.h index 5516feb659798..024ca1cb3bf76 100644 --- a/src/messages/MClass.h +++ b/src/messages/MClass.h @@ -22,9 +22,17 @@ public: ceph_fsid_t fsid; deque entries; version_t last; + __s32 action; + + enum { + CLASS_NOOP = 0, + CLASS_ADD, + CLASS_REMOVE, + CLASS_GET, + }; MClass() : Message(MSG_CLASS) {} - MClass(ceph_fsid_t& f, deque& e) : Message(MSG_CLASS), fsid(f), entries(e), last(0) { } + MClass(ceph_fsid_t& f, deque& e) : Message(MSG_CLASS), fsid(f), entries(e), last(0), action(0) { } MClass(ceph_fsid_t& f, version_t l) : Message(MSG_CLASS), fsid(f), last(l) {} const char *get_type_name() { return "class"; } @@ -41,12 +49,14 @@ public: ::encode(fsid, payload); ::encode(entries, payload); ::encode(last, payload); + ::encode(action, payload); } void decode_payload() { bufferlist::iterator p = payload.begin(); ::decode(fsid, p); ::decode(entries, p); ::decode(last, p); + ::decode(action, payload); } }; diff --git a/src/mon/ClassMonitor.cc b/src/mon/ClassMonitor.cc index 6fa4ce5f2b7d9..f1da099ae2365 100644 --- a/src/mon/ClassMonitor.cc +++ b/src/mon/ClassMonitor.cc @@ -65,20 +65,23 @@ void ClassMonitor::create_initial(bufferlist& bl) { dout(10) << "create_initial -- creating initial map" << dendl; ClassImpl i; - i.name = "test"; - i.version = 12; + ClassLibrary l; + l.name = "test"; + l.version = 12; i.seq = 0; i.stamp = g_clock.now(); + char buf[1024]; + memset(buf, 0x12, sizeof(buf)); + { + int n; + for (n=0; n<1024; n++) + ::encode(buf[n], i.binary); + } ClassLibraryIncremental inc; ::encode(i, inc.impl); + ::encode(l, inc.info); inc.add = true; -#if 0 - pending_class.insert(pair(e.stamp, e)); - e.name = "test2"; - e.version = 12; - e.seq = 1; -#endif pending_class.insert(pair(i.stamp, inc)); } @@ -114,13 +117,21 @@ bool ClassMonitor::update_from_paxos() ClassLibraryIncremental inc; ::decode(inc, p); ClassImpl impl; + ClassLibrary info; inc.decode_impl(impl); + inc.decode_info(info); if (inc.add) { - mon->store->put_bl_ss(inc.impl, "class_impl", impl.name.c_str()); - dout(0) << "adding name=" << impl.name << " version=" << impl.version << dendl; - list.add(impl.name, impl.version); + char *store_name; + int len = info.name.length() + 16; + store_name = (char *)malloc(len); + snprintf(store_name, len, "%s.%d", info.name.c_str(), (int)info.version); + mon->store->put_bl_ss(inc.impl, "class_impl", store_name); + mon->store->append_bl_ss(inc.info, "class_impl", store_name); + dout(0) << "adding name=" << info.name << " version=" << info.version << " store_name=" << store_name << dendl; + free(store_name); + list.add(info.name, info.version); } else { - list.remove(impl.name, impl.version); + list.remove(info.name, info.version); } list.version++; @@ -194,9 +205,9 @@ bool ClassMonitor::preprocess_class(MClass *m) for (deque::iterator p = m->entries.begin(); p != m->entries.end(); p++) { - ClassImpl impl; - p->decode_impl(impl); - if (!pending_list.contains(impl.name)) + ClassLibrary info; + p->decode_info(info); + if (!pending_list.contains(info.name)) num_new++; } if (!num_new) { @@ -219,11 +230,13 @@ bool ClassMonitor::prepare_class(MClass *m) for (deque::iterator p = m->entries.begin(); p != m->entries.end(); p++) { + ClassLibrary info; ClassImpl impl; + p->decode_info(info); p->decode_impl(impl); - dout(10) << " writing class " << impl << dendl; - if (!pending_list.contains(impl.name)) { - pending_list.add(impl.name, impl.version); + dout(10) << " writing class " << info << dendl; + if (!pending_list.contains(info.name)) { + pending_list.add(info); pending_class.insert(pair(impl.stamp, *p)); } } diff --git a/src/msg/Message.h b/src/msg/Message.h index c0c6fe555f790..75fe32aac068a 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -30,6 +30,7 @@ #define MSG_MON_OBSERVE 54 #define MSG_MON_OBSERVE_NOTIFY 55 #define MSG_CLASS 56 +#define MSG_CLASS_ACK 57 // osd internal #define MSG_OSD_PING 70 -- 2.39.5