]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: ensure m >= 1
authorSage Weil <sage@redhat.com>
Tue, 12 Mar 2019 13:57:21 +0000 (08:57 -0500)
committerNathan Cutler <ncutler@suse.com>
Thu, 11 Jul 2019 14:36:12 +0000 (16:36 +0200)
Fixes: http://tracker.ceph.com/issues/38682
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit ab0a6528266ab30d442f351de97f5475399ff278)

Conflicts:
src/erasure-code/clay/ErasureCodeClay.cc
- file does not exist in mimic

qa/workunits/cephtool/test.sh
src/erasure-code/ErasureCode.cc
src/erasure-code/ErasureCode.h
src/erasure-code/isa/ErasureCodeIsa.cc
src/erasure-code/jerasure/ErasureCodeJerasure.cc
src/test/erasure-code/TestErasureCodeLrc.cc

index 668778681404c2acd18695cdc1ae6b605e90fe10..f6931fc9a16fd4417edb991bcaeb229fe459522e 100755 (executable)
@@ -2220,6 +2220,16 @@ function test_mon_osd_erasure_code()
   # clean up
   ceph osd erasure-code-profile rm fooprofile
   ceph osd erasure-code-profile rm barprofile
+
+  # try weird k and m values
+  expect_false ceph osd erasure-code-profile set badk k=1 m=1
+  expect_false ceph osd erasure-code-profile set badk k=1 m=2
+  expect_false ceph osd erasure-code-profile set badk k=0 m=2
+  expect_false ceph osd erasure-code-profile set badk k=-1 m=2
+  expect_false ceph osd erasure-code-profile set badm k=2 m=0
+  expect_false ceph osd erasure-code-profile set badm k=2 m=-1
+  ceph osd erasure-code-profile set good k=2 m=1
+  ceph osd erasure-code-profile rm good
 }
 
 function test_mon_osd_misc()
index 45607bf2f4b2a7e5a640820d66a9bdb4f94a0236..e474b70258da415fa9fc0134ed22e1e705ec5c95 100644 (file)
@@ -72,14 +72,17 @@ int ErasureCode::create_rule(
   return ruleid;
 }
 
-int ErasureCode::sanity_check_k(int k, ostream *ss)
+int ErasureCode::sanity_check_k_m(int k, int m, ostream *ss)
 {
   if (k < 2) {
     *ss << "k=" << k << " must be >= 2" << std::endl;
     return -EINVAL;
-  } else {
-    return 0;
   }
+  if (m < 1) {
+    *ss << "m=" << m << " must be >= 1" << std::endl;
+    return -EINVAL;
+  }
+  return 0;
 }
 
 int ErasureCode::chunk_index(unsigned int i) const
index ec8dd31d5cfd51fb55e66568f0f636d0ca516e11..97783a99297654f12353e468e35a48fb0fee3d2f 100644 (file)
@@ -50,7 +50,7 @@ namespace ceph {
                    CrushWrapper &crush,
                    std::ostream *ss) const;
 
-    int sanity_check_k(int k, std::ostream *ss);
+    int sanity_check_k_m(int k, int m, std::ostream *ss);
 
     unsigned int get_coding_chunk_count() const override {
       return get_chunk_count() - get_data_chunk_count();
index 46c8e830173aecaea5edcecbb4e44f24d4a8c747..ee6a31491be4f5ccc67e209f2a19dcb0dda8b2bb 100644 (file)
@@ -325,7 +325,7 @@ int ErasureCodeIsaDefault::parse(ErasureCodeProfile &profile,
   int err = ErasureCode::parse(profile, ss);
   err |= to_int("k", profile, &k, DEFAULT_K, ss);
   err |= to_int("m", profile, &m, DEFAULT_M, ss);
-  err |= sanity_check_k(k, ss);
+  err |= sanity_check_k_m(k, m, ss);
 
   if (matrixtype == kVandermonde) {
     // these are verified safe values evaluated using the
index ea76b22f00402d697c7c50a835205faef4b3f57b..dbe0109da58401223316fa811fc25c7ea3da24d2 100644 (file)
@@ -66,7 +66,7 @@ int ErasureCodeJerasure::parse(ErasureCodeProfile &profile,
     chunk_mapping.clear();
     err = -EINVAL;
   }
-  err |= sanity_check_k(k, ss);
+  err |= sanity_check_k_m(k, m, ss);
   return err;
 }
 
index 21926af2b93eb8e496eb6d46d0824f1fc70c6532..6257fbafaadd440780e64243647299ac09068460 100644 (file)
@@ -392,7 +392,7 @@ TEST(ErasureCodeLrc, layers_sanity_checks)
       "  [ \"DD\", \"\" ], "
       "]";
     profile["layers"] = description_string;
-    EXPECT_EQ(ERROR_LRC_MAPPING_SIZE, lrc.init(profile, &cerr));
+    EXPECT_EQ(-EINVAL, lrc.init(profile, &cerr));
   }
 }