-add_library(libclient_common STATIC utilities.cc generator.cc execute.cc)
+add_library(libclient_common STATIC utilities.cc generator.cc)
add_library(client_common ALIAS libclient_common)
target_link_libraries(libclient_common PUBLIC libmemcached)
target_include_directories(libclient_common PUBLIC
+++ /dev/null
-/*
- +--------------------------------------------------------------------+
- | libmemcached - C/C++ Client Library for memcached |
- +--------------------------------------------------------------------+
- | Redistribution and use in source and binary forms, with or without |
- | modification, are permitted under the terms of the BSD license. |
- | You should have received a copy of the license in a bundled file |
- | named LICENSE; in case you did not receive a copy you can review |
- | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
- +--------------------------------------------------------------------+
- | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
- | Copyright (c) 2020 Michael Wallner <mike@php.net> |
- +--------------------------------------------------------------------+
-*/
-
-#include "mem_config.h"
-#include "execute.h"
-
-unsigned int execute_set(memcached_st *memc, pairs_st *pairs, unsigned int number_of) {
- uint32_t count = 0;
- for (; count < number_of; ++count) {
- memcached_return_t rc = memcached_set(memc, pairs[count].key, pairs[count].key_length,
- pairs[count].value, pairs[count].value_length, 0, 0);
- if (memcached_failed(rc)) {
- fprintf(stderr, "%s:%d Failure on %u insert (%s) of %.*s\n", __FILE__, __LINE__, count,
- memcached_last_error_message(memc), (unsigned int) pairs[count].key_length,
- pairs[count].key);
-
- // We will try to reconnect and see if that fixes the issue
- memcached_quit(memc);
-
- return count;
- }
- }
-
- return count;
-}
-
-/*
- Execute a memcached_get() on a set of pairs.
- Return the number of rows retrieved.
-*/
-unsigned int execute_get(memcached_st *memc, pairs_st *pairs, unsigned int number_of) {
- unsigned int x;
- unsigned int retrieved;
-
- for (retrieved = 0, x = 0; x < number_of; x++) {
- size_t value_length;
- uint32_t flags;
-
- unsigned int fetch_key = (unsigned int) ((unsigned int) random() % number_of);
-
- memcached_return_t rc;
- char *value = memcached_get(memc, pairs[fetch_key].key, pairs[fetch_key].key_length,
- &value_length, &flags, &rc);
-
- if (memcached_failed(rc)) {
- fprintf(stderr, "%s:%d Failure on read(%s) of %.*s\n", __FILE__, __LINE__,
- memcached_last_error_message(memc), (unsigned int) pairs[fetch_key].key_length,
- pairs[fetch_key].key);
- } else {
- retrieved++;
- }
-
- ::free(value);
- }
-
- return retrieved;
-}
-
-/**
- * Callback function to count the number of results
- */
-static memcached_return_t callback_counter(const memcached_st *ptr, memcached_result_st *result,
- void *context) {
- (void) ptr;
- (void) result;
- unsigned int *counter = (unsigned int *) context;
- *counter = *counter + 1;
-
- return MEMCACHED_SUCCESS;
-}
-
-/**
- * Try to run a large mget to get all of the keys
- * @param memc memcached handle
- * @param keys the keys to get
- * @param key_length the length of the keys
- * @param number_of the number of keys to try to get
- * @return the number of keys received
- */
-unsigned int execute_mget(memcached_st *memc, const char *const *keys, size_t *key_length,
- unsigned int number_of) {
- unsigned int retrieved = 0;
- memcached_execute_fn callbacks[] = {callback_counter};
- memcached_return_t rc;
- rc = memcached_mget_execute(memc, keys, key_length, (size_t) number_of, callbacks, &retrieved, 1);
-
- if (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_NOTFOUND || rc == MEMCACHED_BUFFERED
- || rc == MEMCACHED_END)
- {
- rc = memcached_fetch_execute(memc, callbacks, (void *) &retrieved, 1);
- if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_END) {
- fprintf(stderr, "%s:%d Failed to execute mget: %s\n", __FILE__, __LINE__,
- memcached_strerror(memc, rc));
- memcached_quit(memc);
- return 0;
- }
- } else {
- fprintf(stderr, "%s:%d Failed to execute mget: %s\n", __FILE__, __LINE__,
- memcached_strerror(memc, rc));
- memcached_quit(memc);
- return 0;
- }
-
- return retrieved;
-}
+++ /dev/null
-/*
- +--------------------------------------------------------------------+
- | libmemcached - C/C++ Client Library for memcached |
- +--------------------------------------------------------------------+
- | Redistribution and use in source and binary forms, with or without |
- | modification, are permitted under the terms of the BSD license. |
- | You should have received a copy of the license in a bundled file |
- | named LICENSE; in case you did not receive a copy you can review |
- | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
- +--------------------------------------------------------------------+
- | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
- | Copyright (c) 2020 Michael Wallner <mike@php.net> |
- +--------------------------------------------------------------------+
-*/
-
-#pragma once
-
-#include <stdio.h>
-
-#include "libmemcached-1.0/memcached.h"
-#include "generator.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-unsigned int execute_set(memcached_st *memc, pairs_st *pairs, unsigned int number_of);
-unsigned int execute_get(memcached_st *memc, pairs_st *pairs, unsigned int number_of);
-unsigned int execute_mget(memcached_st *memc, const char *const *keys, size_t *key_length,
- unsigned int number_of);
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
#include "client_options.h"
#include "utilities.h"
#include "generator.h"
-#include "execute.h"
#define DEFAULT_INITIAL_LOAD 10000
#define DEFAULT_EXECUTE_NUMBER 10000
static bool opt_udp_io = false;
test_t opt_test = SET_TEST;
+
+unsigned int execute_set(memcached_st *memc, pairs_st *pairs, unsigned int number_of) {
+ uint32_t count = 0;
+ for (; count < number_of; ++count) {
+ memcached_return_t rc = memcached_set(memc, pairs[count].key, pairs[count].key_length,
+ pairs[count].value, pairs[count].value_length, 0, 0);
+ if (memcached_failed(rc)) {
+ fprintf(stderr, "%s:%d Failure on %u insert (%s) of %.*s\n", __FILE__, __LINE__, count,
+ memcached_last_error_message(memc), (unsigned int) pairs[count].key_length,
+ pairs[count].key);
+
+ // We will try to reconnect and see if that fixes the issue
+ memcached_quit(memc);
+
+ return count;
+ }
+ }
+
+ return count;
+}
+
+/*
+ Execute a memcached_get() on a set of pairs.
+ Return the number of rows retrieved.
+*/
+static unsigned int execute_get(memcached_st *memc, pairs_st *pairs, unsigned int number_of) {
+ unsigned int x;
+ unsigned int retrieved;
+
+ for (retrieved = 0, x = 0; x < number_of; x++) {
+ size_t value_length;
+ uint32_t flags;
+
+ unsigned int fetch_key = (unsigned int) ((unsigned int) random() % number_of);
+
+ memcached_return_t rc;
+ char *value = memcached_get(memc, pairs[fetch_key].key, pairs[fetch_key].key_length,
+ &value_length, &flags, &rc);
+
+ if (memcached_failed(rc)) {
+ fprintf(stderr, "%s:%d Failure on read(%s) of %.*s\n", __FILE__, __LINE__,
+ memcached_last_error_message(memc), (unsigned int) pairs[fetch_key].key_length,
+ pairs[fetch_key].key);
+ } else {
+ retrieved++;
+ }
+
+ ::free(value);
+ }
+
+ return retrieved;
+}
+
+/**
+ * Callback function to count the number of results
+ */
+static memcached_return_t callback_counter(const memcached_st *ptr, memcached_result_st *result,
+ void *context) {
+ (void) ptr;
+ (void) result;
+ unsigned int *counter = (unsigned int *) context;
+ *counter = *counter + 1;
+
+ return MEMCACHED_SUCCESS;
+}
+
+/**
+ * Try to run a large mget to get all of the keys
+ * @param memc memcached handle
+ * @param keys the keys to get
+ * @param key_length the length of the keys
+ * @param number_of the number of keys to try to get
+ * @return the number of keys received
+ */
+static unsigned int execute_mget(memcached_st *memc, const char *const *keys, size_t *key_length,
+ unsigned int number_of) {
+ unsigned int retrieved = 0;
+ memcached_execute_fn callbacks[] = {callback_counter};
+ memcached_return_t rc;
+ rc = memcached_mget_execute(memc, keys, key_length, (size_t) number_of, callbacks, &retrieved, 1);
+
+ if (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_NOTFOUND || rc == MEMCACHED_BUFFERED
+ || rc == MEMCACHED_END)
+ {
+ rc = memcached_fetch_execute(memc, callbacks, (void *) &retrieved, 1);
+ if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_END) {
+ fprintf(stderr, "%s:%d Failed to execute mget: %s\n", __FILE__, __LINE__,
+ memcached_strerror(memc, rc));
+ memcached_quit(memc);
+ return 0;
+ }
+ } else {
+ fprintf(stderr, "%s:%d Failed to execute mget: %s\n", __FILE__, __LINE__,
+ memcached_strerror(memc, rc));
+ memcached_quit(memc);
+ return 0;
+ }
+
+ return retrieved;
+}
+
extern "C" {
static __attribute__((noreturn)) void *run_task(void *p) {
case MGET_TEST:
execute_mget(context->memc, (const char *const *) context->keys, context->key_lengths,
- context->initial_number);
+ context->initial_number);
break;
}
pthread_exit(0);
}
-}
+
+} // extern "C"
+
int main(int argc, char *argv[]) {
conclusions_st conclusion;