#include "config.h"
+#include <inttypes.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
#include "ms_thread.h"
#include "ms_setting.h"
#include "ms_atomic.h"
* 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 */
/* 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);
* @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
* @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;
/* 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++;
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;
}
}
}
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);
}
}
*/
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 */
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 */
/* update get miss counter */
if (mlget_item->get_miss)
{
- atomic_add_64(&ms_stats.get_misses, 1);
+ atomic_add_size(&ms_stats.get_misses, 1);
}
/* get nothing from server for this task item */
if (curr_time.tv_sec - item->client_time
< item->exp_time - EXPIRE_TIME_ERROR)
{
- atomic_add_64(&ms_stats.unexp_unget, 1);
+ atomic_add_size(&ms_stats.unexp_unget, 1);
if (ms_setting.verbose)
{
"\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"
}
else
{
- atomic_add_64(&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",
/* update get miss counter */
if ((c->precmd.cmd == CMD_GET) && c->curr_task.get_miss)
{
- atomic_add_64(&ms_stats.get_misses, 1);
+ atomic_add_size(&ms_stats.get_misses, 1);
}
/* get nothing from server for this task item */
if (curr_time.tv_sec - item->client_time
< item->exp_time - EXPIRE_TIME_ERROR)
{
- atomic_add_64(&ms_stats.unexp_unget, 1);
+ atomic_add_size(&ms_stats.unexp_unget, 1);
if (ms_setting.verbose)
{
"\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"
}
else
{
- atomic_add_64(&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",