summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c')
-rw-r--r--src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c283
1 files changed, 283 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c b/src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c
new file mode 100644
index 00000000000..4ec213c85ea
--- /dev/null
+++ b/src/third_party/wiredtiger/test/csuite/wt2719_reconfig/main.c
@@ -0,0 +1,283 @@
+/*-
+ * Public Domain 2014-2016 MongoDB, Inc.
+ * Public Domain 2008-2014 WiredTiger, Inc.
+ *
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ *
+ * In jurisdictions that recognize copyright laws, the author or authors
+ * of this software dedicate any and all copyright interest in the
+ * software to the public domain. We make this dedication for the benefit
+ * of the public at large and to the detriment of our heirs and
+ * successors. We intend this dedication to be an overt act of
+ * relinquishment in perpetuity of all present and future rights to this
+ * software under copyright law.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include "test_util.h"
+
+/*
+ * JIRA ticket reference: WT-2719
+ * Test case description: Fuzz testing for WiredTiger reconfiguration.
+ */
+
+void (*custom_die)(void) = NULL;
+
+static const char *list[] = {
+ ",async=(enabled=0)",
+ ",async=(enabled=1)",
+ ",async=(ops_max=2048)",
+ ",async=(ops_max=2348)",
+ ",async=(ops_max=1790)",
+ ",async=(threads=10)",
+ ",async=(threads=7)",
+ ",async=(threads=17)",
+
+ ",cache_overhead=13",
+ ",cache_overhead=27",
+ ",cache_overhead=8",
+
+ ",cache_size=75MB",
+ ",cache_size=214MB",
+ ",cache_size=37MB",
+
+ ",checkpoint=(log_size=104857600)", /* 100MB */
+ ",checkpoint=(log_size=1073741824)", /* 1GB */
+ ",checkpoint=(log_size=2)",
+ ",checkpoint=(log_size=0)",
+ ",checkpoint=(wait=100)",
+ ",checkpoint=(wait=10000)",
+ ",checkpoint=(wait=2)",
+ ",checkpoint=(wait=0)",
+
+ ",error_prefix=\"prefix\"",
+
+ ",eviction=(threads_min=7,threads_max=10)",
+ ",eviction=(threads_min=17,threads_max=18)",
+ ",eviction=(threads_min=3,threads_max=7)",
+ ",eviction=(threads_max=12,threads_min=10)",
+ ",eviction=(threads_max=18,threads_min=16)",
+ ",eviction=(threads_max=10,threads_min=9)",
+
+ ",eviction_dirty_target=45",
+ ",eviction_dirty_target=87",
+ ",eviction_dirty_target=8",
+
+ ",eviction_dirty_trigger=37",
+ ",eviction_dirty_trigger=98",
+ ",eviction_dirty_trigger=7",
+
+ ",eviction_target=22",
+ ",eviction_target=84",
+ ",eviction_target=30",
+
+ ",eviction_trigger=75",
+ ",eviction_trigger=95",
+ ",eviction_trigger=66",
+
+ ",file_manager=(close_handle_minimum=200)",
+ ",file_manager=(close_handle_minimum=137)",
+ ",file_manager=(close_handle_minimum=226)",
+ ",file_manager=(close_idle_time=10000)",
+ ",file_manager=(close_idle_time=12000)",
+ ",file_manager=(close_idle_time=7)",
+ ",file_manager=(close_idle_time=0)",
+ ",file_manager=(close_scan_interval=50000)",
+ ",file_manager=(close_scan_interval=59000)",
+ ",file_manager=(close_scan_interval=3)",
+
+ ",log=(archive=0)",
+ ",log=(archive=1)",
+ ",log=(prealloc=0)",
+ ",log=(prealloc=1)",
+ ",log=(zero_fill=0)",
+ ",log=(zero_fill=1)",
+
+ ",lsm_manager=(merge=0)",
+ ",lsm_manager=(merge=1)",
+ ",lsm_manager=(worker_thread_max=5)",
+ ",lsm_manager=(worker_thread_max=18)",
+ ",lsm_manager=(worker_thread_max=3)",
+
+ ",shared_cache=(chunk=20MB)",
+ ",shared_cache=(chunk=30MB)",
+ ",shared_cache=(chunk=5MB)",
+ ",shared_cache=(name=\"shared\")",
+ ",shared_cache=(name=\"none\")",
+ ",shared_cache=(quota=20MB)",
+ ",shared_cache=(quota=30MB)",
+ ",shared_cache=(quota=5MB)",
+ ",shared_cache=(quota=0)",
+ ",shared_cache=(reserve=20MB)",
+ ",shared_cache=(reserve=30MB)",
+ ",shared_cache=(reserve=5MB)",
+ ",shared_cache=(reserve=0)",
+ ",shared_cache=(size=100MB)",
+ ",shared_cache=(size=1GB)",
+ ",shared_cache=(size=75MB)",
+
+ ",statistics=(\"all\")",
+ ",statistics=(\"fast\")",
+ ",statistics=(\"none\")",
+ ",statistics=(\"clear\")",
+
+ ",statistics_log=(json=0)",
+ ",statistics_log=(json=1)",
+ ",statistics_log=(on_close=0)",
+ ",statistics_log=(on_close=1)",
+ ",statistics_log=(sources=(\"file:\"))",
+ ",statistics_log=(sources=())",
+ ",statistics_log=(timestamp=\"%b:%S\")",
+ ",statistics_log=(timestamp=\"%H:%M\")",
+ ",statistics_log=(wait=60)",
+ ",statistics_log=(wait=76)",
+ ",statistics_log=(wait=37)",
+ ",statistics_log=(wait=0)",
+
+#ifdef HAVE_VERBOSE
+ ",verbose=(\"api\")",
+ ",verbose=(\"block\")",
+ ",verbose=(\"checkpoint\")",
+ ",verbose=(\"compact\")",
+ ",verbose=(\"evict\")",
+ ",verbose=(\"evictserver\")",
+ ",verbose=(\"fileops\")",
+ ",verbose=(\"handleops\")",
+ ",verbose=(\"log\")",
+ ",verbose=(\"lsm\")",
+ ",verbose=(\"lsm_manager\")",
+ ",verbose=(\"metadata\")",
+ ",verbose=(\"mutex\")",
+ ",verbose=(\"overflow\")",
+ ",verbose=(\"read\")",
+ ",verbose=(\"rebalance\")",
+ ",verbose=(\"reconcile\")",
+ ",verbose=(\"recovery\")",
+ ",verbose=(\"salvage\")",
+ ",verbose=(\"shared_cache\")",
+ ",verbose=(\"split\")",
+ ",verbose=(\"temporary\")",
+ ",verbose=(\"transaction\")",
+ ",verbose=(\"verify\")",
+ ",verbose=(\"version\")",
+ ",verbose=(\"write\")",
+ ",verbose=()"
+#endif
+};
+
+static int
+handle_message(WT_EVENT_HANDLER *handler,
+ WT_SESSION *session, const char *message)
+{
+ (void)(handler);
+ (void)(session);
+ (void)(message);
+
+ /* We configure verbose output, so just ignore. */
+ return (0);
+}
+
+static WT_EVENT_HANDLER event_handler = { NULL, handle_message, NULL, NULL };
+
+int
+main(int argc, char *argv[])
+{
+ enum { CACHE_SHARED, CACHE_SET, CACHE_NONE } cache;
+ TEST_OPTS *opts, _opts;
+ WT_RAND_STATE rnd;
+ WT_SESSION *session;
+ size_t len;
+ u_int i, j;
+ int ret;
+ const char *p;
+ char *config;
+
+ opts = &_opts;
+ memset(opts, 0, sizeof(*opts));
+ opts->table_type = TABLE_ROW;
+ testutil_check(testutil_parse_opts(argc, argv, opts));
+ testutil_make_work_dir(opts->home);
+
+ testutil_check(
+ wiredtiger_open(opts->home, &event_handler, "create", &opts->conn));
+
+ /* Open an LSM file so the LSM reconfiguration options make sense. */
+ testutil_check(
+ opts->conn->open_session(opts->conn, NULL, NULL, &session));
+ testutil_check(session->create(
+ session, opts->uri, "type=lsm,key_format=S,value_format=S"));
+
+ /* Initialize the RNG. */
+ testutil_check(__wt_random_init_seed(NULL, &rnd));
+
+ /* Allocate memory for the config. */
+ len = WT_ELEMENTS(list) * 64;
+ config = dmalloc(len);
+
+ /* A linear pass through the list. */
+ for (i = 0; i < WT_ELEMENTS(list); ++i)
+ if ((ret = opts->conn->reconfigure(opts->conn, list[i])) != 0) {
+ fprintf(stderr, "%s: %s\n",
+ list[i], session->strerror(session, ret));
+ return (EXIT_FAILURE);
+ }
+
+ /*
+ * A linear pass through the list, adding random elements.
+ *
+ * WiredTiger configurations are usually "the last one set wins", but
+ * "shared_cache" and "cache_set" options aren't allowed in the same
+ * configuration string.
+ */
+ for (i = 0; i < WT_ELEMENTS(list); ++i) {
+ p = list[i];
+ cache = CACHE_NONE;
+ if (WT_PREFIX_MATCH(p, ",shared_cache"))
+ cache = CACHE_SHARED;
+ else if (WT_PREFIX_MATCH(p, ",cache_size"))
+ cache = CACHE_SET;
+ strcpy(config, p);
+
+ for (j =
+ (__wt_random(&rnd) % WT_ELEMENTS(list)) + 1; j > 0; --j) {
+ p = list[__wt_random(&rnd) % WT_ELEMENTS(list)];
+ if (WT_PREFIX_MATCH(p, ",shared_cache")) {
+ if (cache == CACHE_SET)
+ continue;
+ cache = CACHE_SHARED;
+ } else if (WT_PREFIX_MATCH(p, ",cache_size")) {
+ if (cache == CACHE_SHARED)
+ continue;
+ cache = CACHE_SET;
+ }
+ strcat(config, p);
+ }
+ if ((ret = opts->conn->reconfigure(opts->conn, config)) != 0) {
+ fprintf(stderr, "%s: %s\n",
+ config, session->strerror(session, ret));
+ return (EXIT_FAILURE);
+ }
+ }
+
+ /*
+ * Turn on-close statistics off, if on-close is on and statistics were
+ * randomly turned off during the run, close would fail.
+ */
+ testutil_check(opts->conn->reconfigure(
+ opts->conn, "statistics_log=(on_close=0)"));
+
+ free(config);
+ testutil_cleanup(opts);
+ return (EXIT_SUCCESS);
+}