#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
+#include <assert.h>
#include <sys/time.h>
#include <getopt.h>
#include <pthread.h>
pairs_st *execute_pairs;
unsigned int execute_number;
test_type test;
- memcached_server_st *servers;
+ memcached_st *memc;
};
struct conclusions_st {
void options_parse(int argc, char *argv[]);
void conclusions_print(conclusions_st *conclusion);
void scheduler(memcached_server_st *servers, conclusions_st *conclusion);
-pairs_st *load_create_data(memcached_server_st *servers, unsigned int number_of,
- unsigned int *actual_loaded);
-void flush_all(memcached_server_st *servers);
+pairs_st *load_create_data(memcached_st *memc, unsigned int number_of,
+ unsigned int *actual_loaded);
+void flush_all(memcached_st *memc);
static int opt_verbose= 0;
static int opt_flush= 0;
if ((temp= getenv("MEMCACHED_SERVERS")))
opt_servers= strdup(temp);
else
+ {
+ fprintf(stderr, "No Servers provided\n");
exit(1);
+ }
}
servers= memcached_servers_parse(opt_servers);
void scheduler(memcached_server_st *servers, conclusions_st *conclusion)
{
unsigned int x;
- unsigned int actual_loaded;
+ unsigned int actual_loaded= 0; /* Fix warning */
+ memcached_st *memc;
struct timeval start_time, end_time;
pthread_t mainthread; /* Thread descriptor */
pthread_attr_setdetachstate(&attr,
PTHREAD_CREATE_DETACHED);
+ memc= memcached_create(NULL);
+ memcached_server_push(memc, servers);
+
if (opt_flush)
- flush_all(servers);
+ flush_all(memc);
if (opt_createial_load)
- pairs= load_create_data(servers, opt_createial_load, &actual_loaded);
+ pairs= load_create_data(memc, opt_createial_load, &actual_loaded);
+
+ /* We set this after we have loaded */
+ {
+ unsigned int value= 1;
+ if (opt_non_blocking_io)
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &value);
+ if (opt_tcp_nodelay)
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &value);
+ }
+
pthread_mutex_lock(&counter_mutex);
thread_counter= 0;
{
thread_context_st *context;
context= (thread_context_st *)malloc(sizeof(thread_context_st));
+ memset(context, 0, sizeof(thread_context_st));
- context->servers= servers;
+ context->memc= memcached_clone(NULL, memc);
context->test= opt_test;
context->initial_pairs= pairs;
if (opt_test == SET_TEST)
{
- context->execute_pairs= pairs_generate(opt_execute_number);
+ context->execute_pairs= pairs_generate(opt_execute_number, 400);
context->execute_number= opt_execute_number;
}
thread_context_st *context= (thread_context_st *)p;
memcached_st *memc;
- memc= memcached_create(NULL);
- if (opt_non_blocking_io)
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL );
- if (opt_tcp_nodelay)
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, NULL );
-
- memcached_server_push(memc, context->servers);
+ memc= context->memc;
pthread_mutex_lock(&sleeper_mutex);
while (master_wakeup)
break;
}
- pthread_mutex_lock(&counter_mutex);
- thread_counter--;
- pthread_cond_signal(&count_threshhold);
- pthread_mutex_unlock(&counter_mutex);
memcached_free(memc);
if (context->execute_pairs)
pairs_free(context->execute_pairs);
free(context);
+ pthread_mutex_lock(&counter_mutex);
+ thread_counter--;
+ pthread_cond_signal(&count_threshhold);
+ pthread_mutex_unlock(&counter_mutex);
+
return NULL;
}
-void flush_all(memcached_server_st *servers)
+void flush_all(memcached_st *memc)
{
- memcached_st *memc;
-
- memc= memcached_create(NULL);
-
- memcached_server_push(memc, servers);
-
memcached_flush(memc, 0);
-
- memcached_free(memc);
}
-pairs_st *load_create_data(memcached_server_st *servers, unsigned int number_of,
- unsigned int *actual_loaded)
+pairs_st *load_create_data(memcached_st *memc, unsigned int number_of,
+ unsigned int *actual_loaded)
{
- memcached_st *memc;
+ memcached_st *clone;
pairs_st *pairs;
- memc= memcached_create(NULL);
+ clone= memcached_clone(NULL, memc);
/* We always used non-blocking IO for load since it is faster */
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL );
- memcached_server_push(memc, servers);
+ memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL );
- pairs= pairs_generate(number_of);
- *actual_loaded= execute_set(memc, pairs, number_of);
+ pairs= pairs_generate(number_of, 400);
+ *actual_loaded= execute_set(clone, pairs, number_of);
- memcached_free(memc);
+ memcached_free(clone);
return pairs;
}