}
TEST_P(StoreTest, SimpleRemount) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
ghobject_t hoid(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
ghobject_t hoid2(hobject_t(sobject_t("Object 2", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.create_collection(cid, 0);
t.write(cid, hoid, 0, bl.length(), bl);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
store->umount();
{
ObjectStore::Transaction t;
t.write(cid, hoid2, 0, bl.length(), bl);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, hoid2);
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, IORemount) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
bufferlist bl;
bl.append("1234512345");
ghobject_t hoid(hobject_t(sobject_t("Object " + stringify(n), CEPH_NOSNAP)));
t.write(cid, hoid, 0, bl.length(), bl);
}
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
// overwrites
ObjectStore::Transaction t;
ghobject_t hoid(hobject_t(sobject_t("Object " + stringify(n), CEPH_NOSNAP)));
t.write(cid, hoid, 1, bl.length(), bl);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
t.remove(cid, hoid);
}
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleMetaColTest) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
int r = 0;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "create collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "add collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimplePGColTest) {
+ ObjectStore::Sequencer osr("test");
coll_t cid(spg_t(pg_t(1,2), shard_id_t::NO_SHARD));
int r = 0;
{
ObjectStore::Transaction t;
t.create_collection(cid, 4);
cerr << "create collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.create_collection(cid, 4);
cerr << "add collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleColPreHashTest) {
+ ObjectStore::Sequencer osr("test");
// Firstly we will need to revert the value making sure
// collection hint actually works
int merge_threshold = g_ceph_context->_conf->filestore_merge_threshold;
::encode(expected_num_objs, hint);
t.collection_hint(cid, ObjectStore::Transaction::COLL_HINT_EXPECTED_NUM_OBJECTS, hint);
cerr << "collection hint" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
cerr << "remove collection" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
// Revert the config change so that it does not affect the split/merge tests
}
TEST_P(StoreTest, SimpleObjectTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
ghobject_t hoid(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.touch(cid, hoid);
cerr << "Creating object " << hoid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
exists = store->exists(cid, hoid);
t.remove(cid, hoid);
t.touch(cid, hoid);
cerr << "Remove then create" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, hoid);
t.write(cid, hoid, 0, 5, bl);
cerr << "Remove then create" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
bufferlist in;
exp.append(bl);
t.write(cid, hoid, 5, 5, bl);
cerr << "Append" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
bufferlist in;
exp = bl;
t.write(cid, hoid, 0, 10, bl);
cerr << "Full overwrite" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
bufferlist in;
bl.append("abcde");
t.write(cid, hoid, 3, 5, bl);
cerr << "Partial overwrite" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
bufferlist in, exp;
bl.append("abcde01234012340123401234abcde01234012340123401234abcde01234012340123401234abcde01234012340123401234");
t.write(cid, hoid, 0, bl.length(), bl);
cerr << "larger overwrite" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
bufferlist in;
t.remove(cid, hoid);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, ManySmallWrite) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
ghobject_t a(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
bufferlist bl;
for (int i=0; i<100; ++i) {
ObjectStore::Transaction t;
t.write(cid, a, i*4096, 4096, bl, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
for (int i=0; i<100; ++i) {
ObjectStore::Transaction t;
t.write(cid, b, (rand() % 1024)*4096, 4096, bl, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, b);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleAttrTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
ghobject_t hoid(hobject_t(sobject_t("attr object 1", CEPH_NOSNAP)));
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.touch(cid, hoid);
t.setattr(cid, hoid, "foo", val);
t.setattr(cid, hoid, "bar", val2);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove(cid, hoid);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleListTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid(spg_t(pg_t(0, 1), shard_id_t(1)));
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
set<ghobject_t, ghobject_t::BitwiseComparator> all;
t.touch(cid, hoid);
cerr << "Creating object " << hoid << std::endl;
}
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
for (int bitwise=0; bitwise<2; ++bitwise) {
t.remove(cid, *p);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
}
TEST_P(StoreTest, MultipoolListTest) {
+ ObjectStore::Sequencer osr("test");
int r;
int poolid = 4373;
coll_t cid = coll_t(spg_t(pg_t(0, poolid), shard_id_t::NO_SHARD));
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
set<ghobject_t, ghobject_t::BitwiseComparator> all, saw;
t.touch(cid, hoid);
cerr << "Creating object " << hoid << std::endl;
}
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, *p);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleCloneTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
t.setattr(cid, hoid, "attr3", xlarge);
t.write(cid, hoid, 10, small.length(), small);
cerr << "Creating object and set attr " << hoid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid2(hobject_t(sobject_t("Object 2", CEPH_NOSNAP)));
t.setattr(cid, hoid, "attr1", large);
t.setattr(cid, hoid, "attr2", small);
cerr << "Clone object and rm attr" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
r = store->read(cid, hoid, 10, 5, newdata);
t.remove(cid, hoid2);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, OmapCloneTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
t.omap_setkeys(cid, hoid, km);
t.omap_setheader(cid, hoid, header);
cerr << "Creating object and set omap " << hoid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid2(hobject_t(sobject_t("Object 2", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.clone(cid, hoid, hoid2);
cerr << "Clone object" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, hoid2);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleCloneRangeTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid(hobject_t(sobject_t("Object 1", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.write(cid, hoid, 10, 5, small);
cerr << "Creating object and write bl " << hoid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid2(hobject_t(sobject_t("Object 2", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.clone_range(cid, hoid, hoid2, 10, 5, 0);
cerr << "Clone range object" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
r = store->read(cid, hoid2, 0, 5, newdata);
ASSERT_EQ(r, 5);
t.truncate(cid, hoid, 1024*1024);
t.clone_range(cid, hoid, hoid2, 0, 1024*1024, 0);
cerr << "Clone range object" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
struct stat stat, stat2;
r = store->stat(cid, hoid, &stat);
t.remove(cid, hoid2);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SimpleObjectLongnameTest) {
+ ObjectStore::Sequencer osr("test");
int r;
coll_t cid;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
cerr << "Creating collection " << cid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ghobject_t hoid(hobject_t(sobject_t("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaObjectaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1", CEPH_NOSNAP)));
ObjectStore::Transaction t;
t.touch(cid, hoid);
cerr << "Creating object " << hoid << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
t.remove(cid, hoid);
t.remove_collection(cid);
cerr << "Cleaning" << std::endl;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, ManyObjectTest) {
+ ObjectStore::Sequencer osr("test");
int NUM_OBJS = 2000;
int r = 0;
coll_t cid;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
for (int i = 0; i < NUM_OBJS; ++i) {
ghobject_t hoid(hobject_t(sobject_t(string(buf) + base, CEPH_NOSNAP)));
t.touch(cid, hoid);
created.insert(hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
++i) {
ObjectStore::Transaction t;
t.remove(cid, *i);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
cerr << "cleaning up" << std::endl;
{
ObjectStore::Transaction t;
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
SyntheticWorkloadState *state;
ObjectStore::Transaction *t;
ghobject_t oid, noid;
+
C_SyntheticOnClone(SyntheticWorkloadState *state,
ObjectStore::Transaction *t, ghobject_t oid, ghobject_t noid)
: state(state), t(t), oid(oid), noid(noid) {}
bl.append(bp);
}
-
+
SyntheticWorkloadState(ObjectStore *store,
ObjectGenerator *gen,
gen_type *rng,
int init() {
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- return store->apply_transaction(t);
+ return store->apply_transaction(osr, t);
}
ghobject_t get_uniform_random_object() {
}
TEST_P(StoreTest, HashCollisionTest) {
+ ObjectStore::Sequencer osr("test");
int64_t poolid = 11;
coll_t cid(spg_t(pg_t(0,poolid),shard_id_t::NO_SHARD));
int r;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
string base = "";
{
ObjectStore::Transaction t;
t.touch(cid, hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
created.insert(hoid);
++i) {
ObjectStore::Transaction t;
t.remove(cid, *i);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
TEST_P(StoreTest, ScrubTest) {
+ ObjectStore::Sequencer osr("test");
int64_t poolid = 111;
coll_t cid(spg_t(pg_t(0, poolid),shard_id_t(1)));
int r;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
string base = "aaaaa";
{
ObjectStore::Transaction t;
t.touch(cid, hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
created.insert(hoid);
t.touch(cid, hoid1);
t.touch(cid, hoid2);
t.touch(cid, hoid3);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
created.insert(hoid1);
created.insert(hoid2);
created.insert(hoid3);
++i) {
ObjectStore::Transaction t;
t.remove(cid, *i);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
TEST_P(StoreTest, OMapTest) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
ghobject_t hoid(hobject_t("tesomap", "", CEPH_NOSNAP, 0, 0, ""));
int r;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
t.omap_clear(cid, hoid);
map<string, bufferlist> start_set;
t.omap_setkeys(cid, hoid, start_set);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
for (int i = 0; i < 100; i++) {
to_add.insert(pair<string, bufferlist>("key-" + string(buf), bl));
attrs.insert(pair<string, bufferlist>("key-" + string(buf), bl));
t.omap_setkeys(cid, hoid, to_add);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
int i = 0;
set<string> keys_to_remove;
keys_to_remove.insert(to_remove);
t.omap_rmkeys(cid, hoid, keys_to_remove);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
attrs.erase(to_remove);
bl1.append("omap_header");
ObjectStore::Transaction t;
t.omap_setheader(cid, hoid, bl1);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
bufferlist bl2;
bl2.append("value");
map<string, bufferlist> to_add;
to_add.insert(pair<string, bufferlist>("key", bl2));
t.omap_setkeys(cid, hoid, to_add);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
bufferlist bl3;
map<string, bufferlist> cur_attrs;
t.touch(cid, hoid);
t.omap_setheader(cid, hoid, h);
t.omap_setkeys(cid, hoid, to_set);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
{
ObjectStore::Transaction t;
t.omap_rmkeyrange(cid, hoid, "3", "7");
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
{
bufferlist hdr;
{
ObjectStore::Transaction t;
t.omap_clear(cid, hoid);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
{
bufferlist hdr;
ObjectStore::Transaction t;
t.remove(cid, hoid);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
TEST_P(StoreTest, OMapIterator) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
ghobject_t hoid(hobject_t("tesomap", "", CEPH_NOSNAP, 0, 0, ""));
int count = 0;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
t.omap_clear(cid, hoid);
map<string, bufferlist> start_set;
t.omap_setkeys(cid, hoid, start_set);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
ObjectMap::ObjectMapIterator iter;
bool correct;
attrs.insert(pair<string, bufferlist>("key-" + string(buf), bl));
ObjectStore::Transaction t;
t.omap_setkeys(cid, hoid, to_add);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
iter = store->get_omap_iterator(cid, hoid);
ObjectStore::Transaction t;
t.remove(cid, hoid);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, XattrTest) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
ghobject_t hoid(hobject_t("tesomap", "", CEPH_NOSNAP, 0, 0, ""));
bufferlist big;
ObjectStore::Transaction t;
t.create_collection(cid, 0);
t.touch(cid, hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
attrs["attr4"] = big;
t.setattr(cid, hoid, "attr3", big);
attrs["attr3"] = big;
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.rmattr(cid, hoid, "attr2");
attrs.erase("attr2");
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.remove(cid, hoid);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
unsigned num_objects,
unsigned common_suffix_size
) {
+ ObjectStore::Sequencer osr("test");
coll_t cid(spg_t(pg_t(0,52),shard_id_t::NO_SHARD));
coll_t tid(spg_t(pg_t(1<<common_suffix_size,52),shard_id_t::NO_SHARD));
int r = 0;
{
ObjectStore::Transaction t;
t.create_collection(cid, common_suffix_size);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
i<<common_suffix_size,
52, "")));
}
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.create_collection(tid, common_suffix_size + 1);
t.split_collection(cid, common_suffix_size+1, 1<<common_suffix_size, tid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
t.remove_collection(cid);
t.remove_collection(tid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
* stops at the common prefix subdir. See bug
* #5273 */
TEST_P(StoreTest, TwoHash) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
int r;
{
ObjectStore::Transaction t;
t.create_collection(cid, 0);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
std::cout << "Making objects" << std::endl;
}
o.hobj.set_hash((i << 16) | 0xB1);
t.touch(cid, o);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
std::cout << "Removing half" << std::endl;
o.hobj.pool = -1;
o.hobj.set_hash((i << 16) | 0xA1);
t.remove(cid, o);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
std::cout << "Checking" << std::endl;
t.remove(cid, o);
o.hobj.set_hash((i << 16) | 0xB1);
t.remove(cid, o);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
TEST_P(StoreTest, MoveRename) {
+ ObjectStore::Sequencer osr("test");
coll_t cid(spg_t(pg_t(0, 212),shard_id_t::NO_SHARD));
ghobject_t temp_oid(hobject_t("tmp_oid", "", CEPH_NOSNAP, 0, 0, ""));
ghobject_t oid(hobject_t("dest_oid", "", CEPH_NOSNAP, 0, 0, ""));
ObjectStore::Transaction t;
t.create_collection(cid, 0);
t.touch(cid, oid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ASSERT_TRUE(store->exists(cid, oid));
t.write(cid, temp_oid, 0, data.length(), data);
t.setattr(cid, temp_oid, "attr", attr);
t.omap_setkeys(cid, temp_oid, omap);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ASSERT_TRUE(store->exists(cid, temp_oid));
ObjectStore::Transaction t;
t.remove(cid, oid);
t.collection_move_rename(cid, temp_oid, cid, oid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ASSERT_TRUE(store->exists(cid, oid));
ObjectStore::Transaction t;
t.remove(cid, oid);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, BigRGWObjectName) {
+ ObjectStore::Sequencer osr("test");
store->set_allow_sharded_objects();
coll_t cid(spg_t(pg_t(0,12),shard_id_t::NO_SHARD));
ghobject_t oid(
t.collection_move_rename(cid, oidhead, cid, oid);
t.touch(cid, oidhead);
t.collection_move_rename(cid, oidhead, cid, oid2);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove(cid, oid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
ObjectStore::Transaction t;
t.remove(cid, oid2);
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
TEST_P(StoreTest, SetAllocHint) {
+ ObjectStore::Sequencer osr("test");
coll_t cid;
ghobject_t hoid(hobject_t("test_hint", "", CEPH_NOSNAP, 0, 0, ""));
int r;
ObjectStore::Transaction t;
t.create_collection(cid, 0);
t.touch(cid, hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.set_alloc_hint(cid, hoid, 4*1024*1024, 1024*4);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove(cid, hoid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.set_alloc_hint(cid, hoid, 4*1024*1024, 1024*4);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
{
ObjectStore::Transaction t;
t.remove_collection(cid);
- r = store->apply_transaction(t);
+ r = store->apply_transaction(&osr, t);
ASSERT_EQ(r, 0);
}
}
{
spg_t pg;
coll.is_pg_prefix(&pg);
+ ObjectStore::Sequencer osr(__func__);
OSDriver driver(
store,
coll_t(),
t->remove(coll, *i);
if (num >= 30) {
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
delete t;
t = new ObjectStore::Transaction;
num = 0;
}
}
t->remove_collection(coll);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
out:
delete t;
}
if (dry_run)
return 0;
ObjectStore::Transaction *rmt = new ObjectStore::Transaction;
+ ObjectStore::Sequencer osr(__func__);
int r = mark_pg_for_removal(store, r_pgid, rmt);
if (r < 0) {
delete rmt;
return r;
}
- store->apply_transaction(*rmt);
+ store->apply_transaction(&osr, *rmt);
finish_remove_pgs(store);
return r;
}
cout << "Creating a new epoch." << std::endl;
}
ObjectStore::Transaction t;
+ ObjectStore::Sequencer osr(__func__);
t.write(coll_t::meta(), inc_oid, 0, bl.length(), bl);
t.truncate(coll_t::meta(), inc_oid, bl.length());
- int ret = store->apply_transaction(t);
+ int ret = store->apply_transaction(&osr, t);
if (ret) {
cerr << "Failed to set inc-osdmap (" << inc_oid << "): " << ret << std::endl;
} else {
}
cout << "Creating a new epoch." << std::endl;
}
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction t;
t.write(coll_t::meta(), full_oid, 0, bl.length(), bl);
t.truncate(coll_t::meta(), full_oid, bl.length());
- int ret = store->apply_transaction(t);
+ int ret = store->apply_transaction(&osr, t);
if (ret) {
cerr << "Failed to set osdmap (" << full_oid << "): " << ret << std::endl;
} else {
int ObjectStoreTool::get_object(ObjectStore *store, coll_t coll,
bufferlist &bl, OSDMap &curmap, bool *skipped_objects)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
bufferlist::iterator ebliter = bl.begin();
}
}
if (!dry_run)
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
}
if (!dry_run) {
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction *t = new ObjectStore::Transaction;
PG::_create(*t, pgid,
pgid.get_split_bits(curmap.get_pg_pool(pgid.pool())->get_pg_num()));
::encode((char)1, values["_remove"]);
t->omap_setkeys(coll, pgid.make_pgmeta_oid(), values);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
delete t;
}
return -EFAULT;
}
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction t;
if (!dry_run) {
pg_log_t newlog, reject;
set<string> remove;
remove.insert("_remove");
t.omap_rmkeys(coll, pgid.make_pgmeta_oid(), remove);
- store->apply_transaction(t);
+ store->apply_transaction(&osr, t);
}
return 0;
{
spg_t pg;
coll.is_pg_prefix(&pg);
+ ObjectStore::Sequencer osr(__func__);
OSDriver driver(
store,
coll_t(),
t->remove(coll, ghobj);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
delete t;
return 0;
}
int do_set_bytes(ObjectStore *store, coll_t coll, ghobject_t &ghobj, int fd)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
} while(true);
if (!dry_run)
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
int do_set_attr(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key, int fd)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
bufferlist bl;
t->setattr(coll, ghobj, key, bl);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
int do_rm_attr(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
t->rmattr(coll, ghobj, key);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
int do_set_omap(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key, int fd)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
map<string, bufferlist> attrset;
t->omap_setkeys(coll, ghobj, attrset);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
int do_rm_omap(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
set<string> keys;
t->omap_rmkeys(coll, ghobj, keys);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
int do_set_omaphdr(ObjectStore *store, coll_t coll, ghobject_t &ghobj, int fd)
{
+ ObjectStore::Sequencer osr(__func__);
ObjectStore::Transaction tran;
ObjectStore::Transaction *t = &tran;
bufferlist hdrbl;
t->omap_setheader(coll, ghobj, hdrbl);
- store->apply_transaction(*t);
+ store->apply_transaction(&osr, *t);
return 0;
}
oi.clear_flag(object_info_t::FLAG_LOST);
bufferlist bl;
::encode(oi, bl);
+ ObjectStore::Sequencer osr("do_fix_lost");
ObjectStore::Transaction t;
t.setattr(coll, ghobj, OI_ATTR, bl);
- int r = store->apply_transaction(t);
+ int r = store->apply_transaction(&osr, t);
if (r < 0) {
cerr << "Error getting fixing attr on : " << make_pair(coll, ghobj)
<< ", "
bool fs_sharded_objects = fs->get_allow_sharded_objects();
+ ObjectStore::Sequencer osr(__func__);
+
vector<coll_t> ls;
vector<coll_t>::iterator it;
CompatSet supported;
bl.clear();
::encode(superblock, bl);
t.write(coll_t::meta(), OSD_SUPERBLOCK_POBJECT, 0, bl.length(), bl);
- ret = fs->apply_transaction(t);
+ ret = fs->apply_transaction(&osr, t);
if (ret < 0) {
cerr << "Error writing OSD superblock: " << cpp_strerror(ret) << std::endl;
goto out;
ret = write_info(*t, map_epoch, info, past_intervals);
if (ret == 0) {
- fs->apply_transaction(*t);
+ fs->apply_transaction(&osr, *t);
cout << "Removal succeeded" << std::endl;
}
} else if (op == "mark-complete") {
ret = write_info(*t, map_epoch, info, past_intervals);
if (ret == 0) {
- fs->apply_transaction(*t);
+ fs->apply_transaction(&osr, *t);
cout << "Marking complete succeeded" << std::endl;
}
} else {