void test_pop() { int i = 11111; char intstr[10]; sprintf(intstr, "%d", i); string uuid = string(intstr); //string uuid = getIp(); string result = "y"; int rc; while(result != "q") { cout << "UUID" << uuid << endl; try { rc = zc.pop(uuid, "q1", result); if (rc == 0) { i = i + 1; sprintf(intstr, "%d", i); uuid = string(intstr); printf("POP OK, rc(%d), value={%s}\n", rc, result.c_str()); } else sleep(10); } catch(...) { sleep(10); } } }
int main(int argc, char **argv) { extern char *optarg; int printHelp = 0, numThrds = 0; string zhtConf = ""; string neighborConf = ""; int c; while ((c = getopt(argc, argv, "z:n:t:h")) != -1) { switch (c) { case 'z': zhtConf = string(optarg); break; case 'n': neighborConf = string(optarg); break; case 't': numThrds = atoi(optarg); break; case 'h': printHelp = 1; break; default: fprintf(stderr, "Illegal argument \"%c\"\n", c); printUsage(argv[0]); exit(1); } } int helpPrinted = 0; if (printHelp) { printUsage(argv[0]); helpPrinted = 1; } try { if (!zhtConf.empty() && !neighborConf.empty() && numThrds != 0) { zc.init(zhtConf, neighborConf); cout << "Initializing Worker" << endl; string result; zc.push("temp", "test", "q1", result); zc.pop("xxxx", "q1", result); id = 1000; job_count = 1000; //test_insert(); //test_pop(); startWorker(numThrds); zc.teardown(); } else { if (!helpPrinted) printUsage(argv[0]); } } catch (exception& e) { fprintf(stderr, "%s, exception caught:\n\t%s", "ZHTServer::main", e.what()); } }
void startWorker(int numThrds) { int i, rc; char intstr[10]; pthread_t threads[numThrds]; string key, key1, result; key1 = getIp(); sprintf(intstr, "%d", id); key = string(intstr) + "." + key1; while (true) { try { if(threadCount < numThrds) { rc = zc.pop(key, "q1", result); if (rc == 0) { if ( result.c_str() != NULL && strlen(result.c_str()) > 0) { printf("POP OK, rc(%d), value={%s}\n", rc, result.c_str()); rc = pthread_create(&threads[threadCount], NULL, execTask, (void *)result.c_str()); if (rc) { cout << "Error:unable to create thread," << rc << endl; exit(-1); } threadCount = threadCount + 1; } } else { printf("POP ERR, rc(%d), value={%s}\n", rc, result.c_str()); if(strcmp(zht_key.c_str(),"xxx") != 0) { pthread_mutex_lock( &mutex1 ); sendResult(); zht_key = "xxx"; job_count = 1000; pthread_mutex_unlock( &mutex1 ); } else { job_count = 1000; sleep(5); } } } } catch(...) { sleep(5); } id = id + 1; sprintf(intstr, "%d", id); key = string(intstr) + "." + key1; } cout << "Worker completed" << endl; }