]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
class: some fixes, testrados works again
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 22 May 2009 19:39:51 +0000 (12:39 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 22 May 2009 19:40:20 +0000 (12:40 -0700)
src/common/ClassHandler.cc
src/common/ClassHandler.h
src/common/ClassLibrary.cc
src/include/ClassLibrary.h
src/mon/ClassMonitor.cc

index 354ccd721deae082ac0d0681fdaedce9e42871da..713f32343f87d0d1bed3664d10584a49ac195c43 100644 (file)
@@ -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<nstring,ClassData>::iterator p = classes.begin(); p != classes.end(); p++)
+  for (map<nstring,ClassData>::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)
index 7f04052292462480828e67097928e9900fccdd9d..6a1e2edf9d539fff2a97998611213f0a2ad3047f 100644 (file)
@@ -7,6 +7,7 @@
 #include "objclass/objclass.h"
 
 #include "common/Cond.h"
+#include "common/ClassVersion.h"
 
 
 class OSD;
index bf6a95409ddd47d2fd7a600761df9da108d30b0b..5d2a5f88192147914fc7c7526ba12788d88e4471 100644 (file)
@@ -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);
index 92a858eafc9ac53538491c2f81aceb67a630f6c9..240448791b6e327a8bde0b45e3746290967e42b9 100644 (file)
@@ -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) {
index 9d376899892dd3114c3cc96bc0ebfa560bb56588..88773afe5542aadf0ee968c2ade8e1b6394a06f2 100644 (file)
@@ -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);