#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
+#include <sys/time.h>
#include <getopt.h>
#include <memcached.h>
#include "client_options.h"
#include "utilities.h"
+#include "generator.h"
-/* Use this for string generation */
-static const char ALPHANUMERICS[]=
- "0123456789ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstuvwxyz";
-
-#define ALPHANUMERICS_SIZE (sizeof(ALPHANUMERICS)-1)
-
/* Types */
-typedef struct pairs_st pairs_st;
+typedef struct conclusions_st conclusions_st;
-struct pairs_st {
- char *key;
- size_t key_length;
- char *value;
- size_t value_length;
+struct conclusions_st {
+ long int load_time;
+ long int read_time;
+ unsigned int rows_loaded;
+ unsigned int rows_read;
};
/* Prototypes */
void options_parse(int argc, char *argv[]);
-static pairs_st *pairs_generate(void);
-static void pairs_free(pairs_st *pairs);
-static void get_random_string(char *buffer, size_t size);
+void conclusions_print(conclusions_st *conclusion);
static int opt_verbose= 0;
-static int opt_default_pairs= 100;
+static unsigned int opt_default_pairs= 100;
static int opt_displayflag= 0;
static char *opt_servers= NULL;
unsigned int x;
memcached_return rc;
memcached_st *memc;
+ struct timeval start_time, end_time;
pairs_st *pairs;
+ conclusions_st conclusion;
+
+ memset(&conclusion, 0, sizeof(conclusions_st));
srandom(time(NULL));
memc= memcached_init(NULL);
parse_opt_servers(memc, opt_servers);
- pairs= pairs_generate();
+ pairs= pairs_generate(opt_default_pairs);
+ gettimeofday(&start_time, NULL);
for (x= 0; x < opt_default_pairs; x++)
{
- printf("Key(%u) %.10s \t%.10s\n", x, pairs[x].key, pairs[x].value);
rc= memcached_set(memc, pairs[x].key, pairs[x].key_length,
pairs[x].value, pairs[x].value_length,
0, 0);
if (rc != MEMCACHED_SUCCESS)
fprintf(stderr, "Failured on insert of %.*s\n",
(unsigned int)pairs[x].key_length, pairs[x].key);
+ conclusion.rows_loaded++;
}
+ gettimeofday(&end_time, NULL);
+ conclusion.load_time= timedif(end_time, start_time);
+ gettimeofday(&start_time, NULL);
for (x= 0; x < opt_default_pairs; x++)
{
- printf("Key(%u) %.10s \n", x, pairs[x].key);
char *value;
size_t value_length;
uint16_t flags;
&value_length,
&flags, &rc);
- WATCHPOINT_ERROR(rc);
if (rc != MEMCACHED_SUCCESS)
fprintf(stderr, "Failured on read of %.*s\n",
(unsigned int)pairs[x].key_length, pairs[x].key);
- printf("\t%.10s\n", value);
+ conclusion.rows_read++;
free(value);
}
+ gettimeofday(&end_time, NULL);
+ conclusion.read_time= timedif(end_time, start_time);
pairs_free(pairs);
memcached_deinit(memc);
+ conclusions_print(&conclusion);
+
return 0;
}
}
}
-static void pairs_free(pairs_st *pairs)
-{
- unsigned int x;
-
- for (x= 0; x < opt_default_pairs; x++)
- {
- free(pairs[x].key);
- free(pairs[x].value);
- }
-
- free(pairs);
-}
-
-static pairs_st *pairs_generate(void)
+void conclusions_print(conclusions_st *conclusion)
{
- unsigned int x;
- pairs_st *pairs;
-
- pairs= (pairs_st*)malloc(sizeof(pairs_st) * opt_default_pairs);
-
- if (!pairs)
- goto error;
-
- for (x= 0; x < opt_default_pairs; x++)
- {
- pairs[x].key= (char *)malloc(sizeof(char) * 100);
- if (!pairs[x].key)
- goto error;
- get_random_string(pairs[x].key, 100);
- pairs[x].key_length= 100;
-
- pairs[x].value= (char *)malloc(sizeof(char) * 400);
- if (!pairs[x].value)
- goto error;
- get_random_string(pairs[x].value, 400);
- pairs[x].value_length= 400;
- }
-
- return pairs;
-error:
- fprintf(stderr, "Memory Allocation failure in pairs_generate.\n");
- exit(0);
-}
-
-static void get_random_string(char *buffer, size_t size)
-{
- char *buffer_ptr= buffer;
-
- while (--size)
- *buffer_ptr++= ALPHANUMERICS[random() % ALPHANUMERICS_SIZE];
- *buffer_ptr++= ALPHANUMERICS[random() % ALPHANUMERICS_SIZE];
+ printf("\tLoaded %u rows\n", conclusion->rows_loaded);
+ printf("\tRead %u rows\n", conclusion->rows_read);
+ printf("\tTook %ld.%03ld seconds to load data\n", conclusion->load_time / 1000,
+ conclusion->load_time % 1000);
+ printf("\tTook %ld.%03ld seconds to read data\n", conclusion->read_time / 1000,
+ conclusion->read_time % 1000);
}