]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: implement ErasureCodePluginRegistry::remove
authorLoic Dachary <loic-201408@dachary.org>
Thu, 21 Aug 2014 16:37:14 +0000 (18:37 +0200)
committerLoic Dachary <loic-201408@dachary.org>
Thu, 28 Aug 2014 10:17:15 +0000 (12:17 +0200)
Which is symmetric to the add method and used for test.

Signed-off-by: Loic Dachary <loic-201408@dachary.org>
src/erasure-code/ErasureCodePlugin.cc
src/erasure-code/ErasureCodePlugin.h
src/test/erasure-code/TestErasureCodePlugin.cc

index 16e21b011a0eed6a5faa0c6d7d5f3f18e8317118..fa3dec02bcc629f9350f3b95d2759b7f7852c63c 100644 (file)
@@ -49,6 +49,18 @@ ErasureCodePluginRegistry::~ErasureCodePluginRegistry()
   }
 }
 
+int ErasureCodePluginRegistry::remove(const std::string &name)
+{
+  if (plugins.find(name) == plugins.end())
+    return -ENOENT;
+  std::map<std::string,ErasureCodePlugin*>::iterator plugin = plugins.find(name);
+  void *library = plugin->second->library;
+  delete plugin->second;
+  dlclose(library);
+  plugins.erase(plugin);
+  return 0;
+}
+
 int ErasureCodePluginRegistry::add(const std::string &name,
                                    ErasureCodePlugin* plugin)
 {
index 30ced6c12a37ced6026f7ce1f3a5910fba45ef59..3348eacc425b2d2a17fa32901043ee5e8da86d48 100644 (file)
@@ -61,6 +61,7 @@ namespace ceph {
                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,
index 2755044d47f42115eec66ec53a8f81d3313e7d03..e9ffaa2c7dc96afdcef5819c6c764c2a7baa326d 100644 (file)
@@ -94,6 +94,9 @@ TEST_F(ErasureCodePluginRegistryTest, all)
   EXPECT_TRUE(erasure_code);
   ErasureCodePlugin *plugin = 0;
   EXPECT_EQ(-EEXIST, instance.load("example", directory, &plugin, ss));
+  EXPECT_EQ(-ENOENT, instance.remove("does not exist"));
+  EXPECT_EQ(0, instance.remove("example"));
+  EXPECT_EQ(0, instance.load("example", directory, &plugin, ss));
 }
 
 int main(int argc, char **argv) {