X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftest%2Fobjectstore%2FDeterministicOpSequence.h;fp=src%2Fceph%2Fsrc%2Ftest%2Fobjectstore%2FDeterministicOpSequence.h;h=b3707a202814d143a791cdae5c765cab25c7002a;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/test/objectstore/DeterministicOpSequence.h b/src/ceph/src/test/objectstore/DeterministicOpSequence.h new file mode 100644 index 0000000..b3707a2 --- /dev/null +++ b/src/ceph/src/test/objectstore/DeterministicOpSequence.h @@ -0,0 +1,98 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* +* Ceph - scalable distributed file system +* +* Copyright (C) 2012 New Dream Network +* +* This is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License version 2.1, as published by the Free Software +* Foundation. See file COPYING. +*/ +#ifndef FILESTORE_DTRMNSTC_SEQ_OPS_H_ +#define FILESTORE_DTRMNSTC_SEQ_OPS_H_ + +#include +#include +#include +#include "os/ObjectStore.h" +#include +#include +#include + +#include "TestObjectStoreState.h" + +typedef boost::mt11213b rngen_t; + +class DeterministicOpSequence : public TestObjectStoreState { + public: + DeterministicOpSequence(ObjectStore *store, std::string status = std::string()); + virtual ~DeterministicOpSequence(); + + virtual void generate(int seed, int num_txs); + + protected: + enum { + DSOP_TOUCH = 0, + DSOP_WRITE = 1, + DSOP_CLONE = 2, + DSOP_CLONE_RANGE = 3, + DSOP_OBJ_REMOVE = 4, + DSOP_COLL_MOVE = 6, + DSOP_SET_ATTRS = 7, + DSOP_COLL_CREATE = 8, + + DSOP_FIRST = DSOP_TOUCH, + DSOP_LAST = DSOP_COLL_CREATE, + }; + + int32_t txn; + + coll_t txn_coll; + hobject_t txn_object; + + ObjectStore::Sequencer m_osr; + std::ofstream m_status; + + bool run_one_op(int op, rngen_t& gen); + + void note_txn(ObjectStore::Transaction *t); + bool do_touch(rngen_t& gen); + bool do_remove(rngen_t& gen); + bool do_write(rngen_t& gen); + bool do_clone(rngen_t& gen); + bool do_clone_range(rngen_t& gen); + bool do_coll_move(rngen_t& gen); + bool do_set_attrs(rngen_t& gen); + bool do_coll_create(rngen_t& gen); + + virtual void _do_touch(coll_t coll, hobject_t& obj); + virtual void _do_remove(coll_t coll, hobject_t& obj); + virtual void _do_write(coll_t coll, hobject_t& obj, uint64_t off, + uint64_t len, const bufferlist& data); + virtual void _do_set_attrs(coll_t coll, + hobject_t &obj, + const map &attrs); + virtual void _do_clone(coll_t coll, hobject_t& orig_obj, hobject_t& new_obj); + virtual void _do_clone_range(coll_t coll, hobject_t& orig_obj, + hobject_t& new_obj, uint64_t srcoff, uint64_t srclen, uint64_t dstoff); + virtual void _do_write_and_clone_range(coll_t coll, hobject_t& orig_obj, + hobject_t& new_obj, uint64_t srcoff, uint64_t srclen, + uint64_t dstoff, bufferlist& bl); + virtual void _do_coll_move(coll_t orig_coll, coll_t new_coll, hobject_t& obj); + virtual void _do_coll_create(coll_t cid, uint32_t pg_num, uint64_t num_objs); + + int _gen_coll_id(rngen_t& gen); + int _gen_obj_id(rngen_t& gen); + void _print_status(int seq, int op); + + private: + bool _prepare_clone(rngen_t& gen, coll_t& coll_ret, + hobject_t& orig_obj_ret, hobject_t& new_obj_ret); + bool _prepare_colls(rngen_t& gen, + coll_entry_t* &orig_coll, coll_entry_t* &new_coll); +}; + + +#endif /* FILESTORE_DTRMNSTC_SEQ_OPS_H_ */