#include #include #include #include #include #include "dbstore_mgr.h" #include #include using namespace std; using namespace rgw::store; using DB = rgw::store::DB; struct thr_args { DB *dbs; int thr_id; }; void* process(void *arg) { struct thr_args *t_args = (struct thr_args*)arg; DB *db = t_args->dbs; int thr_id = t_args->thr_id; int ret = -1; cout<<"Entered thread:"<get_def_dpp(); db->InitializeParams(dpp, ¶ms); params.op.user.uinfo.display_name = user1; params.op.user.uinfo.user_id.tenant = "tenant"; params.op.user.uinfo.user_id.id = user1; params.op.user.uinfo.suspended = 123; params.op.user.uinfo.max_buckets = 456; params.op.user.uinfo.placement_tags.push_back("tags1"); params.op.user.uinfo.placement_tags.push_back("tags2"); RGWAccessKey k1("id1", "key1"); RGWAccessKey k2("id2", "key2"); params.op.user.uinfo.access_keys.insert(make_pair("key1", k1)); params.op.user.uinfo.access_keys.insert(make_pair("key2", k2)); ret = db->ProcessOp(dpp, "InsertUser", ¶ms); cout << "InsertUser return value: " << ret << "\n"; DBOpParams params2 = {}; params.op.user.uinfo.user_id.tenant = "tenant2"; db->InitializeParams(dpp, ¶ms2); params2.op.user.uinfo.display_name = user1; ret = db->ProcessOp(dpp, "GetUser", ¶ms2); cout << "GetUser return value: " << ret << "\n"; cout << "tenant: " << params2.op.user.uinfo.user_id.tenant << "\n"; cout << "suspended: " << (int)params2.op.user.uinfo.suspended << "\n"; list::iterator it = params2.op.user.uinfo.placement_tags.begin(); while (it != params2.op.user.uinfo.placement_tags.end()) { cout << "list = " << *it << "\n"; it++; } map::iterator it2 = params2.op.user.uinfo.access_keys.begin(); while (it2 != params2.op.user.uinfo.access_keys.end()) { cout << "keys = " << it2->first << "\n"; RGWAccessKey k = it2->second; cout << "id = " << k.id << ", keys = " << k.key << "\n"; it2++; } params.op.bucket.info.bucket.name = bucketa; db->ProcessOp(dpp, "InsertBucket", ¶ms); params.op.user.uinfo.display_name = user2; params.op.user.uinfo.user_id.id = user2; db->ProcessOp(dpp, "InsertUser", ¶ms); params.op.bucket.info.bucket.name = bucketb; db->ProcessOp(dpp, "InsertBucket", ¶ms); db->ProcessOp(dpp, "GetUser", ¶ms); db->ProcessOp(dpp, "GetBucket", ¶ms); db->ListAllUsers(dpp, ¶ms); db->ListAllBuckets(dpp, ¶ms); params.op.bucket.info.bucket.name = bucketb; db->ProcessOp(dpp, "RemoveBucket", ¶ms); params.op.user.uinfo.user_id.id = user2; db->ProcessOp(dpp, "RemoveUser", ¶ms); db->ListAllUsers(dpp, ¶ms); db->ListAllBuckets(dpp, ¶ms); cout<<"Exiting thread:"< args; auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON, CINIT_FLAG_NO_MON_CONFIG, 1); dbsm = new DBStoreManager(cct.get(), logfile, loglevel); dbs = dbsm->getDB(tenant, true); cout<<"No. of threads being created = "<destroyAllHandles(); return 0; }