]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: avoid string copy after collection_list sort
authorSage Weil <sage@newdream.net>
Wed, 9 Dec 2009 21:38:25 +0000 (13:38 -0800)
committerSage Weil <sage@newdream.net>
Wed, 9 Dec 2009 21:38:25 +0000 (13:38 -0800)
src/include/object.h
src/os/FileStore.cc

index 4e26cf4c4a48f0fa39288da9da4487947394c1bc..1a3d5b0577e36a3f9382c88f5321044f98bad08f 100644 (file)
@@ -33,6 +33,9 @@ struct object_t {
   nstring name;
 
   object_t(const char *s = 0) : name(s) {}
+  void swap(object_t& o) {
+    name.swap(o.name);
+  }
   
   void encode(bufferlist &bl) const {
     ::encode(name, bl);
@@ -128,6 +131,13 @@ struct sobject_t {
   sobject_t() : snap(0) {}
   sobject_t(object_t o, snapid_t s) : oid(o), snap(s) {}
 
+  void swap(sobject_t& o) {
+    oid.swap(o.oid);
+    snapid_t t = snap;
+    snap = o.snap;
+    o.snap = t;
+  }
+
   void encode(bufferlist& bl) const {
     ::encode(oid, bl);
     ::encode(snap, bl);
index 1f03fa80b28da9162004d6e5ceb4b4f6de60dfe9..7b1160bc53382b92108bac15bb37d2067f2c21dc 100644 (file)
@@ -2256,7 +2256,7 @@ int FileStore::collection_list(coll_t c, vector<sobject_t>& ls)
   ls.resize(inolist.size());
   int i = 0;
   for (vector< pair<ino_t,sobject_t> >::iterator p = inolist.begin(); p != inolist.end(); p++)
-    ls[i++] = p->second;
+    ls[i++].swap(p->second);
   
   dout(10) << "collection_list " << fn << " = 0 (" << ls.size() << " objects)" << dendl;
   ::closedir(dir);