From: Loic Dachary Date: Thu, 24 Sep 2015 09:35:13 +0000 (+0200) Subject: erasure-code: shec must compare for equality with epsilon X-Git-Tag: v9.1.0~52^2^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F6068%2Fhead;p=ceph.git erasure-code: shec must compare for equality with epsilon When comparing two double for strict inequality, a test for equality using epsilon must also be done to ensure the results do not vary cross platform. http://tracker.ceph.com/issues/12936 Fixes: #12936 Signed-off-by: Loic Dachary --- diff --git a/src/erasure-code/shec/ErasureCodeShec.cc b/src/erasure-code/shec/ErasureCodeShec.cc index 5dcaf44da125..21803286a23d 100644 --- a/src/erasure-code/shec/ErasureCodeShec.cc +++ b/src/erasure-code/shec/ErasureCodeShec.cc @@ -501,7 +501,8 @@ int* ErasureCodeShec::shec_reedsolomon_coding_matrix(int is_single) if (true) { double r_e1; r_e1 = shec_calc_recovery_efficiency1(k, m1, m2, c1, c2); - if (r_e1 < min_r_e1){ + if (min_r_e1 - r_e1 > std::numeric_limits::epsilon() && + r_e1 < min_r_e1) { min_r_e1 = r_e1; c1_best = c1; m1_best = m1; diff --git a/src/erasure-code/shec/ErasureCodeShec.h b/src/erasure-code/shec/ErasureCodeShec.h index 9eeb3d42e548..bf07b8041937 100644 --- a/src/erasure-code/shec/ErasureCodeShec.h +++ b/src/erasure-code/shec/ErasureCodeShec.h @@ -124,12 +124,7 @@ public: private: virtual int parse(const ErasureCodeProfile &profile) = 0; - virtual double shec_calc_recovery_efficiency1(int k, int m1, int m2, int c1, int c2) - // http://tracker.ceph.com/issues/12936 shec fails i386 make check -#if defined(__i386__) && defined(__GNUC__) - __attribute__((optimize(0))) -#endif - ; + virtual double shec_calc_recovery_efficiency1(int k, int m1, int m2, int c1, int c2); virtual int shec_make_decoding_matrix(bool prepare, int *want, int *avails, int *decoding_matrix,