]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Changed ECUtil::decode to handle the case where there is more helper data than needed.
authorMyna V <mynaramana@gmail.com>
Mon, 30 Oct 2017 05:34:27 +0000 (11:04 +0530)
committerMyna V <mynaramana@gmail.com>
Tue, 31 Oct 2017 11:06:05 +0000 (16:36 +0530)
Made all the helper information uniform across all helper nodes.
Authors: Myna, Elita.
Signed-off-by: Myna Vajha <mynaramana@gmail.com>
src/erasure-code/ErasureCode.cc
src/osd/ECMsgTypes.cc
src/osd/ECUtil.cc

index 4628e73cccc3ef63e8da28fbd6be65c624c794b6..4142da5785cf3b837b1d0bf41a2c27b7dffa7166 100644 (file)
@@ -118,7 +118,7 @@ int ErasureCode::minimum_to_decode(const set<int> &want_to_read,
   }
   vector<pair<int, int>> default_subchunks;
   default_subchunks.push_back(make_pair(0, get_sub_chunk_count()));
-  for(auto &&id:minimum_shard_ids){
+  for (auto &&id : minimum_shard_ids) {
     minimum->insert(make_pair(id, default_subchunks));
   }
   return 0;
index 68539ad9c81401388c635c5603f6e5e313b5dac8..e119bb86c8a31620e3f617a67d8f56bf33329314 100644 (file)
@@ -217,10 +217,10 @@ void ECSubRead::decode(bufferlist::iterator &bl)
   }
   ::decode(attrs_to_read, bl);
   if (struct_v > 2 && struct_v > struct_compat) {
-  ::decode(subchunks, bl);
+    ::decode(subchunks, bl);
   } else {
-    for (auto &&i:attrs_to_read) {
-      subchunks[i].push_back(make_pair(0,1));
+    for (auto &&i : attrs_to_read) {
+      subchunks[i].push_back(make_pair(0, 1));
     }
   }
   DECODE_FINISH(bl);
index c7ce7b3042cb54c098b0f2227f260e1afa562bd5..361963268fb2ec16a7431510cb1c21a115ee0736 100644 (file)
@@ -52,10 +52,8 @@ int ECUtil::decode(
 
   assert(to_decode.size());
 
-  for (auto i = to_decode.begin();
-       i != to_decode.end();
-       ++i) {
-    if(i->second.length() == 0)
+  for (auto &&i : to_decode) {
+    if(i.second.length() == 0)
       return 0;
   }
 
@@ -69,39 +67,29 @@ int ECUtil::decode(
   }
 
   set<int> avail;
-  for (auto i = to_decode.begin();
-       i != to_decode.end();
-       ++i) {
-    assert(i->second.length() != 0);
-    avail.insert(i->first);
+  for (auto &&i : to_decode) {
+    assert(i.second.length() != 0);
+    avail.insert(i.first);
   }
 
   map<int, vector<pair<int, int>>> min;
-  assert(ec_impl->minimum_to_decode(need, avail, &min) == 0);
+  int r = ec_impl->minimum_to_decode(need, avail, &min);
+  assert(r == 0);
 
   int chunks_count = 0;
-  map<int, int> repair_data_per_chunk;
+  int repair_data_per_chunk = 0;
   int subchunk_size = sinfo.get_chunk_size()/ec_impl->get_sub_chunk_count();
 
-  for (map<int, bufferlist>::iterator i = to_decode.begin();
-       i != to_decode.end();
-       ++i) {
-    assert(min.find(i->first) != min.end());
-
-    int repair_subchunk_count = 0;
-    for (auto j = min[i->first].begin();
-          j != min[i->first].end(); ++j) {
-      repair_subchunk_count += j->second;
-    }
-    repair_data_per_chunk[i->first] = repair_subchunk_count*subchunk_size;
-    assert(i->second.length() % repair_data_per_chunk[i->first] == 0);
-
-    if (i == to_decode.begin()) {
-      chunks_count = (int) i->second.length() / repair_data_per_chunk[i->first];
-    }
-    else {
-      assert(chunks_count == 
-             (int) i->second.length() / repair_data_per_chunk[i->first]);
+  for (auto &&i : to_decode) {
+    auto found = min.find(i.first);
+    if (found != min.end()) {
+      int repair_subchunk_count = 0;
+      for (auto& subchunks : min[i.first]) {
+        repair_subchunk_count += subchunks.second;
+      }
+      repair_data_per_chunk = repair_subchunk_count * subchunk_size;
+      chunks_count = (int)i.second.length() / repair_data_per_chunk;
+      break;
     }
   }
 
@@ -111,11 +99,11 @@ int ECUtil::decode(
         j != to_decode.end();
         ++j) {
       chunks[j->first].substr_of(j->second, 
-                                 i*repair_data_per_chunk[j->first]
-                                 repair_data_per_chunk[j->first]);
+                                 i*repair_data_per_chunk, 
+                                 repair_data_per_chunk);
     }
     map<int, bufferlist> out_bls;
-    int r = ec_impl->decode(need, chunks, &out_bls, sinfo.get_chunk_size());
+    r = ec_impl->decode(need, chunks, &out_bls, sinfo.get_chunk_size());
     assert(r == 0);
     for (auto j = out.begin(); j != out.end(); ++j) {
       assert(out_bls.count(j->first));
@@ -123,8 +111,8 @@ int ECUtil::decode(
       j->second->claim_append(out_bls[j->first]);
     }
   }
-  for (auto i = out.begin(); i != out.end(); ++i) {
-    assert(i->second->length() == chunks_count*sinfo.get_chunk_size());
+  for (auto &&i : out) {
+    assert(i.second->length() == chunks_count * sinfo.get_chunk_size());
   }
   return 0;
 }