]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: clean up class loading code a bit
authorSage Weil <sage@newdream.net>
Thu, 26 Aug 2010 20:22:49 +0000 (13:22 -0700)
committerSage Weil <sage@newdream.net>
Thu, 26 Aug 2010 20:45:13 +0000 (13:45 -0700)
src/common/ClassHandler.cc
src/osd/OSD.cc

index f694f89ccb23311006d181d618160d2ca9fa3494..8fe58485a1caa6da147ec5744c349b00671ebde5 100644 (file)
@@ -98,36 +98,36 @@ ClassHandler::ClassData& ClassHandler::get_obj(const string& cname)
 
 ClassHandler::ClassData *ClassHandler::get_class(const string& cname, ClassVersion& version)
 {
-  ClassHandler::ClassData *ret = NULL;
-  ClassData *class_data = &get_obj(cname);
-  if (class_data == &null_cls_data)
+  ClassData *ret = NULL;
+  ClassData *cls = &get_obj(cname);
+  if (cls == &null_cls_data)
     return NULL;
 
-  Mutex::Locker lock(*class_data->mutex);
+  Mutex::Locker lock(*cls->mutex);
 
-  switch (class_data->status) {
+  switch (cls->status) {
+  case ClassData::CLASS_LOADED:
   case ClassData::CLASS_ERROR:
   case ClassData::CLASS_INVALID:
-  case ClassData::CLASS_LOADED:
-    if (class_data->cache_timed_out()) {
+    if (cls->cache_timed_out()) {
       dout(0) << "class timed out going to send request for " << cname.c_str() << " v" << version << dendl;
-      ret = class_data;
+      ret = cls;
       goto send;
     }
-    return class_data;
+    return cls;
+
   case ClassData::CLASS_REQUESTED:
     return NULL;
-    break;
 
   case ClassData::CLASS_UNKNOWN:
-    class_data->set_status(ClassData::CLASS_REQUESTED);
+    cls->set_status(ClassData::CLASS_REQUESTED);
     break;
 
   default:
     assert(0);
   }
 
-  class_data->version = version;
+  cls->version = version;
 send:
   osd->send_class_request(cname.c_str(), version);
   return ret;
@@ -144,26 +144,26 @@ void ClassHandler::handle_class(MClass *m)
        ++info_iter, ++add_iter) {
     ClassData& data = get_obj(info_iter->name);
     if (&data == &null_cls_data) {
-      dout(0) << "couldn't get class, out of memory? continuing" << dendl;
+      dout(1) << "couldn't get class, out of memory? continuing" << dendl;
       continue;
     }
-    dout(0) << "handle_class " << info_iter->name << dendl;
+    dout(10) << "handle_class " << info_iter->name << dendl;
     data.mutex->Lock();
     
     if (*add_iter) {
-        data.set_status(ClassData::CLASS_REQUESTED);
-       dout(10) << "added class '" << info_iter->name << "'" << dendl;
-       data.impl = *impl_iter;
-       ++impl_iter;
-       int ret = _load_class(data);
-        if (ret < 0) {
-          data.set_status(ClassData::CLASS_ERROR);
-          osd->got_class(info_iter->name);
-        }
+      data.set_status(ClassData::CLASS_REQUESTED);
+      dout(10) << "added class '" << info_iter->name << "'" << dendl;
+      data.impl = *impl_iter;
+      ++impl_iter;
+      int ret = _load_class(data);
+      if (ret < 0) {
+       data.set_status(ClassData::CLASS_ERROR);
+       osd->got_class(info_iter->name);
+      }
     } else {
-       dout(10) << "response of an invalid class '" << info_iter->name << "'" << dendl;
-        data.set_status(ClassData::CLASS_INVALID);
-        osd->got_class(info_iter->name);
+      dout(10) << "response of an invalid class '" << info_iter->name << "'" << dendl;
+      data.set_status(ClassData::CLASS_INVALID);
+      osd->got_class(info_iter->name);
     }
     data.mutex->Unlock();
   }
index 5a00de1918b9e8db2f429651e06caaf8c54d8068..43319a098f93bdb1ab23b71f70c9475afc02e421 100644 (file)
@@ -4809,16 +4809,17 @@ void OSD::wait_for_no_ops()
 
 // --------------------------------
 
-int OSD::get_class(const string& cname, ClassVersion& version, pg_t pgid, Message *m, ClassHandler::ClassData **cls)
+int OSD::get_class(const string& cname, ClassVersion& version, pg_t pgid, Message *m,
+                  ClassHandler::ClassData **pcls)
 {
   Mutex::Locker l(class_lock);
-  dout(10) << "wait_for_missing_class '" << cname << "' by " << pgid << dendl;
+  dout(10) << "get_class '" << cname << "' by " << m << dendl;
 
-
-  *cls = class_handler->get_class(cname, version);
-  if (*cls) {
-    switch ((*cls)->status) {
+  ClassHandler::ClassData *cls = class_handler->get_class(cname, version);
+  if (cls) {
+    switch (cls->status) {
     case ClassHandler::ClassData::CLASS_LOADED:
+      *pcls = cls;
       return 0;
     case ClassHandler::ClassData::CLASS_INVALID:
       dout(0) << "class not supported" << dendl;
@@ -4831,6 +4832,7 @@ int OSD::get_class(const string& cname, ClassVersion& version, pg_t pgid, Messag
     }
   }
 
+  dout(10) << "get_class '" << cname << "' by " << m << " waiting for missing class" << dendl;
   waiting_for_missing_class[cname].push_back(m);
   return -EAGAIN;
 }