1 #include <iostream>
2
3 #include "dbrm.h"
4
5
6 using namespace std;
7 using namespace BRM;
8
grabLock()9 void grabLock()
10 {
11 DBRM dbrm;
12 uint64_t id;
13 vector<uint32_t> pmlist;
14
15 string name = "init";
16 uint32_t pid = 1;
17 int32_t sid = 5678;
18
19 pmlist.push_back(1);
20
21 try
22 {
23 id = dbrm.getTableLock(pmlist, 1234, &name, &pid, &sid, &sid, LOADING);
24 }
25 catch (exception& e)
26 {
27 cout << "caught an exception: " << e.what() << endl;
28 exit(1);
29 }
30
31 cout << "lock ID = " << id << endl;
32
33 if (id == 0)
34 cout << " existing owner name = " << name << " pid = " << pid << " session = " << sid << endl;
35
36 }
37
releaseLock(uint64_t id)38 void releaseLock(uint64_t id)
39 {
40 DBRM dbrm;
41 bool ret;
42
43 cout << "releasing lock " << id << endl;
44
45 try
46 {
47 ret = dbrm.releaseTableLock(id);
48 }
49 catch (exception& e)
50 {
51 cout << "caught an exception: " << e.what() << endl;
52 exit(1);
53 }
54
55 if (ret)
56 cout << "success\n";
57 else
58 cout << "failed\n";
59 }
60
changeState(uint64_t id)61 void changeState(uint64_t id)
62 {
63 DBRM dbrm;
64 bool ret;
65
66 cout << "changing state of lock " << id << endl;
67
68 try
69 {
70 ret = dbrm.changeState(id, CLEANUP);
71 }
72 catch (exception& e)
73 {
74 cout << "caught an exception: " << e.what() << endl;
75 exit(1);
76 }
77
78 if (ret)
79 cout << "success\n";
80 else
81 cout << "failed\n";
82 }
83
changeOwner(uint64_t id)84 void changeOwner(uint64_t id)
85 {
86 DBRM dbrm;
87 bool ret;
88
89 cout << "changing owner of lock " << id << endl;
90
91 try
92 {
93 ret = dbrm.changeOwner(id, "blah blah", 5678, 1234, 9999);
94 }
95 catch (exception& e)
96 {
97 cout << "caught an exception: " << e.what() << endl;
98 exit(1);
99 }
100
101 if (ret)
102 cout << "success\n";
103 else
104 cout << "failed\n";
105 }
106
printAllLocks()107 void printAllLocks()
108 {
109 DBRM dbrm;
110 vector<TableLockInfo> locks;
111 uint32_t i;
112
113 try
114 {
115 locks = dbrm.getAllTableLocks();
116 }
117 catch (exception& e)
118 {
119 cout << "caught an exception: " << e.what() << endl;
120 exit(1);
121 }
122
123 cout << "got " << locks.size() << " locks\n";
124
125 for (i = 0; i < locks.size(); i++)
126 cout << " lock[" << i << "] id=" << locks[i].id << " tableOID=" << locks[i].tableOID <<
127 " owner: " << locks[i].ownerName << ":" << locks[i].ownerPID << ":" <<
128 locks[i].ownerSessionID << " " << ctime(&locks[i].creationTime) << endl;
129 }
130
releaseAllLocks()131 void releaseAllLocks()
132 {
133 DBRM dbrm;
134
135 try
136 {
137 dbrm.releaseAllTableLocks();
138 }
139 catch (exception& e)
140 {
141 cout << "caught an exception: " << e.what() << endl;
142 exit(1);
143 }
144
145 cout << "OK\n";
146 }
147
getLockInfo(uint64_t id)148 void getLockInfo(uint64_t id)
149 {
150 DBRM dbrm;
151 bool ret;
152 TableLockInfo tli;
153
154 try
155 {
156 ret = dbrm.getTableLockInfo(id, &tli);
157 }
158 catch (exception& e)
159 {
160 cout << "caught an exception: " << e.what() << endl;
161 exit(1);
162 }
163
164 if (ret)
165 cout << "id=" << tli.id << " tableOID=" << tli.tableOID <<
166 " owner: " << tli.ownerName << ":" << tli.ownerPID << ":" <<
167 tli.ownerSessionID << endl;
168 else
169 cout << "failed\n";
170 }
171
main(int argc,char ** argv)172 int main(int argc, char** argv)
173 {
174
175 if (argc < 2)
176 {
177 cout << "Usage: " << argv[0] << " g | r | s | o | p | R | z. Check the code to see what they do. :P\n";
178 exit(1);
179 }
180
181 char cmd = argv[1][0];
182
183 if (cmd == 'g')
184 grabLock();
185 else if (cmd == 'r')
186 {
187 if (argc < 3)
188 {
189 cout << "need an ID\n";
190 exit(1);
191 }
192
193 releaseLock(atoi(argv[2]));
194 }
195 else if (cmd == 's')
196 {
197 if (argc < 3)
198 {
199 cout << "need an ID\n";
200 exit(1);
201 }
202
203 changeState(atoi(argv[2]));
204 }
205 else if (cmd == 'o')
206 {
207 if (argc < 3)
208 {
209 cout << "need an ID\n";
210 exit(1);
211 }
212
213 changeOwner(atoi(argv[2]));
214 }
215 else if (cmd == 'p')
216 printAllLocks();
217 else if (cmd == 'R')
218 releaseAllLocks();
219 else if (cmd == 'z')
220 {
221 if (argc < 3)
222 {
223 cout << "need an ID\n";
224 exit(1);
225 }
226
227 getLockInfo(atoi(argv[2]));
228 }
229 else
230 cout << "bad command, need g | r | s | o | p\n";
231
232 exit(0);
233 }
234
235
236
237
238