initial code repo
[stor4nfv.git] / src / ceph / src / test / bench / testfilestore_backend.cc
diff --git a/src/ceph/src/test/bench/testfilestore_backend.cc b/src/ceph/src/test/bench/testfilestore_backend.cc
new file mode 100644 (file)
index 0000000..8a210ec
--- /dev/null
@@ -0,0 +1,72 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+
+#include "testfilestore_backend.h"
+#include "global/global_init.h"
+#include "os/ObjectStore.h"
+
+
+TestFileStoreBackend::TestFileStoreBackend(
+  ObjectStore *os, bool write_infos)
+  : os(os), finisher(g_ceph_context), write_infos(write_infos)
+{
+  finisher.start();
+}
+
+void TestFileStoreBackend::write(
+  const string &oid,
+  uint64_t offset,
+  const bufferlist &bl,
+  Context *on_applied,
+  Context *on_commit)
+{
+  ObjectStore::Transaction *t = new ObjectStore::Transaction;
+  size_t sep = oid.find("/");
+  assert(sep != string::npos);
+  assert(sep + 1 < oid.size());
+  coll_t c;
+  bool valid_coll = c.parse(oid.substr(0, sep));
+  assert(valid_coll);
+  string coll_str = c.to_str();
+
+  if (!osrs.count(coll_str))
+    osrs.insert(make_pair(coll_str, ObjectStore::Sequencer(coll_str)));
+  ObjectStore::Sequencer *osr = &(osrs.find(coll_str)->second);
+
+  hobject_t h(sobject_t(oid.substr(sep+1), 0));
+  h.pool = 0;
+  t->write(c, ghobject_t(h), offset, bl.length(), bl);
+
+  if (write_infos) {
+    bufferlist bl2;
+    for (uint64_t j = 0; j < 128; ++j) bl2.append(0);
+    coll_t meta;
+    hobject_t info(sobject_t(string("info_")+coll_str, 0));
+    t->write(meta, ghobject_t(info), 0, bl2.length(), bl2);
+  }
+
+  os->queue_transaction(
+    osr,
+    std::move(*t),
+    on_applied,
+    on_commit);
+  delete t;
+}
+
+void TestFileStoreBackend::read(
+  const string &oid,
+  uint64_t offset,
+  uint64_t length,
+  bufferlist *bl,
+  Context *on_complete)
+{
+  size_t sep = oid.find("/");
+  assert(sep != string::npos);
+  assert(sep + 1 < oid.size());
+  coll_t c;
+  bool valid_coll = c.parse(oid.substr(0, sep));
+  assert(valid_coll);
+  hobject_t h(sobject_t(oid.substr(sep+1), 0));
+  h.pool = 0;
+  os->read(c, ghobject_t(h), offset, length, *bl);
+  finisher.queue(on_complete);
+}