]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: encode snaps more efficiently
authorSage Weil <sage@redhat.com>
Tue, 16 May 2017 21:33:48 +0000 (17:33 -0400)
committerSage Weil <sage@redhat.com>
Tue, 16 May 2017 21:33:48 +0000 (17:33 -0400)
1- encode into a sized buffer.
2- do not needlessly copy the set<> to a vector<> before encoding.
set<> and vector<> encode identically.  Since we are converting from sorted
set<> to unsorted vector<>, the order doesn't change either.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/ECTransaction.cc
src/osd/ReplicatedBackend.cc

index 3119778664265e14daf9aee0eb2186fccc44e006..91fbf5a58d9c0f1bf03ffb4a779dbe2cdcd5f476 100644 (file)
@@ -166,10 +166,9 @@ void ECTransaction::generate_transactions(
       if (entry &&
          entry->is_modify() &&
          op.updated_snaps) {
-       vector<snapid_t> snaps(
-         op.updated_snaps->second.begin(),
-         op.updated_snaps->second.end());
-       ::encode(snaps, entry->snaps);
+       bufferlist bl(op.updated_snaps->second.size() * 8 + 8);
+       ::encode(op.updated_snaps->second, bl);
+       entry->snaps.swap(bl);
       }
 
       ldpp_dout(dpp, 20) << "generate_transactions: "
index def68de42274ef364980ad3c02e58550ef7ba361..d51506df2ef2059faff3cb68385c479744fe323e 100644 (file)
@@ -358,10 +358,9 @@ void generate_transaction(
     le.mark_unrollbackable();
     auto oiter = pgt->op_map.find(le.soid);
     if (oiter != pgt->op_map.end() && oiter->second.updated_snaps) {
-      vector<snapid_t> snaps(
-       oiter->second.updated_snaps->second.begin(),
-       oiter->second.updated_snaps->second.end());
-      ::encode(snaps, le.snaps);
+      bufferlist bl(oiter->second.updated_snaps->second.size() * 8 + 8);
+      ::encode(oiter->second.updated_snaps->second, bl);
+      le.snaps.swap(bl);
     }
   }