1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package jgroup.test.performance.upgrade;
20
21 import java.util.Date;
22
23 import jgroup.core.ConfigManager;
24 import jgroup.core.registry.DependableRegistry;
25 import jgroup.core.registry.RegistryFactory;
26 import jgroup.relacs.config.AppConfig;
27 import jgroup.test.performance.SpeedTest;
28 import jgroup.upgrade.UpgradeManagementClient;
29
30 import org.apache.log4j.Logger;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class SimpleUpgradeTestSuite
55 {
56
57
58
59 private static Logger log = Logger.getLogger(SimpleUpgradeTestSuite.class);
60 private static SimpleUpgradeTestSuite instance = null;
61 private boolean verbose;
62 private int method;
63 private int calibReqCallNo;
64 private int rps;
65 private int expTime;
66 private int cycles;
67 private int upgrade_cycle;
68 private int client_no;
69 private String serverName;
70 private SpeedTest server;
71 private float avRT[];
72 private long startCycleTime[];
73
74 private static final long TIME_UNIT = 1000;
75
76 public static void main(String[] argv) throws Exception
77 {
78 ConfigManager.init();
79 if (instance == null)
80 instance = new SimpleUpgradeTestSuite(argv);
81 }
82
83 public SimpleUpgradeTestSuite(String argv[]) throws Exception {
84 if( argv.length <1 ) help();
85 verbose = PUtil.getSwitch(argv, "-v");
86 method = PUtil.getIntParameter(argv, "-method", "1");
87 calibReqCallNo = PUtil.getIntParameter(argv, "-calibrate", "10");
88 rps = PUtil.getIntParameter(argv, "-rate", "1");
89 expTime = PUtil.getIntParameter(argv, "-time", "10");
90 cycles = PUtil.getIntParameter(argv, "-cycles", "1");
91 upgrade_cycle = PUtil.getIntParameter(argv, "-upgradeStart", "-1");
92 client_no = PUtil.getIntParameter(argv, "-clients", "1");
93 serverName = PUtil.getStringParameter(argv, "-server", "UpgradeServer");
94
95 String cl_name = "jgroup.test.performance." + serverName;
96 int rep_lvl = 0;
97 ConfigManager.init();
98 rep_lvl = AppConfig.getApplication(cl_name).getInitialRedundancy();
99
100 ClientThreadPool client[] = new ClientThreadPool[client_no];
101
102 int times = expTime*rps;
103 DependableRegistry reg = RegistryFactory.getRegistry();
104 server = (SpeedTest) reg.lookup(serverName);
105 int call_no = 0;
106
107 avRT = new float[cycles+1];
108 startCycleTime = new long[cycles+1];
109 SimpleTestThread testRun = new SimpleTestThread(Thread.currentThread());
110 float allowedDelay = 1.20f;
111 testRun.start();
112 long expStartTime = System.currentTimeMillis();
113 long expEndTime = expStartTime + expTime*cycles*TIME_UNIT;
114 boolean terminated_ok = false;
115 System.out.println("Test started. Should be fininshed in " + expTime*cycles + "sec.");
116 try { Thread.sleep((long)(expTime*cycles*allowedDelay*TIME_UNIT)); }
117 catch (InterruptedException e) {
118 terminated_ok = true;
119 }
120
121
122
123
124
125
126
127 if( verbose ) {
128 expEndTime = System.currentTimeMillis();
129 String date = new Date(expStartTime).toString();
130 log.info("R" + rep_lvl + " m" + method + " r" + rps) ;
131 log.info("#Experiment started at: " + new Date(expStartTime));
132 String term_mesg = terminated_ok ? " ok" : " not ok";
133 log.info("#Experiment terminated at: " + new Date(expEndTime) + term_mesg);
134 log.info("#Testing suite with the following parameters: ");
135 log.info("#Server name: \t"+ serverName);
136 log.info("#Server replication level: \t"+ rep_lvl);
137 log.info("#Number of calibration calls:\t" + calibReqCallNo);
138 log.info("#Test method: \t" + method);
139 log.info("#Request rate per sec: \t" + rps);
140 log.info("#Cycle time: \t" + expTime);
141 log.info("#Cycles number: \t"+ cycles);
142 log.info("#Staring upgrade at cycle: \t" + upgrade_cycle);
143 }
144
145 StringBuilder header = new StringBuilder("#Cycle\tT0\tdT");
146 for(int i=0; i< client_no; i++)
147 header.append("\t" + "RT[" + i +"]");
148 log.info(header);
149
150 for(int j=1; j< testRun.getLastCycleTerminated(); j++) {
151 long T0 = startCycleTime[j];
152 long dT = j>1 ? T0-startCycleTime[j-1] : 0;
153 StringBuilder line = new StringBuilder(""+j + "\t" + T0 + "\t" + dT);
154 for(int i=0; i< client_no; i++)
155 line.append("\t" + avRT[j]);
156 log.info(line);
157 }
158
159
160
161 System.exit(0);
162
163 }
164
165
166
167 static void help() {
168 System.out.println("SimpleUpgradeTestSuite [-v][-method M][-calibrate C][-rate R][-time T][cycles Y][-clientsi N][-upgradeStart U][-server ServerName]");
169 }
170
171 class SimpleTestThread extends Thread {
172 private Thread mainThread;
173 private int j=1;
174 private UpgradeStart upgradeT;
175
176 private UpgradeClientTest test;
177 public int getLastCycleTerminated() { return j-1; }
178
179
180 SimpleTestThread(Thread t) {
181
182 upgradeT = new UpgradeStart();
183 mainThread= t;
184
185 test = new UpgradeClientTest(server);
186 avRT[0] = test.calibrate(method, calibReqCallNo);
187 }
188
189 public void run() {
190
191 runTest(cycles, rps, expTime*rps);
192 mainThread.interrupt();
193 }
194
195 private void runTest(int cycles, int rps, int times) {
196 for(j=1; j<= cycles; j++) {
197 startCycleTime[j] = System.currentTimeMillis();
198 avRT[j] = test.generate_traffic(rps, times);
199 if(j == upgrade_cycle ) { upgradeT.start(); System.out.println("upgrade started at cycle" + j);}
200 if(j%5==0) System.out.println("Cycles done: " + j +" out of " + cycles);
201 }
202 }
203 }
204
205
206 class UpgradeStart extends Thread {
207 String argv[] = new String[] {"u"};
208 public void run(){
209 try { UpgradeManagementClient.main(argv);
210 } catch(Exception e) {log.error("Exception in main", e);}
211
212 }
213
214
215 }
216
217
218 }