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