From 75597d21114fbd30b7a58e5b210d273217eaf50a Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 22 May 2009 12:39:51 -0700 Subject: [PATCH] class: some fixes, testrados works again --- src/common/ClassHandler.cc | 8 ++++++-- src/common/ClassHandler.h | 1 + src/common/ClassLibrary.cc | 2 +- src/include/ClassLibrary.h | 2 ++ src/mon/ClassMonitor.cc | 7 ++++++- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/common/ClassHandler.cc b/src/common/ClassHandler.cc index 354ccd721deae..713f32343f87d 100644 --- a/src/common/ClassHandler.cc +++ b/src/common/ClassHandler.cc @@ -60,6 +60,8 @@ ClassHandler::ClassData *ClassHandler::get_class(const nstring& cname, ClassVers assert(0); } + class_data->version = version; + osd->send_class_request(cname.c_str(), version); return NULL; } @@ -78,7 +80,7 @@ void ClassHandler::handle_class(MClass *m) if (*add_iter) { if (data.status == ClassData::CLASS_REQUESTED) { - dout(0) << "added class '" << info_iter->name << "'" << dendl; + dout(10) << "added class '" << info_iter->name << "'" << dendl; data.impl = *impl_iter; ++impl_iter; data.status = ClassData::CLASS_LOADED; @@ -95,8 +97,10 @@ void ClassHandler::handle_class(MClass *m) void ClassHandler::resend_class_requests() { - for (map::iterator p = classes.begin(); p != classes.end(); p++) + for (map::iterator p = classes.begin(); p != classes.end(); p++) { + dout(20) << "resending class request "<< p->first.c_str() << " v" << p->second.version << dendl; osd->send_class_request(p->first.c_str(), p->second.version); + } } ClassHandler::ClassData *ClassHandler::register_class(const char *cname) diff --git a/src/common/ClassHandler.h b/src/common/ClassHandler.h index 7f04052292462..6a1e2edf9d539 100644 --- a/src/common/ClassHandler.h +++ b/src/common/ClassHandler.h @@ -7,6 +7,7 @@ #include "objclass/objclass.h" #include "common/Cond.h" +#include "common/ClassVersion.h" class OSD; diff --git a/src/common/ClassLibrary.cc b/src/common/ClassLibrary.cc index bf6a95409ddd4..5d2a5f8819214 100644 --- a/src/common/ClassLibrary.cc +++ b/src/common/ClassLibrary.cc @@ -13,7 +13,7 @@ ClassInfo *ClassVersionMap::get(ClassVersion& ver) v.ver = default_ver; } - iter = m.find(ver); + iter = m.find(v); if (iter != m.end()) return &(iter->second); diff --git a/src/include/ClassLibrary.h b/src/include/ClassLibrary.h index 92a858eafc9ac..240448791b6e3 100644 --- a/src/include/ClassLibrary.h +++ b/src/include/ClassLibrary.h @@ -103,6 +103,8 @@ public: void add(ClassInfo& library) { m[library.version] = library; + if (default_ver.length() == 0) + default_ver = library.version.ver; } void remove(ClassInfo& library) { diff --git a/src/mon/ClassMonitor.cc b/src/mon/ClassMonitor.cc index 9d376899892dd..88773afe5542a 100644 --- a/src/mon/ClassMonitor.cc +++ b/src/mon/ClassMonitor.cc @@ -348,9 +348,13 @@ bool ClassMonitor::prepare_command(MMonCommand *m) while (mapiter != list.library_map.end()) { ClassVersionMap& map = mapiter->second; + dout(10) << "active class version=" << map.default_ver << dendl; tClassVersionMap::iterator iter = map.begin(); while (iter != map.end()) { - ss << iter->second.name << " (v" << iter->second.version << ")" << std::endl; + string def_str = ""; + if (iter->second.version.str() == map.default_ver) + def_str = " [active]"; + ss << iter->second.name << " (v" << iter->second.version << ")" << def_str << std::endl; ++iter; } ++mapiter; @@ -399,6 +403,7 @@ void ClassMonitor::handle_request(MClass *m) int len = (*p).name.length() + 16; int bin_len; char store_name[len]; + dout(0) << "got CLASS_GET name=" << (*p).name << " ver=" << (*p).version << dendl; snprintf(store_name, len, "%s.%s.%s", (*p).name.c_str(), ver.str(), ver.arch()); bin_len = mon->store->get_bl_ss(impl.binary, "class_impl", store_name); assert(bin_len > 0); -- 2.39.5