start of new file
[IRC.git] / Robust / src / Runtime / DSTM / interface / tests / testserver.c
1 #include <pthread.h>
2 #include "dstm.h"
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #include <arpa/inet.h>
6 #include "ip.h"
7
8 extern objstr_t *mainobjstore;
9 typedef struct testobj1 {
10         int x;
11         char z;
12 } testobj1_t;
13
14 typedef struct testobj2 {
15         char z[10];
16         char c;
17         testobj1_t *y;
18 } testobj2_t;
19
20 typedef struct testobj3 {
21         short p;
22         testobj1_t *q;
23         testobj2_t *r;
24 } testobj3_t;
25
26 typedef struct testobj4 {
27         int b;
28         void *q;
29         testobj3_t *a;
30 } testobj4_t;
31
32 typedef struct testobj5 {
33         testobj4_t *a;
34 } testobj5_t;
35
36
37 int classsize[]={sizeof(int),sizeof(char),sizeof(short), sizeof(void *), sizeof(testobj1_t), 
38         sizeof(testobj2_t), sizeof(testobj3_t), sizeof(testobj4_t), sizeof(testobj5_t)};        
39
40
41 //int classsize[]={sizeof(int),sizeof(char),sizeof(short), sizeof(void *)};
42
43 int test1(void);
44 int test2(void);
45 int test3(void);
46
47 unsigned int createObjects(transrecord_t *record, unsigned short type) {
48         objheader_t *header, *tmp;
49         struct sockaddr_in antelope;
50         unsigned int size, mid;
51         size = sizeof(objheader_t) + classsize[type] ;
52         //Inserts in chashtable
53         header = transCreateObj(record, type);
54         tmp = (objheader_t *) objstrAlloc(mainobjstore, size);
55         memcpy(tmp, header, size);
56         mhashInsert(tmp->oid, tmp);
57         mid = iptoMid("128.200.9.10");
58         lhashInsert(tmp->oid, mid);
59         //Lock oid 3 object
60 //      if(tmp->oid == 3)
61 //              tmp->status |= LOCK;
62         return 0;
63 }
64
65 void init_obj(objheader_t *h, unsigned int oid, unsigned short type, \
66                 unsigned short version,\
67                 unsigned short rcount, char status) {
68         h->oid = oid;
69         h->type = type;
70         h->version = version;
71         h->rcount = rcount;
72         h->status |= status;
73         return;
74 }
75
76
77 int main()
78 {
79 //      test1();
80 //      test3();
81         test4();
82 }
83
84 int test1()
85 {
86         unsigned int val;
87         transrecord_t *myTrans;
88         pthread_t thread_Listen;
89
90         dstmInit();     
91         pthread_create(&thread_Listen, NULL, dstmListen, NULL);
92         // Start Transaction    
93         myTrans = transStart();
94
95         printf("Creating Transaction\n");
96         //Create Object1
97         if((val = createObjects(myTrans, 0)) != 0) {
98                 printf("Error transCreateObj1");
99         }
100         //Create Object2
101         if((val = createObjects(myTrans, 1)) != 0) {
102                 printf("Error transCreateObj2");
103         }
104         //Create Object3
105         if((val = createObjects(myTrans, 2)) != 0) {
106                 printf("Error transCreateObj3");
107         }
108         //Create Object4
109         if((val = createObjects(myTrans, 3)) != 0) {
110                 printf("Error transCreateObj4");
111         }
112         //Create Object5
113         if((val = createObjects(myTrans, 0)) != 0) {
114                 printf("Error transCreateObj5");
115         }
116         //Create Object6
117         if((val = createObjects(myTrans, 1)) != 0) {
118                 printf("Error transCreateObj6");
119         }
120         pthread_join(thread_Listen, NULL);
121         return 0;
122 }
123
124 int test2() {
125         
126         unsigned int val, mid;
127         transrecord_t *myTrans;
128         pthread_t thread_Listen;
129
130         dstmInit();     
131         mid = iptoMid("128.200.9.27"); //d-2.eecs.uci.edu
132         //Inserting into lhashtable
133         lhashInsert(20, mid);
134         lhashInsert(21, mid);
135         lhashInsert(22, mid);
136         lhashInsert(23, mid);
137         lhashInsert(30, mid);
138         lhashInsert(28, mid);
139         lhashInsert(29, mid);
140         pthread_create(&thread_Listen, NULL, dstmListen, NULL);
141         // Start Transaction    
142         myTrans = transStart();
143
144         printf("Creating Transaction\n");
145         //Create Object1
146         if((val = createObjects(myTrans, 0)) != 0) {
147                 printf("Error transCreateObj1");
148         }
149         //Create Object2
150         if((val = createObjects(myTrans, 1)) != 0) {
151                 printf("Error transCreateObj2");
152         }
153         //Create Object3
154         if((val = createObjects(myTrans, 2)) != 0) {
155                 printf("Error transCreateObj3");
156         }
157         //Create Object4
158         if((val = createObjects(myTrans, 3)) != 0) {
159                 printf("Error transCreateObj4");
160         }
161         //Create Object5
162         if((val = createObjects(myTrans, 0)) != 0) {
163                 printf("Error transCreateObj5");
164         }
165         //Create Object6
166         if((val = createObjects(myTrans, 1)) != 0) {
167                 printf("Error transCreateObj6");
168         }
169         pthread_join(thread_Listen, NULL);
170 }
171 //Commit transaction with all locally available objects
172 int test3() {
173         unsigned int val, mid;
174         transrecord_t *myTrans;
175         unsigned int size;
176         objheader_t *header;
177         pthread_t thread_Listen;
178         pthread_attr_t attr;
179         objheader_t *h1, *h2, *h3;//h1,h2,h3 from local
180
181         dstmInit();     
182         pthread_attr_init(&attr);
183         pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
184
185         // Create and Insert Oid 1
186         size = sizeof(objheader_t) + classsize[0] ;
187         header = (objheader_t *) objstrAlloc(mainobjstore, size);
188         init_obj(header, 1, 0, 1, 0, NEW);
189         mhashInsert(header->oid, header);
190         mid = iptoMid("128.200.9.10");
191         lhashInsert(header->oid, mid);
192
193         // Create and Insert Oid 2
194         size = sizeof(objheader_t) + classsize[1] ;
195         header = (objheader_t *) objstrAlloc(mainobjstore, size);
196         init_obj(header, 2, 1, 1, 0, NEW);
197         mhashInsert(header->oid, header);
198         mid = iptoMid("128.200.9.10");
199         lhashInsert(header->oid, mid);
200
201
202         // Create and Insert Oid 3
203         size = sizeof(objheader_t) + classsize[2] ;
204         header = (objheader_t *) objstrAlloc(mainobjstore, size);
205         init_obj(header, 3, 2, 1, 0, NEW);
206         mhashInsert(header->oid, header);
207         mid = iptoMid("128.200.9.10");
208         lhashInsert(header->oid, mid);
209
210         // Create and Insert Oid 4
211         size = sizeof(objheader_t) + classsize[3] ;
212         header = (objheader_t *) objstrAlloc(mainobjstore, size);
213         init_obj(header, 4, 3, 1, 0, NEW);
214         mhashInsert(header->oid, header);
215         mid = iptoMid("128.200.9.10");
216         lhashInsert(header->oid, mid);
217
218         //Inserting into lhashtable
219         mid = iptoMid("128.195.175.70"); //dw-2.eecs.uci.edu
220         lhashInsert(20, mid);
221         lhashInsert(21, mid);
222         lhashInsert(22, mid);
223
224         mid = iptoMid("128.195.175.69"); //dw-1.eecs.uci.edu
225         //Inserting into lhashtable
226         lhashInsert(31, mid);
227         lhashInsert(32, mid);
228         lhashInsert(33, mid);
229         pthread_create(&thread_Listen, &attr, dstmListen, NULL);
230
231         //Check if machine dw-1 is up and running
232         checkServer(mid, "128.195.175.69");
233         mid = iptoMid("128.195.175.70");
234         //Check if machine dw-2 is up and running
235         checkServer(mid, "128.195.175.70");
236
237         // Start Transaction    
238         myTrans = transStart();
239
240         //read object 1(present in local machine)
241         if((h1 = transRead(myTrans, 1)) == NULL){
242                 printf("Object not found\n");
243         }
244         //read object 2present in local machine)
245         if((h2 = transRead(myTrans, 2)) == NULL) {
246                 printf("Object not found\n");
247         }
248         //read object 3(present in local machine)
249         if((h3 = transRead(myTrans, 3)) == NULL) {
250                 printf("Object not found\n");
251         }
252
253         // Commit transaction
254         transCommit(myTrans);
255
256         pthread_join(thread_Listen, NULL);
257
258         return 0;
259 }
260
261 //Commit transaction with few locally available objects and other objects from machine d-1
262 // and d-2
263 int test4() {
264
265         unsigned int val, mid;
266         transrecord_t *myTrans;
267         unsigned int size;
268         objheader_t *header;
269         pthread_t thread_Listen;
270         pthread_attr_t attr;
271         objheader_t *h1, *h2, *h3, *h4;//h1,h2 from local ; h3 from d-1 , h-4 from d-2
272
273         dstmInit();     
274         transInit();
275         pthread_attr_init(&attr);
276         pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
277
278         // Create and Insert Oid 1
279         size = sizeof(objheader_t) + classsize[0] ;
280         header = (objheader_t *) objstrAlloc(mainobjstore, size);
281         init_obj(header, 1, 0, 1, 0, NEW);
282         mhashInsert(header->oid, header);
283         mid = iptoMid("128.200.9.10");
284         lhashInsert(header->oid, mid);
285
286         // Create and Insert Oid 2
287         size = sizeof(objheader_t) + classsize[1] ;
288         header = (objheader_t *) objstrAlloc(mainobjstore, size);
289         init_obj(header, 2, 1, 1, 0, NEW);
290         mhashInsert(header->oid, header);
291         mid = iptoMid("128.200.9.10");
292         lhashInsert(header->oid, mid);
293
294
295         // Create and Insert Oid 3
296         size = sizeof(objheader_t) + classsize[2] ;
297         header = (objheader_t *) objstrAlloc(mainobjstore, size);
298         init_obj(header, 3, 2, 1, 0, NEW);
299         mhashInsert(header->oid, header);
300         mid = iptoMid("128.200.9.10");
301         lhashInsert(header->oid, mid);
302
303         // Create and Insert Oid 4
304         size = sizeof(objheader_t) + classsize[3] ;
305         header = (objheader_t *) objstrAlloc(mainobjstore, size);
306         init_obj(header, 4, 3, 1, 0, NEW);
307         mhashInsert(header->oid, header);
308         mid = iptoMid("128.200.9.10");
309         lhashInsert(header->oid, mid);
310
311         //Inserting into lhashtable
312         mid = iptoMid("128.195.175.70"); //dw-2.eecs.uci.edu
313         lhashInsert(20, mid);
314         lhashInsert(21, mid);
315         lhashInsert(22, mid);
316
317         mid = iptoMid("128.195.175.69"); //dw-1.eecs.uci.edu
318         //Inserting into lhashtable
319         lhashInsert(31, mid);
320         lhashInsert(32, mid);
321         lhashInsert(33, mid);
322
323         pthread_create(&thread_Listen, &attr, dstmListen, NULL);
324         //Check if machine dw-1 is up and running
325         checkServer(mid, "128.195.175.69");
326         mid = iptoMid("128.195.175.70");
327         //Check if machine dw-2 is up and running
328         checkServer(mid, "128.195.175.70");
329
330         // Start Transaction    
331         myTrans = transStart();
332
333         //read object 1(present in local machine)
334         if((h1 = transRead(myTrans, 2)) == NULL){
335                 printf("Object not found\n");
336         }
337
338         //read object 2present in local machine)
339         if((h2 = transRead(myTrans, 1)) == NULL) {
340                 printf("Object not found\n");
341         }
342         //read object 31(present in dw-1 machine)
343         if((h3 = transRead(myTrans, 31)) == NULL) {
344                 printf("Object not found\n");
345         }
346         //read object 21(present in dw-2 machine)
347         if((h4 = transRead(myTrans, 21)) == NULL) {
348                 printf("Object not found\n");
349         }
350         
351         // Commit transaction
352         transCommit(myTrans);
353
354         pthread_join(thread_Listen, NULL);
355
356         return 0;
357 }
358 int test5() {
359         
360         unsigned int val, mid;
361         transrecord_t *myTrans;
362         unsigned int size;
363         objheader_t *header;
364         pthread_t thread_Listen;
365         pthread_attr_t attr;
366         objheader_t *h1, *h2, *h3, *h4, *h5;
367
368         dstmInit();     
369         pthread_attr_init(&attr);
370         pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
371
372         mid = iptoMid("128.200.9.27"); //d-2.eecs.uci.edu
373         //Inserting into lhashtable
374         lhashInsert(20, mid);
375         lhashInsert(21, mid);
376         lhashInsert(22, mid);
377
378         mid = iptoMid("128.200.9.26"); //d-1.eecs.uci.edu
379         //Inserting into lhashtable
380         lhashInsert(31, mid);
381         lhashInsert(32, mid);
382         lhashInsert(33, mid);
383         pthread_create(&thread_Listen, &attr, dstmListen, NULL);
384
385         printf("DEBUG -> mid = %d\n", mid);
386         checkServer(mid, "128.200.9.26");
387         mid = iptoMid("128.200.9.27");
388         printf("DEBUG -> mid = %d\n", mid);
389         checkServer(mid, "128.200.9.27");
390
391         // Start Transaction    
392         myTrans = transStart();
393
394         // Create and Insert Oid 1
395         size = sizeof(objheader_t) + classsize[0] ;
396         header = (objheader_t *) objstrAlloc(mainobjstore, size);
397         init_obj(header, 1, 0, 1, 0, NEW);
398         mhashInsert(header->oid, header);
399         mid = iptoMid("128.200.9.10");
400         lhashInsert(header->oid, mid);
401
402         // Create and Insert Oid 2
403         size = sizeof(objheader_t) + classsize[1] ;
404         header = (objheader_t *) objstrAlloc(mainobjstore, size);
405         init_obj(header, 2, 1, 1, 0, NEW);
406         mhashInsert(header->oid, header);
407         mid = iptoMid("128.200.9.10");
408         lhashInsert(header->oid, mid);
409
410
411         // Create and Insert Oid 3
412         size = sizeof(objheader_t) + classsize[2] ;
413         header = (objheader_t *) objstrAlloc(mainobjstore, size);
414         init_obj(header, 3, 2, 1, 0, NEW);
415         mhashInsert(header->oid, header);
416         mid = iptoMid("128.200.9.10");
417         lhashInsert(header->oid, mid);
418
419         // Create and Insert Oid 4
420         size = sizeof(objheader_t) + classsize[3] ;
421         header = (objheader_t *) objstrAlloc(mainobjstore, size);
422         init_obj(header, 4, 3, 1, 0, NEW);
423         mhashInsert(header->oid, header);
424         mid = iptoMid("128.200.9.10");
425         lhashInsert(header->oid, mid);
426
427         // Create and Insert Oid 5
428         size = sizeof(objheader_t) + classsize[0] ;
429         header = (objheader_t *) objstrAlloc(mainobjstore, size);
430         init_obj(header, 5, 0, 1, 0, NEW);
431         mhashInsert(header->oid, header);
432         mid = iptoMid("128.200.9.10");
433         lhashInsert(header->oid, mid);
434         
435         // Create and Insert Oid 6
436         size = sizeof(objheader_t) + classsize[1] ;
437         header = (objheader_t *) objstrAlloc(mainobjstore, size);
438         init_obj(header, 6, 1, 1, 0, NEW);
439         mhashInsert(header->oid, header);
440         mid = iptoMid("128.200.9.10");
441         lhashInsert(header->oid, mid);
442         
443         //read object 1(present in local machine)
444         if((h1 = transRead(myTrans, 1)) == NULL){
445                 printf("Object not found\n");
446         }
447         //read object 2present in local machine)
448         if((h2 = transRead(myTrans, 2)) == NULL) {
449                 printf("Object not found\n");
450         }
451         //read object 3(present in local machine)
452         if((h3 = transRead(myTrans, 3)) == NULL) {
453                 printf("Object not found\n");
454         }
455         //read object 31 (present in d-1. eecs)
456         if((h4 = transRead(myTrans, 31)) == NULL) {
457                 printf("Object not found\n");
458         }
459         //read object 20 (present in d-2. eecs)
460         if((h5 = transRead(myTrans, 20)) == NULL) {
461                 printf("Object not found\n");
462         }
463
464         transCommit(myTrans);
465
466         pthread_join(thread_Listen, NULL);
467
468         return 0;
469 }