// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph distributed storage system * * Copyright (C) 2013,2014 Cloudwatt * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * * 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_ERASURE_CODE_PLUGIN_H #define CEPH_ERASURE_CODE_PLUGIN_H #include "common/Mutex.h" #include "ErasureCodeInterface.h" extern "C" { const char *__erasure_code_version(); int __erasure_code_init(char *plugin_name, char *directory); } namespace ceph { class ErasureCodePlugin { public: void *library; ErasureCodePlugin() : library(0) {} virtual ~ErasureCodePlugin() {} virtual int factory(const std::string &directory, ErasureCodeProfile &profile, ErasureCodeInterfaceRef *erasure_code, std::ostream *ss) = 0; }; class ErasureCodePluginRegistry { public: Mutex lock; bool loading; bool disable_dlclose; std::map plugins; static ErasureCodePluginRegistry singleton; ErasureCodePluginRegistry(); ~ErasureCodePluginRegistry(); static ErasureCodePluginRegistry &instance() { return singleton; } int factory(const std::string &plugin, const std::string &directory, ErasureCodeProfile &profile, ErasureCodeInterfaceRef *erasure_code, std::ostream *ss); int add(const std::string &name, ErasureCodePlugin *plugin); int remove(const std::string &name); ErasureCodePlugin *get(const std::string &name); int load(const std::string &plugin_name, const std::string &directory, ErasureCodePlugin **plugin, std::ostream *ss); int preload(const std::string &plugins, const std::string &directory, std::ostream *ss); }; } #endif