~mingqiangzhuang/libmemcached/icc-memslap

« back to all changes in this revision

Viewing changes to clients/ms_task.c

  • Committer: Brian Aker
  • Date: 2010-01-19 04:59:05 UTC
  • mfrom: (753.1.1 libmemcached)
  • Revision ID: brian@gaz-20100119045905-e6vjp6lcp0b7bymi
Merge memslap

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
static ms_task_item_t *ms_get_cur_opt_item(ms_conn_t *c);
41
41
static ms_task_item_t *ms_get_next_get_item(ms_conn_t *c);
42
42
static ms_task_item_t *ms_get_next_set_item(ms_conn_t *c);
43
 
static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c);
 
43
static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c);
44
44
 
45
45
 
46
46
/* select next operation to do */
54
54
 
55
55
 
56
56
/* miss rate adjustment */
57
 
static bool ms_need_overwirte_item(ms_task_t *task);
 
57
static bool ms_need_overwrite_item(ms_task_t *task);
58
58
static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task);
59
59
 
60
60
 
154
154
 * @return ms_task_item_t*, the pointer of the previous item of
155
155
 *         set operation
156
156
 */
157
 
static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c)
 
157
static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c)
158
158
{
159
 
  if (c->set_cursor <= 0)
160
 
  {
161
 
    return &c->item_win[0];
162
 
  }
163
 
  else
164
 
  {
165
 
    return &c->item_win[(int64_t)-- c->set_cursor % c->win_size];
166
 
  }
167
 
} /* ms_get_pre_set_item */
168
 
 
 
159
    return ms_get_next_get_item(c);
 
160
} /* ms_get_random_overwrite_item */
169
161
 
170
162
/**
171
163
 * According to the proportion of operations(get or set), select
301
293
 * @return bool, if need overwrite, return true, else return
302
294
 *         false
303
295
 */
304
 
static bool ms_need_overwirte_item(ms_task_t *task)
 
296
static bool ms_need_overwrite_item(ms_task_t *task)
305
297
{
306
298
  ms_task_item_t *item= task->item;
307
299
 
355
347
    /* If the current item is not a new item, kick it out */
356
348
    if (item->value_offset != INVALID_OFFSET)
357
349
    {
358
 
      if (ms_need_overwirte_item(task))
 
350
      if (ms_need_overwrite_item(task))
359
351
      {
360
352
        /* overwrite */
361
353
        task->overwrite_set++;
369
361
    else            /* it's a new item */
370
362
    {
371
363
      /* need overwrite */
372
 
      if (ms_need_overwirte_item(task))
 
364
      if (ms_need_overwrite_item(task))
373
365
      {
374
 
        item= ms_get_pre_set_item(c);
 
366
        /**
 
367
         *  overwrite not use the item with current set cursor, revert
 
368
         *  set cursor.
 
369
         */
 
370
        c->set_cursor--;
 
371
 
 
372
        item= ms_get_random_overwrite_item(c);
375
373
        if (item->value_offset != INVALID_OFFSET)
376
374
        {
377
375
          task->item= item;
378
376
          task->overwrite_set++;
379
377
        }
380
 
        else                /* previous set item is a new item */
 
378
        else                /* item is a new item */
381
379
        {
382
 
          /* select the previous item to run, and cancel overwrite */
 
380
          /* select the item to run, and cancel overwrite */
383
381
          task->item= item;
384
382
        }
385
383
      }
601
599
   */
602
600
  if (c->remain_warmup_num == -1)
603
601
  {
604
 
    ms_send_signal(&ms_global.init_lock);
 
602
    ms_send_signal(&ms_global.warmup_lock);
605
603
    c->remain_warmup_num--;       /* never run the if branch */
606
604
  }
607
605
} /* ms_warmup_server */
629
627
    else if (task->cmd == CMD_GET)
630
628
    {
631
629
      assert(task->cmd == CMD_GET);
632
 
      ms_mcd_get(c, item, task->verify);
 
630
      ms_mcd_get(c, item);
633
631
    }
634
632
  }
635
633
} /* ms_single_getset_task_sch */