]>
Commit | Line | Data |
---|---|---|
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 | ||
11 | using namespace rgw::store; | |
12 | using DB = rgw::store::DB; | |
13 | ||
14 | struct thr_args { | |
15 | DB *dbs; | |
16 | int thr_id; | |
17 | }; | |
18 | ||
19 | void* 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", ¶ms); | |
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", ¶ms); | |
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", ¶ms2); | |
68 | params2.op.user.uinfo.display_name = user1; | |
69 | ret = db->ProcessOp(dpp, "GetUser", ¶ms2); | |
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", ¶ms); | |
95 | ||
96 | params.op.user.uinfo.display_name = user2; | |
97 | params.op.user.uinfo.user_id.id = user2; | |
98 | db->ProcessOp(dpp, "InsertUser", ¶ms); | |
99 | ||
100 | params.op.bucket.info.bucket.name = bucketb; | |
101 | db->ProcessOp(dpp, "InsertBucket", ¶ms); | |
102 | ||
103 | db->ProcessOp(dpp, "GetUser", ¶ms); | |
104 | db->ProcessOp(dpp, "GetBucket", ¶ms); | |
105 | ||
106 | db->ListAllUsers(dpp, ¶ms); | |
107 | db->ListAllBuckets(dpp, ¶ms); | |
108 | ||
109 | params.op.bucket.info.bucket.name = bucketb; | |
110 | ||
111 | db->ProcessOp(dpp, "RemoveBucket", ¶ms); | |
112 | ||
113 | params.op.user.uinfo.user_id.id = user2; | |
114 | db->ProcessOp(dpp, "RemoveUser", ¶ms); | |
115 | ||
116 | db->ListAllUsers(dpp, ¶ms); | |
117 | db->ListAllBuckets(dpp, ¶ms); | |
118 | cout<<"Exiting thread:"<<thr_id<<"\n"; | |
119 | ||
120 | return 0; | |
121 | } | |
122 | ||
123 | int 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 | ||
193 | out: | |
194 | dbsm->destroyAllHandles(); | |
195 | ||
196 | return 0; | |
197 | } |