assert(!thread_id);
pthread_create(&thread_id, NULL, synthetic_client_thread_entry, this);
+ assert(thread_id);
}
int SyntheticClient::join_thread()
if (fd < 0) return fd;
for (int i=0; i<chunks; i++) {
- if (g_clock.gettimepair() > run_until) return 0;
+ if (g_clock.gettimepair() > run_until) break;
dout(2) << "writing block " << i << "/" << chunks << endl;
client->write(fd, buf, wrsize, i*wrsize);
}
if (fd < 0) return fd;
for (int i=0; i<chunks; i++) {
- if (g_clock.gettimepair() > run_until) return 0;
+ if (g_clock.gettimepair() > run_until) break;
dout(2) << "reading block " << i << "/" << chunks << endl;
client->read(fd, buf, rdsize, i*rdsize);
}
while (left > 0) {
left--;
- if (g_clock.gettimepair() > run_until) return 0;
+ if (g_clock.gettimepair() > run_until) break;
// ascend?
if (cwd.depth() && roll_die(.05)) {
op = MDS_OP_READDIR;
else {
r = client->open( get_random_sub(), O_RDWR );
- if (r > 0)
+ if (r > 0) {
+ assert(open_files.count(r) == 0);
open_files.insert(r);
+ }
}
}
}
dout(DBL) << "done" << endl;
+ return 0;
}
char **nargv = new pchar[argc];
nargv[nargc++] = argv[0];
- string syn_sarg1;
- int syn_mode = SYNCLIENT_MODE_WRITEFILE;
- int syn_iarg1, syn_iarg2, syn_iarg3;
+ list<int> syn_modes;
+ list<int> syn_iargs;
+ list<string> syn_sargs;
+
int mkfs = 0;
for (int i=1; i<argc; i++) {
if (strcmp(argv[i], "--fastmkfs") == 0) {
mkfs = MDS_MKFS_FULL;
}
- else if (strcmp(argv[i],"--synsarg1") == 0)
- syn_sarg1 = argv[++i];
- else if (strcmp(argv[i],"--syniarg1") == 0)
- syn_iarg1 = atoi(argv[++i]);
- else if (strcmp(argv[i],"--syniarg2") == 0)
- syn_iarg2 = atoi(argv[++i]);
- else if (strcmp(argv[i],"--syniarg3") == 0)
- syn_iarg3 = atoi(argv[++i]);
- else if (strcmp(argv[i],"--synmode") == 0) {
+ else if (strcmp(argv[i],"--syn") == 0) {
++i;
- if (strcmp(argv[i],"writefile") == 0)
- syn_mode = SYNCLIENT_MODE_WRITEFILE;
- else if (strcmp(argv[i],"makedirs") == 0)
- syn_mode = SYNCLIENT_MODE_MAKEDIRS;
- else if (strcmp(argv[i],"fullwalk") == 0)
- syn_mode = SYNCLIENT_MODE_FULLWALK;
- else if (strcmp(argv[i],"randomwalk") == 0)
- syn_mode = SYNCLIENT_MODE_RANDOMWALK;
- else {
+ if (strcmp(argv[i],"writefile") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_WRITEFILE );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ } else if (strcmp(argv[i],"readfile") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_READFILE );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ } else if (strcmp(argv[i],"makedirs") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_MAKEDIRS );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ } else if (strcmp(argv[i],"fullwalk") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_FULLWALK );
+ //syn_sargs.push_back( atoi(argv[++i]) );
+ } else if (strcmp(argv[i],"randomwalk") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_RANDOMWALK );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ } else if (strcmp(argv[i],"until") == 0) {
+ syn_modes.push_back( SYNCLIENT_MODE_UNTIL );
+ syn_iargs.push_back( atoi(argv[++i]) );
+ } else {
cerr << "unknown syn mode " << argv[i] << endl;
return -1;
}
//cout << "starting synthetic client " << endl;
syn[i] = new SyntheticClient(client[i]);
- char s[20];
- sprintf(s,"syn.%d", i);
- syn[i]->sarg1 = s;
-
- syn[i]->mode = syn_mode;
- syn[i]->iarg1 = syn_iarg1;
- syn[i]->iarg2 = syn_iarg2;
- syn[i]->iarg3 = syn_iarg3;
-
+ syn[i]->modes = syn_modes;
+ syn[i]->sargs = syn_sargs;
+ syn[i]->iargs = syn_iargs;
syn[i]->start_thread();
}
for (int i=0; i<NUMCLIENT; i++) {