recovery web crawler
[IRC.git] / Robust / src / Benchmarks / Spider / dsm / Spider.java
1 public class Spider {
2         public static void main(String[] args) {
3                 int NUM_THREADS = 4;
4                 int maxDepth = 5;
5                 int searchDepth = 10;
6                 int i, j;
7                 Work[] works;
8                 QueryThread[] qt;
9                 Query[] currentWorkList;
10
11                 NUM_THREADS = Integer.parseInt(args[0]);
12                 GlobalString firstmachine;
13                 GlobalString firstpage;
14
15 //              int[] mid = getMID(NUM_THREADS);
16                 int mid[] = new int[NUM_THREADS];
17 /*              mid[0] = (128<<24)|(195<<16)|(180<<8)|21;        //dc-4
18                 mid[1] = (128<<24)|(195<<16)|(180<<8)|24;        //dc-5
19                 mid[2] = (128<<24)|(195<<16)|(180<<8)|26;        //dc-6
20     */
21                 mid[0] = (128<<24)|(195<<16)|(136<<8)|162;       //dc-1
22                 mid[1] = (128<<24)|(195<<16)|(136<<8)|163;       //dc-2
23                 mid[2] = (128<<24)|(195<<16)|(136<<8)|164;       //dc-3
24                 mid[3] = (128<<24)|(195<<16)|(136<<8)|165;       //dc-3
25
26                 atomic {
27                         firstmachine = global new GlobalString(args[1]);
28                         firstpage = global new GlobalString(args[2]);
29
30                         works = global new Work[NUM_THREADS];
31                         qt = global new QueryThread[NUM_THREADS];
32                         currentWorkList = global new Query[NUM_THREADS];
33                         
34                         Query firstquery = global new Query(firstmachine, firstpage, 0);
35
36                         Queue todoList = global new Queue();
37                         Queue doneList = global new Queue();
38                         todoList.push(firstquery);
39
40                         for (i = 0; i < NUM_THREADS; i++) {
41                                 qt[i] = global new QueryThread(todoList, doneList, maxDepth, searchDepth);
42                                 works[i] = global new Work(qt[i], NUM_THREADS, i, currentWorkList);
43                         }
44                 }
45                 System.printString("Finished to create Objects\n");
46
47                 Work tmp;
48                 for (i = 0; i < NUM_THREADS; i++) {
49                         atomic {
50                                 tmp = works[i];
51                         }
52                         Thread.myStart(tmp, mid[i]);
53                 }
54
55                 for (i = 0; i < NUM_THREADS; i++) {
56                         atomic {
57                                 tmp = works[i];
58                         }
59                         tmp.join();
60                 }
61         }
62
63         public static int[] getMID (int num_threads) {
64                 int[] mid = new int[num_threads];
65
66                 FileInputStream ifs = new FileInputStream("dstm.conf");
67                 String str;
68                 String sub;
69                 int fromIndex;
70                 int endIndex;
71                 double num;
72
73                 for (int i = 0; i < num_threads; i++) { 
74                         int power = 3 - i;
75                         fromIndex = 0;
76                         num = 0;
77
78                         str = ifs.readLine();
79
80                         endIndex = str.indexOf('.', fromIndex);
81                         sub = str.subString(fromIndex, endIndex);
82                         num += (Integer.parseInt(sub) << 24);
83
84                         fromIndex = endIndex + 1;
85                         endIndex = str.indexOf('.', fromIndex);
86                         sub = str.subString(fromIndex, endIndex);
87                         num += (Integer.parseInt(sub) << 16);
88
89                         fromIndex = endIndex + 1;
90                         endIndex = str.indexOf('.', fromIndex);
91                         sub = str.subString(fromIndex, endIndex);
92                         num += (Integer.parseInt(sub) << 8);
93
94                         fromIndex = endIndex + 1;
95                         sub = str.subString(fromIndex);
96                         num += Integer.parseInt(sub);
97
98                         mid[i] = (int)num;
99                 }
100                 return mid;
101         }
102 }