| 33 | } |
| 34 | |
| 35 | int ErasureCodePluginJerasure::factory(const std::string& directory, |
| 36 | ceph::ErasureCodeProfile &profile, |
| 37 | ceph::ErasureCodeInterfaceRef *erasure_code, |
| 38 | std::ostream *ss) { |
| 39 | ErasureCodeJerasure *interface; |
| 40 | std::string t; |
| 41 | if (profile.find("technique") != profile.end()) |
| 42 | t = profile.find("technique")->second; |
| 43 | if (t == "reed_sol_van" || t == "") { // Default! |
| 44 | interface = new ErasureCodeJerasureReedSolomonVandermonde(); |
| 45 | } else if (t == "reed_sol_r6_op") { |
| 46 | interface = new ErasureCodeJerasureReedSolomonRAID6(); |
| 47 | } else if (t == "cauchy_orig") { |
| 48 | interface = new ErasureCodeJerasureCauchyOrig(); |
| 49 | } else if (t == "cauchy_good") { |
| 50 | interface = new ErasureCodeJerasureCauchyGood(); |
| 51 | } else if (t == "liberation") { |
| 52 | interface = new ErasureCodeJerasureLiberation(); |
| 53 | } else if (t == "blaum_roth") { |
| 54 | interface = new ErasureCodeJerasureBlaumRoth(); |
| 55 | } else if (t == "liber8tion") { |
| 56 | interface = new ErasureCodeJerasureLiber8tion(); |
| 57 | } else { |
| 58 | *ss << "technique=" << t << " is not a valid coding technique. " |
| 59 | << " Choose one of the following: " |
| 60 | << "reed_sol_van, reed_sol_r6_op, cauchy_orig, " |
| 61 | << "cauchy_good, liberation, blaum_roth, liber8tion"; |
| 62 | return -ENOENT; |
| 63 | } |
| 64 | dout(20) << __func__ << ": " << profile << dendl; |
| 65 | int r = interface->init(profile, ss); |
| 66 | if (r) { |
| 67 | delete interface; |
| 68 | return r; |
| 69 | } |
| 70 | *erasure_code = ceph::ErasureCodeInterfaceRef(interface); |
| 71 | return 0; |
| 72 | } |
| 73 | |
| 74 | const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; } |
| 75 | |