return -ENODEV;
}
+#ifdef BUILDING_FOR_EMBEDDED
+ cephd_preload_embedded_plugins();
+#endif
+
if (mkfs) {
common_init_finish(g_ceph_context);
MonClient mc(g_ceph_context);
return 1;
}
+#ifdef BUILDING_FOR_EMBEDDED
+ cephd_preload_rados_classes(osd);
+#endif
+
// install signal handlers
init_async_signal_handler();
register_async_signal_handler(SIGHUP, sighup_handler);
add_custom_target(compressor_plugins DEPENDS
ceph_snappy
ceph_zlib)
+
+if(WITH_EMBEDDED)
+ include(MergeStaticLibraries)
+ add_library(cephd_compressor_base STATIC ${compressor_srcs})
+ set_target_properties(cephd_compressor_base PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+ merge_static_libraries(cephd_compressor cephd_compressor_base cephd_compressor_snappy cephd_compressor_zlib)
+endif()
target_link_libraries(ceph_snappy snappy common)
set_target_properties(ceph_snappy PROPERTIES VERSION 2.0.0 SOVERSION 2)
install(TARGETS ceph_snappy DESTINATION ${compressor_plugin_dir})
+
+if(WITH_EMBEDDED)
+ add_library(cephd_compressor_snappy STATIC ${snappy_sources})
+ set_target_properties(cephd_compressor_snappy PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
// -----------------------------------------------------------------------------
+#include "acconfig.h"
#include "ceph_ver.h"
-#include "compressor/CompressionPlugin.h"
-#include "SnappyCompressor.h"
-// -----------------------------------------------------------------------------
-
-class CompressionPluginSnappy : public CompressionPlugin {
-
-public:
+#include "CompressionPluginSnappy.h"
- explicit CompressionPluginSnappy(CephContext* cct) : CompressionPlugin(cct)
- {}
-
- virtual int factory(CompressorRef *cs,
- std::ostream *ss)
- {
- if (compressor == 0) {
- SnappyCompressor *interface = new SnappyCompressor();
- compressor = CompressorRef(interface);
- }
- *cs = compressor;
- return 0;
- }
-};
+#ifndef BUILDING_FOR_EMBEDDED
// -----------------------------------------------------------------------------
return instance->add(type, name, new CompressionPluginSnappy(cct));
}
+
+#endif // !BUILDING_FOR_EMBEDDED
\ No newline at end of file
--- /dev/null
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef CEPH_COMPRESSION_PLUGIN_SNAPPY_H
+#define CEPH_COMPRESSION_PLUGIN_SNAPPY_H
+
+// -----------------------------------------------------------------------------
+#include "compressor/CompressionPlugin.h"
+#include "SnappyCompressor.h"
+// -----------------------------------------------------------------------------
+
+class CompressionPluginSnappy : public CompressionPlugin {
+
+public:
+
+ explicit CompressionPluginSnappy(CephContext* cct) : CompressionPlugin(cct)
+ {}
+
+ virtual int factory(CompressorRef *cs,
+ std::ostream *ss)
+ {
+ if (compressor == 0) {
+ SnappyCompressor *interface = new SnappyCompressor();
+ compressor = CompressorRef(interface);
+ }
+ *cs = compressor;
+ return 0;
+ }
+};
+
+#endif
target_include_directories(ceph_zlib PRIVATE "${CMAKE_SOURCE_DIR}/src/isa-l/include")
set_target_properties(ceph_zlib PROPERTIES VERSION 2.0.0 SOVERSION 2)
install(TARGETS ceph_zlib DESTINATION ${compressor_plugin_dir})
+
+if(WITH_EMBEDDED)
+ add_library(cephd_compressor_zlib STATIC ${zlib_sources})
+ target_include_directories(cephd_compressor_zlib PRIVATE "${CMAKE_SOURCE_DIR}/src/isa-l/include")
+ set_target_properties(cephd_compressor_zlib PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
// -----------------------------------------------------------------------------
+#include "acconfig.h"
#include "ceph_ver.h"
-#include "arch/probe.h"
-#include "arch/intel.h"
-#include "arch/arm.h"
-#include "compressor/CompressionPlugin.h"
-#include "ZlibCompressor.h"
-#include "common/debug.h"
-
-#define dout_subsys ceph_subsys_mon
-// -----------------------------------------------------------------------------
-
-class CompressionPluginZlib : public CompressionPlugin {
-public:
- bool has_isal = false;
-
- explicit CompressionPluginZlib(CephContext *cct) : CompressionPlugin(cct)
- {}
-
- virtual int factory(CompressorRef *cs,
- std::ostream *ss)
- {
- bool isal;
- if (cct->_conf->compressor_zlib_isal) {
- ceph_arch_probe();
- isal = (ceph_arch_intel_pclmul && ceph_arch_intel_sse41);
- } else {
- isal = false;
- }
- if (compressor == 0 || has_isal != isal) {
- compressor = CompressorRef(new ZlibCompressor(isal));
- has_isal = isal;
- }
- *cs = compressor;
- return 0;
- }
-};
+#include "CompressionPluginZlib.h"
+#ifndef BUILDING_FOR_EMBEDDED
// -----------------------------------------------------------------------------
const char *__ceph_plugin_version()
return instance->add(type, name, new CompressionPluginZlib(cct));
}
+
+#endif // !BUILDING_FOR_EMBEDDED
--- /dev/null
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef CEPH_COMPRESSION_PLUGIN_ZLIB_H
+#define CEPH_COMPRESSION_PLUGIN_ZLIB_H
+
+// -----------------------------------------------------------------------------
+#include "arch/probe.h"
+#include "arch/intel.h"
+#include "arch/arm.h"
+#include "common/config.h"
+#include "compressor/CompressionPlugin.h"
+#include "ZlibCompressor.h"
+
+// -----------------------------------------------------------------------------
+
+class CompressionPluginZlib : public CompressionPlugin {
+public:
+ bool has_isal = false;
+
+ explicit CompressionPluginZlib(CephContext *cct) : CompressionPlugin(cct)
+ {}
+
+ virtual int factory(CompressorRef *cs,
+ std::ostream *ss)
+ {
+ bool isal;
+ if (cct->_conf->compressor_zlib_isal) {
+ ceph_arch_probe();
+ isal = (ceph_arch_intel_pclmul && ceph_arch_intel_sse41);
+ } else {
+ isal = false;
+ }
+ if (compressor == 0 || has_isal != isal) {
+ compressor = CompressorRef(new ZlibCompressor(isal));
+ has_isal = isal;
+ }
+ *cs = compressor;
+ return 0;
+ }
+};
+
+#endif
if (HAVE_BETTER_YASM_ELF64)
add_subdirectory(isa)
set(EC_ISA_LIB ec_isa)
+ set(EC_ISA_EMBEDDED_LIB cephd_ec_isa)
endif (HAVE_BETTER_YASM_ELF64)
add_library(erasure_code STATIC ErasureCodePlugin.cc)
ec_lrc
ec_jerasure
ec_shec)
+
+if(WITH_EMBEDDED)
+ include(MergeStaticLibraries)
+ add_library(cephd_ec_base STATIC $<TARGET_OBJECTS:erasure_code_objs>)
+ set_target_properties(cephd_ec_base PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+ merge_static_libraries(cephd_ec cephd_ec_base ${EC_ISA_EMBEDDED_LIB} cephd_ec_jerasure cephd_ec_lrc cephd_ec_shec)
+endif()
ErasureCodeIsaTableCache.cc
ErasureCodePluginIsa.cc
xor_op.cc
- $<TARGET_OBJECTS:erasure_code_objs>
)
-add_library(ec_isa SHARED ${isa_srcs})
+add_library(ec_isa SHARED
+ ${isa_srcs}
+ $<TARGET_OBJECTS:erasure_code_objs>)
add_dependencies(ec_isa ${CMAKE_SOURCE_DIR}/src/ceph_ver.h)
target_link_libraries(ec_isa ${EXTRALIBS})
set_target_properties(ec_isa PROPERTIES VERSION 2.14.0 SOVERSION 2)
install(TARGETS ec_isa DESTINATION ${erasure_plugin_dir})
+
+if(WITH_EMBEDDED)
+ add_library(cephd_ec_isa STATIC ${isa_srcs})
+ set_target_properties(cephd_ec_isa PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
return 0;
}
+#ifndef BUILDING_FOR_EMBEDDED
+
// -----------------------------------------------------------------------------
const char *__erasure_code_version()
return instance.add(plugin_name, new ErasureCodePluginIsa());
}
+
+#endif
\ No newline at end of file
# jerasure plugin
-add_library(jerasure_utils OBJECT
+set(jerasure_utils_src
ErasureCodePluginJerasure.cc
ErasureCodeJerasure.cc)
+
+add_library(jerasure_utils OBJECT ${jerasure_utils_src})
add_dependencies(jerasure_utils ${CMAKE_SOURCE_DIR}/src/ceph_ver.h)
# Set the CFLAGS correctly for gf-complete based on SIMD compiler support
add_dependencies(ec_jerasure ${plugin_name})
endforeach()
+if(WITH_EMBEDDED)
+ add_library(cephd_ec_jerasure STATIC
+ $<TARGET_OBJECTS:gf-complete_objs>
+ $<TARGET_OBJECTS:jerasure_objs>
+ ${jerasure_utils_src})
+ set_target_properties(cephd_ec_jerasure PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
return 0;
}
+#ifndef BUILDING_FOR_EMBEDDED
+
const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; }
int __erasure_code_init(char *plugin_name, char *directory)
}
return instance.add(plugin_name, new ErasureCodePluginJerasure());
}
+
+#endif
\ No newline at end of file
add_dependencies(ec_lrc ${CMAKE_SOURCE_DIR}/src/ceph_ver.h)
target_link_libraries(ec_lrc crush json_spirit)
install(TARGETS ec_lrc DESTINATION ${erasure_plugin_dir})
+
+if(WITH_EMBEDDED)
+ add_library(cephd_ec_lrc STATIC ${lrc_srcs})
+ set_target_properties(cephd_ec_lrc PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
return 0;
};
+#ifndef BUILDING_FOR_EMBEDDED
+
const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; }
int __erasure_code_init(char *plugin_name, char *directory)
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
return instance.add(plugin_name, new ErasureCodePluginLrc());
}
+
+#endif
include_directories(.)
-add_library(shec_utils OBJECT
+set(shec_utils_srcs
${CMAKE_SOURCE_DIR}/src/erasure-code/ErasureCode.cc
ErasureCodePluginShec.cc
ErasureCodeShec.cc
ErasureCodeShecTableCache.cc
determinant.c)
+
+add_library(shec_utils OBJECT ${shec_utils_srcs})
add_dependencies(shec_utils ${CMAKE_SOURCE_DIR}/src/ceph_ver.h)
set(ec_shec_objs
install(TARGETS ${plugin_name} DESTINATION ${erasure_plugin_dir})
add_dependencies(ec_shec ${plugin_name})
endforeach()
+
+if(WITH_EMBEDDED)
+ # note we rely on the fact this will always be statically linked with jerasure
+ add_library(cephd_ec_shec STATIC ${shec_utils_srcs})
+ set_target_properties(cephd_ec_shec PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
+endif()
return 0;
}
+#ifndef BUILDING_FOR_EMBEDDED
+
const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; }
int __erasure_code_init(char *plugin_name, char *directory = (char *)"")
}
return instance.add(plugin_name, new ErasureCodePluginShec());
}
+
+#endif
\ No newline at end of file
kv
global
rocksdb
- json_spirit)
+ json_spirit
+ erasure_code
+ cephd_compressor
+ cephd_ec)
if(HAVE_ARMV8_CRC)
list(APPEND merge_libs common_crc_aarch64)
+#include "acconfig.h"
#include "common/version.h"
+#include "common/PluginRegistry.h"
+#include "compressor/snappy/CompressionPluginSnappy.h"
+#include "compressor/zlib/CompressionPluginZlib.h"
+#include "erasure-code/ErasureCodePlugin.h"
+#if __x86_64__ && defined(HAVE_BETTER_YASM_ELF64)
+#include "erasure-code/isa/ErasureCodePluginIsa.h"
+#endif
+#include "erasure-code/jerasure/ErasureCodePluginJerasure.h"
+#include "erasure-code/jerasure/jerasure_init.h"
+#include "erasure-code/lrc/ErasureCodePluginLrc.h"
+#include "erasure-code/shec/ErasureCodePluginShec.h"
#include "include/cephd/libcephd.h"
extern "C" void cephd_version(int *pmajor, int *pminor, int *ppatch)
*ppatch = (n >= 3) ? patch : 0;
return v;
}
+
+// load the embedded plugins. This is safe to call multiple
+// times in the same process
+void cephd_preload_embedded_plugins()
+{
+ int r;
+
+ // load erasure coding plugins
+ {
+ ErasureCodePlugin* plugin;
+ ErasureCodePluginRegistry& reg = ErasureCodePluginRegistry::instance();
+ Mutex::Locker l(reg.lock);
+ reg.disable_dlclose = true;
+
+ // initialize jerasure (and gf-complete)
+ int w[] = { 4, 8, 16, 32 };
+ r = jerasure_init(4, w);
+ assert(r == 0);
+
+ plugin = new ErasureCodePluginJerasure();
+ r = reg.add("jerasure", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+
+ plugin = new ErasureCodePluginLrc();
+ r = reg.add("lrc", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+
+ plugin = new ErasureCodePluginShec();
+ r = reg.add("shec", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+
+#if __x86_64__ && defined(HAVE_BETTER_YASM_ELF64)
+ plugin = new ErasureCodePluginIsa();
+ r = reg.add("isa", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+#endif
+ }
+
+ // now load the compression plugins
+ {
+ Plugin *plugin;
+ PluginRegistry *reg = g_ceph_context->get_plugin_registry();
+ Mutex::Locker l(reg->lock);
+ reg->disable_dlclose = true;
+
+ plugin = new CompressionPluginSnappy(g_ceph_context);
+ r = reg->add("compressor", "snappy", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+
+ plugin = new CompressionPluginZlib(g_ceph_context);
+ r = reg->add("compressor", "zlib", plugin);
+ if (r == -EEXIST) {
+ delete plugin;
+ }
+ assert(r == 0);
+ }
+}