From afb42560205d8f6740ba859475019b980bdc5afa Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 15 May 2009 16:43:52 -0700 Subject: [PATCH] class: some fixes --- src/Makefile.am | 7 +++---- src/mon/ClassMonitor.cc | 14 ++++++++++++++ src/objclass/class_api.cc | 11 +++++++---- src/objclass/class_debug.cc | 6 ++++-- src/objclass/objclass.h | 8 +++++++- src/osd/OSD.cc | 6 +++++- 6 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 8943c266d9fb6..8edff95683677 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,7 +32,8 @@ dumpjournal_SOURCES = dumpjournal.cc msg/SimpleMessenger.cc dumpjournal_LDADD = libosdc.a libcrush.a libcommon.a # osd -cosd_SOURCES = cosd.cc msg/SimpleMessenger.cc +cosd_SOURCES = cosd.cc msg/SimpleMessenger.cc objclass/class_debug.cc \ + objclass/class_api.cc cosd_LDADD = libosd.a libos.a libcrush.a libcommon.a -ldl dupstore_SOURCES = dupstore.cc dupstore_LDADD = libos.a libcommon.a @@ -274,9 +275,7 @@ libosd_a_SOURCES = \ osd/ReplicatedPG.cc \ osd/Ager.cc \ osd/OSD.cc \ - common/ClassHandler.cc \ - objclass/class_debug.cc \ - objclass/class_api.cc + common/ClassHandler.cc # osd/RAID4PG.cc libosdc_a_SOURCES = \ diff --git a/src/mon/ClassMonitor.cc b/src/mon/ClassMonitor.cc index bb12f9512ba3a..90ad59a0188cb 100644 --- a/src/mon/ClassMonitor.cc +++ b/src/mon/ClassMonitor.cc @@ -64,6 +64,20 @@ void ClassMonitor::tick() void ClassMonitor::create_initial(bufferlist& bl) { dout(10) << "create_initial -- creating initial map" << dendl; + ClassImpl i; + ClassInfo l; + l.name = "test"; + l.version = 12; + i.seq = 0; + i.stamp = g_clock.now(); + bufferptr ptr(1024); + memset(ptr.c_str(), 0x13, 1024); + i.binary.append(ptr); + ClassLibraryIncremental inc; + ::encode(i, inc.impl); + ::encode(l, inc.info); + inc.add = true; + pending_class.insert(pair(i.stamp, inc)); } bool ClassMonitor::store_impl(ClassInfo& info, ClassImpl& impl) diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index fbf8c848c30d4..b536c264b0c9d 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -6,7 +6,7 @@ #include "common/ClassHandler.h" -extern OSD *osd; +static OSD *osd; void cls_initialize(OSD *_osd) { @@ -19,15 +19,16 @@ void cls_finalize() } -extern "C" void *cls_alloc(size_t size) +void *cls_alloc(size_t size) { return malloc(size); } -extern "C" void cls_free(void *p) +void cls_free(void *p) { free(p); } + int cls_register(const char *name, cls_handle_t *handle) { ClassHandler::ClassData *cd; @@ -38,12 +39,14 @@ int cls_register(const char *name, cls_handle_t *handle) return (cd != NULL); } + int cls_unregister(cls_handle_t handle) { ClassHandler::ClassData *cd; cd = (ClassHandler::ClassData *)handle; osd->class_handler->unregister_class(cd); + return 1; } int cls_register_method(cls_handle_t hclass, const char *method, @@ -64,7 +67,7 @@ int cls_register_method(cls_handle_t hclass, const char *method, int cls_unregister_method(cls_method_handle_t handle) { - ClassHandler::ClassMethod *method; + ClassHandler::ClassMethod *method = (ClassHandler::ClassMethod *)handle; method->unregister(); return 1; diff --git a/src/objclass/class_debug.cc b/src/objclass/class_debug.cc index 35e470e8b8a86..4bb31c82041e5 100644 --- a/src/objclass/class_debug.cc +++ b/src/objclass/class_debug.cc @@ -6,7 +6,9 @@ #include #include -extern "C" int cls_log(const char *format, ...) +#include + +int cls_log(const char *format, ...) { int size = 256, n; va_list ap; @@ -17,7 +19,7 @@ extern "C" int cls_log(const char *format, ...) va_end(ap); #define MAX_SIZE 8196 if ((n > -1 && n < size) || size > MAX_SIZE) { - dout(0) << buf << dendl; + *_dout << buf << std::endl; return n; } size *= 2; diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index ac4b5542153ee..a910eff28e491 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -19,7 +19,7 @@ extern void cls_free(void *p); extern int cls_register(const char *name, cls_handle_t *handle); extern int cls_unregister(cls_handle_t); -extern int cls_register_method(const char *method, +extern int cls_register_method(cls_handle_t hclass, const char *method, cls_method_call_t class_call, cls_method_handle_t *handle); extern int cls_unregister_method(cls_method_handle_t handle); @@ -34,6 +34,12 @@ typedef int cls_trigger_t; extern int cls_link(cls_method_handle_t handle, int priority, cls_trigger_t trigger); extern int cls_unlink(cls_method_handle_t handle); + +/* should be defined by the class implementation + defined here inorder to get it compiled without C++ mangling */ +extern void class_init(void); +extern void class_fini(void); + #ifdef __cplusplus } #endif diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 11be257c844d0..56901ebb06ed0 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -74,7 +74,7 @@ #include "common/Timer.h" #include "common/LogClient.h" -#include "common/ClassHandler.h" +#include "osd/ClassHandler.h" #include #include @@ -85,6 +85,7 @@ #include #endif // DARWIN +#include "objclass/objclass.h" #include "config.h" @@ -296,6 +297,8 @@ void handle_signal(int signal) } } +void cls_initialize(OSD *_osd); + int OSD::init() { Mutex::Locker lock(osd_lock); @@ -325,6 +328,7 @@ int OSD::init() class_handler = new ClassHandler(this); assert(class_handler); + cls_initialize(this); // load up "current" osdmap assert_warn(!osdmap); -- 2.39.5