]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: add scattered write callback to ObjecterWriteback
authorYan, Zheng <zyan@redhat.com>
Sat, 19 Sep 2015 13:13:33 +0000 (21:13 +0800)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 13 Jan 2016 02:36:00 +0000 (18:36 -0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
Update for ceph::real_time
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/client/ObjecterWriteback.h

index 5d0343f0c6dc5d0ef2be46cb0097a02cc5fc047f..8acd3f736202b0ce1edf99c129cba401460934b0 100644 (file)
@@ -42,6 +42,23 @@ class ObjecterWriteback : public WritebackHandler {
                                                    m_finisher));
   }
 
+  virtual bool can_scattered_write() { return true; }
+  virtual ceph_tid_t write(const object_t& oid, const object_locator_t& oloc,
+                           vector<pair<uint64_t, bufferlist> >& io_vec,
+                          const SnapContext& snapc, ceph::real_time mtime,
+                          uint64_t trunc_size, __u32 trunc_seq,
+                          Context *oncommit) {
+    ObjectOperation op;
+    for (vector<pair<uint64_t, bufferlist> >::iterator p = io_vec.begin();
+        p != io_vec.end();
+        ++p)
+      op.write(p->first, p->second, trunc_size, trunc_seq);
+
+    return m_objecter->mutate(oid, oloc, op, snapc, mtime, 0, NULL,
+                             new C_OnFinisher(new C_Lock(m_lock, oncommit),
+                                              m_finisher));
+  }
+
  private:
   Objecter *m_objecter;
   Finisher *m_finisher;