]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/store/dbstore/dbstore_main.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / rgw / store / dbstore / dbstore_main.cc
CommitLineData
20effc67
TL
1#include <stdio.h>
2#include <sqlite3.h>
3#include <stdlib.h>
4#include <string.h>
5#include <pthread.h>
6
7#include "dbstore_mgr.h"
8#include <dbstore.h>
9#include <dbstore_log.h>
10
11using namespace rgw::store;
12using DB = rgw::store::DB;
13
14struct thr_args {
15 DB *dbs;
16 int thr_id;
17};
18
19void* process(void *arg)
20{
21 struct thr_args *t_args = (struct thr_args*)arg;
22
23 DB *db = t_args->dbs;
24 int thr_id = t_args->thr_id;
25 int ret = -1;
26
27 cout<<"Entered thread:"<<thr_id<<"\n";
28
29 string user1 = "User1";
30 string bucketa = "rgw";
31 string objecta1 = "bugfixing";
32 string objecta2 = "zipper";
33 string bucketb = "gluster";
34 string objectb1 = "bugfixing";
35 string objectb2 = "delegations";
36
37 string user2 = "User2";
38 string bucketc = "qe";
39 string objectc1 = "rhhi";
40 string objectc2 = "cns";
41
42 DBOpParams params = {};
43 const DoutPrefixProvider *dpp = db->get_def_dpp();
44
45 db->InitializeParams(dpp, "InsertUser", &params);
46
47 params.op.user.uinfo.display_name = user1;
48 params.op.user.uinfo.user_id.tenant = "tenant";
49 params.op.user.uinfo.user_id.id = user1;
50 params.op.user.uinfo.suspended = 123;
51 params.op.user.uinfo.max_buckets = 456;
52 params.op.user.uinfo.assumed_role_arn = "role";
53 params.op.user.uinfo.placement_tags.push_back("tags1");
54 params.op.user.uinfo.placement_tags.push_back("tags2");
55
56 RGWAccessKey k1("id1", "key1");
57 RGWAccessKey k2("id2", "key2");
58 params.op.user.uinfo.access_keys.insert(make_pair("key1", k1));
59 params.op.user.uinfo.access_keys.insert(make_pair("key2", k2));
60
61 ret = db->ProcessOp(dpp, "InsertUser", &params);
62 cout << "InsertUser return value: " << ret << "\n";
63
64 DBOpParams params2 = {};
65 params.op.user.uinfo.user_id.tenant = "tenant2";
66
67 db->InitializeParams(dpp, "GetUser", &params2);
68 params2.op.user.uinfo.display_name = user1;
69 ret = db->ProcessOp(dpp, "GetUser", &params2);
70
71 cout << "GetUser return value: " << ret << "\n";
72
73 cout << "tenant: " << params2.op.user.uinfo.user_id.tenant << "\n";
74 cout << "suspended: " << (int)params2.op.user.uinfo.suspended << "\n";
75 cout << "assumed_role_arn: " << params2.op.user.uinfo.assumed_role_arn << "\n";
76
77 list<string>::iterator it = params2.op.user.uinfo.placement_tags.begin();
78
79 while (it != params2.op.user.uinfo.placement_tags.end()) {
80 cout << "list = " << *it << "\n";
81 it++;
82 }
83
84 map<string, RGWAccessKey>::iterator it2 = params2.op.user.uinfo.access_keys.begin();
85
86 while (it2 != params2.op.user.uinfo.access_keys.end()) {
87 cout << "keys = " << it2->first << "\n";
88 RGWAccessKey k = it2->second;
89 cout << "id = " << k.id << ", keys = " << k.key << "\n";
90 it2++;
91 }
92
93 params.op.bucket.info.bucket.name = bucketa;
94 db->ProcessOp(dpp, "InsertBucket", &params);
95
96 params.op.user.uinfo.display_name = user2;
97 params.op.user.uinfo.user_id.id = user2;
98 db->ProcessOp(dpp, "InsertUser", &params);
99
100 params.op.bucket.info.bucket.name = bucketb;
101 db->ProcessOp(dpp, "InsertBucket", &params);
102
103 db->ProcessOp(dpp, "GetUser", &params);
104 db->ProcessOp(dpp, "GetBucket", &params);
105
106 db->ListAllUsers(dpp, &params);
107 db->ListAllBuckets(dpp, &params);
108
109 params.op.bucket.info.bucket.name = bucketb;
110
111 db->ProcessOp(dpp, "RemoveBucket", &params);
112
113 params.op.user.uinfo.user_id.id = user2;
114 db->ProcessOp(dpp, "RemoveUser", &params);
115
116 db->ListAllUsers(dpp, &params);
117 db->ListAllBuckets(dpp, &params);
118 cout<<"Exiting thread:"<<thr_id<<"\n";
119
120 return 0;
121}
122
123int main(int argc, char *argv[])
124{
125 string tenant = "Redhat";
126 string logfile = "rgw_dbstore_bin.log";
127 int loglevel = 20;
128
129 DBStoreManager *dbsm;
130 DB *dbs;
131 int rc = 0, tnum = 0;
132 void *res;
133
134 pthread_attr_t attr;
135 int num_thr = 2;
136 pthread_t threads[num_thr];
137 struct thr_args t_args[num_thr];
138
139
140 cout << "loglevel " << loglevel << "\n";
141 // format: ./dbstore-bin logfile loglevel
142 if (argc == 3) {
143 logfile = argv[1];
144 loglevel = (atoi)(argv[2]);
145 cout << "loglevel set to " << loglevel << "\n";
146 }
147
148 dbsm = new DBStoreManager(logfile, loglevel);
149 dbs = dbsm->getDB(tenant, true);
150
151 cout<<"No. of threads being created = "<<num_thr<<"\n";
152
153 /* Initialize thread creation attributes */
154 rc = pthread_attr_init(&attr);
155
156 if (rc != 0) {
157 cout<<" error in pthread_attr_init \n";
158 goto out;
159 }
160
161 for (tnum = 0; tnum < num_thr; tnum++) {
162 t_args[tnum].dbs = dbs;
163 t_args[tnum].thr_id = tnum;
164 rc = pthread_create((pthread_t*)&threads[tnum], &attr, &process,
165 &t_args[tnum]);
166 if (rc != 0) {
167 cout<<" error in pthread_create \n";
168 goto out;
169 }
170
171 cout<<"Created thread (thread-id:"<<tnum<<")\n";
172 }
173
174 /* Destroy the thread attributes object, since it is no
175 longer needed */
176
177 rc = pthread_attr_destroy(&attr);
178 if (rc != 0) {
179 cout<<"error in pthread_attr_destroy \n";
180 }
181
182 /* Now join with each thread, and display its returned value */
183
184 for (tnum = 0; tnum < num_thr; tnum++) {
185 rc = pthread_join(threads[tnum], &res);
186 if (rc != 0) {
187 cout<<"error in pthread_join \n";
188 } else {
189 cout<<"Joined with thread "<<tnum<<"\n";
190 }
191 }
192
193out:
194 dbsm->destroyAllHandles();
195
196 return 0;
197}