X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_task.c;h=7e7921fcf2b9b6cc44e17c84bfd39e1b5461c20f;hb=4db614a7b66e3a293b484f8d853b4f5892d2d1d8;hp=85e85331890bbc8a0bb59fb4d3b0f7610faf37af;hpb=88642cefb9f215ee7dd2be926af1e8fdbe64b963;p=awesomized%2Flibmemcached diff --git a/clients/ms_task.c b/clients/ms_task.c index 85e85331..7e7921fc 100644 --- a/clients/ms_task.c +++ b/clients/ms_task.c @@ -11,6 +11,18 @@ #include "config.h" +#include +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif + #include "ms_thread.h" #include "ms_setting.h" #include "ms_atomic.h" @@ -24,13 +36,11 @@ * item in the window. This factor shows it. */ -extern __thread ms_thread_t ms_thread; - /* get item from task window */ static ms_task_item_t *ms_get_cur_opt_item(ms_conn_t *c); static ms_task_item_t *ms_get_next_get_item(ms_conn_t *c); static ms_task_item_t *ms_get_next_set_item(ms_conn_t *c); -static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c); +static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c); /* select next operation to do */ @@ -44,7 +54,7 @@ static void ms_kick_out_item(ms_task_item_t *item); /* miss rate adjustment */ -static bool ms_need_overwirte_item(ms_task_t *task); +static bool ms_need_overwrite_item(ms_task_t *task); static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task); @@ -144,18 +154,10 @@ static ms_task_item_t *ms_get_next_set_item(ms_conn_t *c) * @return ms_task_item_t*, the pointer of the previous item of * set operation */ -static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c) +static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c) { - if (c->set_cursor <= 0) - { - return &c->item_win[0]; - } - else - { - return &c->item_win[(int64_t)-- c->set_cursor % c->win_size]; - } -} /* ms_get_pre_set_item */ - + return ms_get_next_get_item(c); +} /* ms_get_random_overwrite_item */ /** * According to the proportion of operations(get or set), select @@ -291,7 +293,7 @@ static void ms_kick_out_item(ms_task_item_t *item) * @return bool, if need overwrite, return true, else return * false */ -static bool ms_need_overwirte_item(ms_task_t *task) +static bool ms_need_overwrite_item(ms_task_t *task) { ms_task_item_t *item= task->item; @@ -345,7 +347,7 @@ static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task) /* If the current item is not a new item, kick it out */ if (item->value_offset != INVALID_OFFSET) { - if (ms_need_overwirte_item(task)) + if (ms_need_overwrite_item(task)) { /* overwrite */ task->overwrite_set++; @@ -359,17 +361,23 @@ static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task) else /* it's a new item */ { /* need overwrite */ - if (ms_need_overwirte_item(task)) + if (ms_need_overwrite_item(task)) { - item= ms_get_pre_set_item(c); + /** + * overwrite not use the item with current set cursor, revert + * set cursor. + */ + c->set_cursor--; + + item= ms_get_random_overwrite_item(c); if (item->value_offset != INVALID_OFFSET) { task->item= item; task->overwrite_set++; } - else /* previous set item is a new item */ + else /* item is a new item */ { - /* select the previous item to run, and cancel overwrite */ + /* select the item to run, and cancel overwrite */ task->item= item; } } @@ -571,7 +579,7 @@ static void ms_warmup_server(ms_conn_t *c) } else if (c->precmd.cmd == CMD_SET && c->precmd.retstat != MCD_STORED) { - printf("key: %lx didn't set success\n", item->key_prefix); + printf("key: %" PRIx64 " didn't set success\n", item->key_prefix); } } @@ -591,7 +599,7 @@ static void ms_warmup_server(ms_conn_t *c) */ if (c->remain_warmup_num == -1) { - ms_send_signal(&ms_global.init_lock); + ms_send_signal(&ms_global.warmup_lock); c->remain_warmup_num--; /* never run the if branch */ } } /* ms_warmup_server */ @@ -619,7 +627,7 @@ static void ms_single_getset_task_sch(ms_conn_t *c) else if (task->cmd == CMD_GET) { assert(task->cmd == CMD_GET); - ms_mcd_get(c, item, task->verify); + ms_mcd_get(c, item); } } } /* ms_single_getset_task_sch */ @@ -725,7 +733,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) /* update get miss counter */ if (mlget_item->get_miss) { - __sync_fetch_and_add(&ms_stats.get_misses, 1); + atomic_add_size(&ms_stats.get_misses, 1); } /* get nothing from server for this task item */ @@ -741,7 +749,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) if (curr_time.tv_sec - item->client_time < item->exp_time - EXPIRE_TIME_ERROR) { - __sync_fetch_and_add(&ms_stats.unexp_unget, 1); + atomic_add_size(&ms_stats.unexp_unget, 1); if (ms_setting.verbose) { @@ -755,7 +763,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) "\n\t<%d expire time verification failed, object " "doesn't expire but can't get it now\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\tset time: %s current time: %s " "diff time: %d expire time: %d\n" "\texpected data len: %d\n" @@ -779,13 +787,13 @@ static void ms_update_multi_get_result(ms_conn_t *c) } else { - __sync_fetch_and_add(&ms_stats.vef_miss, 1); + atomic_add_size(&ms_stats.vef_miss, 1); if (ms_setting.verbose) { fprintf(stderr, "\n<%d data verification failed\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\texpected data len: %d\n" "\texpected data: %.*s\n" "\treceived data: \n", @@ -829,7 +837,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) /* update get miss counter */ if ((c->precmd.cmd == CMD_GET) && c->curr_task.get_miss) { - __sync_fetch_and_add(&ms_stats.get_misses, 1); + atomic_add_size(&ms_stats.get_misses, 1); } /* get nothing from server for this task item */ @@ -846,7 +854,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) if (curr_time.tv_sec - item->client_time < item->exp_time - EXPIRE_TIME_ERROR) { - __sync_fetch_and_add(&ms_stats.unexp_unget, 1); + atomic_add_size(&ms_stats.unexp_unget, 1); if (ms_setting.verbose) { @@ -860,7 +868,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) "\n\t<%d expire time verification failed, object " "doesn't expire but can't get it now\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\tset time: %s current time: %s " "diff time: %d expire time: %d\n" "\texpected data len: %d\n" @@ -884,13 +892,13 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) } else { - __sync_fetch_and_add(&ms_stats.vef_miss, 1); + atomic_add_size(&ms_stats.vef_miss, 1); if (ms_setting.verbose) { fprintf(stderr, "\n<%d data verification failed\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\texpected data len: %d\n" "\texpected data: %.*s\n" "\treceived data: \n", @@ -1045,7 +1053,7 @@ static void ms_update_task_result(ms_conn_t *c) * * @param c, pointer of the concurrency * - * @return int, if success, return 0, else return -1 + * @return int, if success, return EXIT_SUCCESS, else return -1 */ static int ms_run_getset_task(ms_conn_t *c) { @@ -1077,7 +1085,7 @@ static int ms_run_getset_task(ms_conn_t *c) return -1; } - return 0; + return EXIT_SUCCESS; } /* ms_run_getset_task */ @@ -1086,7 +1094,7 @@ static int ms_run_getset_task(ms_conn_t *c) * * @param c, pointer of the concurrency * - * @return int, if success, return 0, else return -1 + * @return int, if success, return EXIT_SUCCESS, else return -1 */ int ms_exec_task(struct conn *c) { @@ -1102,5 +1110,5 @@ int ms_exec_task(struct conn *c) } } - return 0; + return EXIT_SUCCESS; } /* ms_exec_task */