From: Loic Dachary Date: Thu, 21 Aug 2014 12:41:55 +0000 (+0200) Subject: erasure-code: preload the jerasure plugin variant (sse4,sse3,generic) X-Git-Tag: v0.80.6~41^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8d7e77b9747f1b3dc3c10d1b0877a4b9c899ba86;p=ceph.git erasure-code: preload the jerasure plugin variant (sse4,sse3,generic) The preloading of the jerasure plugin ldopen the plugin that is in charge of selecting the variant optimized for the CPU (sse4,sse3,generic). The variant plugin itself is not loaded because it does not happen at load() but when the factory() method is called. The JerasurePlugin::preload method is modified to call the factory() method to load jerasure_sse4 or jerasure_sse3 or jerasure_generic as a side effect. Indirectly loading another plugin in the factory() method is error prone and should be moved to the load() method instead. This change should be done in a separate commit. http://tracker.ceph.com/issues/9153 Fixes: #9153 Signed-off-by: Loic Dachary --- diff --git a/src/erasure-code/ErasureCodePlugin.cc b/src/erasure-code/ErasureCodePlugin.cc index f77041eff941..3ce0563829ec 100644 --- a/src/erasure-code/ErasureCodePlugin.cc +++ b/src/erasure-code/ErasureCodePlugin.cc @@ -152,6 +152,12 @@ int ErasureCodePluginRegistry::preload(const std::string &plugins, int r = load(*i, profile, &plugin, ss); if (r) return r; + + ErasureCodeInterfaceRef erasure_code; + profile["technique"] = "reed_sol_van"; + r = plugin->factory(profile, &erasure_code); + if (r) + return r; } return 0; } diff --git a/src/test/erasure-code/test-erasure-code.sh b/src/test/erasure-code/test-erasure-code.sh index 63663e0a3844..3a1b1a26789e 100755 --- a/src/test/erasure-code/test-erasure-code.sh +++ b/src/test/erasure-code/test-erasure-code.sh @@ -33,6 +33,7 @@ function run() { # check that erasure code plugins are preloaded CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-osd.0.asok log flush || return 1 grep 'load: jerasure' $dir/osd-0.log || return 1 + grep 'ErasureCodePluginSelectJerasure' $dir/osd-0.log || return 1 create_erasure_coded_pool || return 1 FUNCTIONS=${FUNCTIONS:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')} for TEST_function in $FUNCTIONS ; do