summaryrefslogtreecommitdiff
path: root/bench/wtperf
diff options
context:
space:
mode:
Diffstat (limited to 'bench/wtperf')
-rw-r--r--bench/wtperf/config.c87
-rw-r--r--bench/wtperf/runners/500m-btree-50r50u.wtperf2
-rw-r--r--bench/wtperf/runners/500m-btree-80r20u.wtperf2
-rw-r--r--bench/wtperf/runners/500m-btree-populate.wtperf2
-rw-r--r--bench/wtperf/runners/500m-btree-rdonly.wtperf2
-rw-r--r--bench/wtperf/runners/checkpoint-stress.wtperf2
-rw-r--r--bench/wtperf/runners/evict-btree-1.wtperf2
-rw-r--r--bench/wtperf/runners/evict-btree-readonly.wtperf2
-rw-r--r--bench/wtperf/runners/evict-btree-stress-multi.wtperf2
-rw-r--r--bench/wtperf/runners/evict-btree-stress.wtperf2
-rw-r--r--bench/wtperf/runners/evict-btree.wtperf2
-rw-r--r--bench/wtperf/runners/evict-lsm-1.wtperf2
-rw-r--r--bench/wtperf/runners/evict-lsm-readonly.wtperf2
-rw-r--r--bench/wtperf/runners/evict-lsm.wtperf2
-rw-r--r--bench/wtperf/runners/log.wtperf2
-rw-r--r--bench/wtperf/runners/mongodb-secondary-apply.wtperf2
-rw-r--r--bench/wtperf/runners/multi-btree-read-heavy-stress.wtperf2
-rw-r--r--bench/wtperf/runners/multi-btree-stress.wtperf2
-rw-r--r--bench/wtperf/runners/multi-btree-zipfian-populate.wtperf2
-rw-r--r--bench/wtperf/runners/multi-btree-zipfian-workload.wtperf2
-rw-r--r--bench/wtperf/stress/btree-split-stress.wtperf2
-rw-r--r--bench/wtperf/wtperf.c120
22 files changed, 179 insertions, 68 deletions
diff --git a/bench/wtperf/config.c b/bench/wtperf/config.c
index 5b14a4cdf68..a15a3485dde 100644
--- a/bench/wtperf/config.c
+++ b/bench/wtperf/config.c
@@ -622,17 +622,9 @@ config_opt_str(WTPERF *wtperf, const char *optstr)
return (ret);
}
- /*
- * Append the current line to our copy of the config. The config is
- * stored in the order it is processed, so added options will be after
- * any parsed from the original config. We allocate len + 1 to allow for
- * a null byte to be added.
- */
- config_line = dcalloc(sizeof(CONFIG_QUEUE_ENTRY), 1);
- config_line->string = dstrdup(optstr);
- TAILQ_INSERT_TAIL(&opts->config_head, config_line, q);
-
while (ret == 0) {
+ size_t pos;
+
if ((ret = scan->next(scan, &k, &v)) != 0) {
/* Any parse error has already been reported. */
if (ret == WT_NOTFOUND)
@@ -640,6 +632,46 @@ config_opt_str(WTPERF *wtperf, const char *optstr)
break;
}
ret = config_opt(wtperf, &k, &v);
+
+ /*
+ * Append the key-value pair to our copy of the config.
+ * The config is stored in the order it is processed, so added
+ * options will be after any parsed from the original config.
+ */
+ config_line = dcalloc(sizeof(CONFIG_QUEUE_ENTRY), 1);
+ /*
+ * If key or value is a string, consider extra space for the
+ * quotes. Add 2 to the required space for '=' and the ending
+ * null character in "key=value".
+ */
+ config_line->string = dcalloc(
+ k.len + (k.type == WT_CONFIG_ITEM_STRING ? 2 : 0) +
+ v.len + (v.type == WT_CONFIG_ITEM_STRING ? 2 : 0) + 2, 1);
+ pos = 0;
+ if (k.type == WT_CONFIG_ITEM_STRING) {
+ config_line->string[pos] = '"';
+ pos++;
+ }
+ strncpy(config_line->string + pos, k.str, k.len);
+ pos += k.len;
+ if (k.type == WT_CONFIG_ITEM_STRING) {
+ config_line->string[pos] = '"';
+ pos++;
+ }
+ config_line->string[pos] = '=';
+ pos++;
+ if (v.type == WT_CONFIG_ITEM_STRING) {
+ config_line->string[pos] = '"';
+ pos++;
+ }
+ strncpy(config_line->string + pos, v.str, v.len);
+ pos += v.len;
+ if (v.type == WT_CONFIG_ITEM_STRING) {
+ config_line->string[pos] = '"';
+ pos++;
+ }
+ config_line->string[pos] = '\0';
+ TAILQ_INSERT_TAIL(&opts->config_head, config_line, q);
}
if ((t_ret = scan->close(scan)) != 0) {
lprintf(wtperf, ret, 0, "Error in config_scan_end");
@@ -754,8 +786,11 @@ config_consolidate(CONFIG_OPTS *opts)
/*
* This loop iterates over the config queue and for each entry checks if
- * a later queue entry has the same key. If there's a match, the current
- * queue entry is removed and we continue.
+ * a later queue entry has the same key. If there's a match, and key is
+ * "conn_config" or "table_config", the later queue entry is replaced
+ * with a concatenated entry of the two queue entries, the current queue
+ * entry is removed. For any other key, if there is a match, the current
+ * queue entry is removed.
*/
conf_line = TAILQ_FIRST(&opts->config_head);
while (conf_line != NULL) {
@@ -771,6 +806,34 @@ config_consolidate(CONFIG_OPTS *opts)
if (strncmp(conf_line->string, test_line->string,
(size_t)((string_key - conf_line->string) + 1))
== 0) {
+ if ((strncmp("conn_config=", conf_line->string,
+ (size_t)((string_key - conf_line->string) +
+ 1)) == 0) ||
+ (strncmp("table_config=", conf_line->string,
+ (size_t)((string_key - conf_line->string) +
+ 1)) == 0)) {
+ char *concat_str, *val_pointer;
+
+ /*
+ * To concatenate the two config
+ * strings, copy the first string to a
+ * new one, replace the ending '"' with
+ * a ',' and then concatenate the second
+ * string's value after its starting '"'
+ */
+ val_pointer =
+ strchr(test_line->string, '=') + 2;
+ concat_str =
+ dmalloc(strlen(conf_line->string) +
+ strlen(val_pointer) + 1);
+ strcpy(concat_str, conf_line->string);
+ concat_str[strlen(concat_str) - 1] =
+ ',';
+ strcat(concat_str, val_pointer);
+ free(test_line->string);
+ test_line->string = concat_str;
+ }
+
TAILQ_REMOVE(&opts->config_head, conf_line, q);
free(conf_line->string);
free(conf_line);
diff --git a/bench/wtperf/runners/500m-btree-50r50u.wtperf b/bench/wtperf/runners/500m-btree-50r50u.wtperf
index 536127f0dd8..4d2a70f1107 100644
--- a/bench/wtperf/runners/500m-btree-50r50u.wtperf
+++ b/bench/wtperf/runners/500m-btree-50r50u.wtperf
@@ -5,7 +5,7 @@
#
# Set cache to half of memory of AWS perf instance. Enable logging and
# checkpoints. Collect wiredtiger stats for ftdc.
-conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=4)"
+conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=8)"
create=false
compression="snappy"
sess_config="isolation=snapshot"
diff --git a/bench/wtperf/runners/500m-btree-80r20u.wtperf b/bench/wtperf/runners/500m-btree-80r20u.wtperf
index d6218c44af0..6645df835df 100644
--- a/bench/wtperf/runners/500m-btree-80r20u.wtperf
+++ b/bench/wtperf/runners/500m-btree-80r20u.wtperf
@@ -5,7 +5,7 @@
#
# Set cache to half of memory of AWS perf instance. Enable logging and
# checkpoints. Collect wiredtiger stats for ftdc.
-conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=4)"
+conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=8)"
create=false
compression="snappy"
# close_conn as false allows this test to close/finish faster, but if running
diff --git a/bench/wtperf/runners/500m-btree-populate.wtperf b/bench/wtperf/runners/500m-btree-populate.wtperf
index f9aed094aa1..ab7b17ca683 100644
--- a/bench/wtperf/runners/500m-btree-populate.wtperf
+++ b/bench/wtperf/runners/500m-btree-populate.wtperf
@@ -9,7 +9,7 @@
#
# This generates about 80 Gb of uncompressed data. But it should compress
# well and be small on disk.
-conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=4)"
+conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=8)"
compact=true
compression="snappy"
sess_config="isolation=snapshot"
diff --git a/bench/wtperf/runners/500m-btree-rdonly.wtperf b/bench/wtperf/runners/500m-btree-rdonly.wtperf
index 2c9540ff589..e8958d20e2c 100644
--- a/bench/wtperf/runners/500m-btree-rdonly.wtperf
+++ b/bench/wtperf/runners/500m-btree-rdonly.wtperf
@@ -5,7 +5,7 @@
#
# Set cache to half of memory of AWS perf instance. Enable logging and
# checkpoints. Collect wiredtiger stats for ftdc.
-conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=4)"
+conn_config="cache_size=16G,checkpoint=(wait=60,log_size=2GB),session_max=20000,log=(enabled),statistics=(fast),statistics_log=(wait=30,json),eviction=(threads_max=8)"
create=false
compression="snappy"
sess_config="isolation=snapshot"
diff --git a/bench/wtperf/runners/checkpoint-stress.wtperf b/bench/wtperf/runners/checkpoint-stress.wtperf
index bbd3a3ba5ed..5daa276e622 100644
--- a/bench/wtperf/runners/checkpoint-stress.wtperf
+++ b/bench/wtperf/runners/checkpoint-stress.wtperf
@@ -1,6 +1,6 @@
# A stress configuration to create long running checkpoints while doing a lot
# of updates.
-conn_config="cache_size=16GB,eviction=(threads_max=4),log=(enabled=false)"
+conn_config="cache_size=16GB,eviction=(threads_max=8),log=(enabled=false)"
table_config="leaf_page_max=32k,internal_page_max=16k,allocation_size=4k,split_pct=90,type=file"
# Enough data to fill the cache. 150 million 1k records results in two ~11GB
# tables
diff --git a/bench/wtperf/runners/evict-btree-1.wtperf b/bench/wtperf/runners/evict-btree-1.wtperf
index 24da4dd7902..741101d083f 100644
--- a/bench/wtperf/runners/evict-btree-1.wtperf
+++ b/bench/wtperf/runners/evict-btree-1.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict btree configuration
-conn_config="cache_size=50M"
+conn_config="cache_size=50M,eviction=(threads_max=1)"
table_config="type=file"
icount=10000000
report_interval=5
diff --git a/bench/wtperf/runners/evict-btree-readonly.wtperf b/bench/wtperf/runners/evict-btree-readonly.wtperf
index 25599fadd8d..972bc371f2d 100644
--- a/bench/wtperf/runners/evict-btree-readonly.wtperf
+++ b/bench/wtperf/runners/evict-btree-readonly.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict btree configuration
-conn_config="cache_size=50M,eviction=(threads_max=4),mmap=false"
+conn_config="cache_size=50M,eviction=(threads_max=8),mmap=false"
table_config="type=file"
icount=10000000
report_interval=5
diff --git a/bench/wtperf/runners/evict-btree-stress-multi.wtperf b/bench/wtperf/runners/evict-btree-stress-multi.wtperf
index a5a29f66fa0..5a2cad6d78e 100644
--- a/bench/wtperf/runners/evict-btree-stress-multi.wtperf
+++ b/bench/wtperf/runners/evict-btree-stress-multi.wtperf
@@ -1,4 +1,4 @@
-conn_config="cache_size=1G,eviction=(threads_max=4),session_max=2000"
+conn_config="cache_size=1G,eviction=(threads_max=8),session_max=2000"
table_config="type=file"
table_count=100
close_conn=false
diff --git a/bench/wtperf/runners/evict-btree-stress.wtperf b/bench/wtperf/runners/evict-btree-stress.wtperf
index 740fb88c050..96e3f01b325 100644
--- a/bench/wtperf/runners/evict-btree-stress.wtperf
+++ b/bench/wtperf/runners/evict-btree-stress.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict btree configuration
-conn_config="cache_size=50M,eviction=(threads_max=4)"
+conn_config="cache_size=50M,eviction=(threads_max=8)"
table_config="type=file"
icount=10000000
report_interval=5
diff --git a/bench/wtperf/runners/evict-btree.wtperf b/bench/wtperf/runners/evict-btree.wtperf
index e7d967e5c63..3810e6a8294 100644
--- a/bench/wtperf/runners/evict-btree.wtperf
+++ b/bench/wtperf/runners/evict-btree.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict btree configuration
-conn_config="cache_size=50M,eviction=(threads_max=4)"
+conn_config="cache_size=50M,eviction=(threads_max=8)"
table_config="type=file"
icount=10000000
report_interval=5
diff --git a/bench/wtperf/runners/evict-lsm-1.wtperf b/bench/wtperf/runners/evict-lsm-1.wtperf
index ad885d98eb7..641a85dc889 100644
--- a/bench/wtperf/runners/evict-lsm-1.wtperf
+++ b/bench/wtperf/runners/evict-lsm-1.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict lsm configuration
-conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6)"
+conn_config="cache_size=50M,eviction=(threads_max=1),lsm_manager=(worker_thread_max=6)"
table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB"
compact=true
icount=10000000
diff --git a/bench/wtperf/runners/evict-lsm-readonly.wtperf b/bench/wtperf/runners/evict-lsm-readonly.wtperf
index 661b8e21924..470dca695dd 100644
--- a/bench/wtperf/runners/evict-lsm-readonly.wtperf
+++ b/bench/wtperf/runners/evict-lsm-readonly.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict lsm configuration
-conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6),eviction=(threads_max=4)"
+conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6),eviction=(threads_max=8)"
table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB"
compact=true
icount=10000000
diff --git a/bench/wtperf/runners/evict-lsm.wtperf b/bench/wtperf/runners/evict-lsm.wtperf
index b872d429046..a0f2a78d013 100644
--- a/bench/wtperf/runners/evict-lsm.wtperf
+++ b/bench/wtperf/runners/evict-lsm.wtperf
@@ -1,5 +1,5 @@
# wtperf options file: evict lsm configuration
-conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6),eviction=(threads_max=4)"
+conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6),eviction=(threads_max=8)"
table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB"
compact=true
icount=10000000
diff --git a/bench/wtperf/runners/log.wtperf b/bench/wtperf/runners/log.wtperf
index 6cf50dfb5a5..4379ba22373 100644
--- a/bench/wtperf/runners/log.wtperf
+++ b/bench/wtperf/runners/log.wtperf
@@ -16,7 +16,7 @@
# - Config + "-C "checkpoint=(wait=0)": no checkpoints
# - Config + "-C "log=(enabled,prealloc=false,file_max=1M)": no pre-allocation
#
-conn_config="cache_size=5G,log=(enabled=true),checkpoint=(log_size=500M),eviction=(threads_max=4)"
+conn_config="cache_size=5G,log=(enabled=true),checkpoint=(log_size=500M),eviction=(threads_max=8)"
table_config="type=file"
icount=1000000
report_interval=5
diff --git a/bench/wtperf/runners/mongodb-secondary-apply.wtperf b/bench/wtperf/runners/mongodb-secondary-apply.wtperf
index f9e41184f95..58bd1a76b97 100644
--- a/bench/wtperf/runners/mongodb-secondary-apply.wtperf
+++ b/bench/wtperf/runners/mongodb-secondary-apply.wtperf
@@ -1,5 +1,5 @@
# Simulate the MongoDB oplog apply threads on a secondary.
-conn_config="cache_size=10GB,session_max=1000,eviction=(threads_min=4,threads_max=4),log=(enabled=false),transaction_sync=(enabled=false),checkpoint_sync=true,checkpoint=(wait=60),statistics=(fast),statistics_log=(json,wait=1)"
+conn_config="cache_size=10GB,session_max=1000,eviction=(threads_min=4,threads_max=8),log=(enabled=false),transaction_sync=(enabled=false),checkpoint_sync=true,checkpoint=(wait=60),statistics=(fast),statistics_log=(json,wait=1)"
table_config="allocation_size=4k,memory_page_max=5MB,prefix_compression=false,split_pct=75,leaf_page_max=32k,internal_page_max=16k,type=file"
# Spread the workload out over several tables.
table_count=4
diff --git a/bench/wtperf/runners/multi-btree-read-heavy-stress.wtperf b/bench/wtperf/runners/multi-btree-read-heavy-stress.wtperf
index d7b27f8fda4..f07e6c80b39 100644
--- a/bench/wtperf/runners/multi-btree-read-heavy-stress.wtperf
+++ b/bench/wtperf/runners/multi-btree-read-heavy-stress.wtperf
@@ -2,7 +2,7 @@
# up by dividing the workload across a lot of threads. This needs to be
# tuned to the particular machine so the workload is close to capacity in the
# steady state, but not overwhelming.
-conn_config="cache_size=20GB,session_max=1000,eviction=(threads_min=4,threads_max=4),log=(enabled=false),transaction_sync=(enabled=false),checkpoint_sync=true,checkpoint=(wait=60),statistics=(fast),statistics_log=(json,wait=1)"
+conn_config="cache_size=20GB,session_max=1000,eviction=(threads_min=4,threads_max=8),log=(enabled=false),transaction_sync=(enabled=false),checkpoint_sync=true,checkpoint=(wait=60),statistics=(fast),statistics_log=(json,wait=1)"
table_config="allocation_size=4k,memory_page_max=10MB,prefix_compression=false,split_pct=90,leaf_page_max=32k,internal_page_max=16k,type=file"
# Divide original icount by database_count.
table_count=8
diff --git a/bench/wtperf/runners/multi-btree-stress.wtperf b/bench/wtperf/runners/multi-btree-stress.wtperf
index b10b08f6035..bee1f431043 100644
--- a/bench/wtperf/runners/multi-btree-stress.wtperf
+++ b/bench/wtperf/runners/multi-btree-stress.wtperf
@@ -1,7 +1,7 @@
# wtperf options file: multi-database configuration attempting to
# trigger slow operations by overloading CPU and disk.
# References Jira WT-2131
-conn_config="cache_size=2GB,eviction=(threads_min=2,threads_max=2),log=(enabled=false),direct_io=(data,checkpoint),buffer_alignment=4096,checkpoint_sync=true,checkpoint=(wait=60)"
+conn_config="cache_size=2GB,eviction=(threads_min=2,threads_max=8),log=(enabled=false),direct_io=(data,checkpoint),buffer_alignment=4096,checkpoint_sync=true,checkpoint=(wait=60)"
table_config="allocation_size=4k,prefix_compression=false,split_pct=75,leaf_page_max=4k,internal_page_max=16k,leaf_item_max=1433,internal_item_max=3100,type=file"
# Divide original icount by database_count.
database_count=5
diff --git a/bench/wtperf/runners/multi-btree-zipfian-populate.wtperf b/bench/wtperf/runners/multi-btree-zipfian-populate.wtperf
index ddd9c055eac..1fdba049779 100644
--- a/bench/wtperf/runners/multi-btree-zipfian-populate.wtperf
+++ b/bench/wtperf/runners/multi-btree-zipfian-populate.wtperf
@@ -1,5 +1,5 @@
# Create a set of tables with uneven distribution of data
-conn_config="cache_size=1G,eviction=(threads_max=4),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics=(fast),statistics_log=(wait=5,json),session_max=1000"
+conn_config="cache_size=1G,eviction=(threads_max=8),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics=(fast),statistics_log=(wait=5,json),session_max=1000"
table_config="type=file"
table_count=100
icount=0
diff --git a/bench/wtperf/runners/multi-btree-zipfian-workload.wtperf b/bench/wtperf/runners/multi-btree-zipfian-workload.wtperf
index 380350c88c8..dfb3306a7a5 100644
--- a/bench/wtperf/runners/multi-btree-zipfian-workload.wtperf
+++ b/bench/wtperf/runners/multi-btree-zipfian-workload.wtperf
@@ -1,5 +1,5 @@
# Read from a set of tables with uneven distribution of data
-conn_config="cache_size=1G,eviction=(threads_max=4),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics=(fast),statistics_log=(wait=5,json),session_max=1000"
+conn_config="cache_size=1G,eviction=(threads_max=8),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics=(fast),statistics_log=(wait=5,json),session_max=1000"
table_config="type=file"
table_count=100
icount=0
diff --git a/bench/wtperf/stress/btree-split-stress.wtperf b/bench/wtperf/stress/btree-split-stress.wtperf
index deb8c70d12f..86bb288fc6d 100644
--- a/bench/wtperf/stress/btree-split-stress.wtperf
+++ b/bench/wtperf/stress/btree-split-stress.wtperf
@@ -1,4 +1,4 @@
-conn_config="cache_size=2GB,statistics=[fast,clear],statistics_log=(wait=10),eviction=(threads_max=4,threads_min=4)"
+conn_config="cache_size=2GB,statistics=[fast,clear],statistics_log=(wait=10),eviction=(threads_max=8,threads_min=4)"
table_config="type=file,leaf_page_max=8k,internal_page_max=8k,memory_page_max=2MB,split_deepen_min_child=250"
icount=200000
report_interval=5
diff --git a/bench/wtperf/wtperf.c b/bench/wtperf/wtperf.c
index 8c7f0053388..baa259f8817 100644
--- a/bench/wtperf/wtperf.c
+++ b/bench/wtperf/wtperf.c
@@ -2361,11 +2361,11 @@ main(int argc, char *argv[])
{
CONFIG_OPTS *opts;
WTPERF *wtperf, _wtperf;
- size_t req_len, sreq_len;
+ size_t pos, req_len, sreq_len;
bool monitor_set;
int ch, ret;
const char *cmdflags = "C:h:m:O:o:T:";
- const char *config_opts;
+ const char *append_comma, *config_opts;
char *cc_buf, *path, *sess_cfg, *tc_buf, *user_cconfig, *user_tconfig;
/* The first WTPERF structure (from which all others are derived). */
@@ -2502,53 +2502,101 @@ main(int argc, char *argv[])
__wt_stream_set_line_buffer(stdout);
/* Concatenate non-default configuration strings. */
- if (opts->verbose > 1 || user_cconfig != NULL ||
- opts->session_count_idle > 0 || wtperf->compress_ext != NULL ||
- wtperf->async_config != NULL) {
- req_len = strlen(debug_cconfig) + 20;
- if (user_cconfig != NULL)
- req_len += strlen(user_cconfig);
- if (wtperf->async_config != NULL)
- req_len += strlen(wtperf->async_config);
- if (wtperf->compress_ext != NULL)
- req_len += strlen(wtperf->compress_ext);
+ if ((opts->verbose > 1 && strlen(debug_cconfig) != 0) ||
+ user_cconfig != NULL || opts->session_count_idle > 0 ||
+ wtperf->compress_ext != NULL || wtperf->async_config != NULL) {
+ req_len = 20;
+ req_len += wtperf->async_config != NULL ?
+ strlen(wtperf->async_config) : 0;
+ req_len += wtperf->compress_ext != NULL ?
+ strlen(wtperf->compress_ext) : 0;
if (opts->session_count_idle > 0) {
- sreq_len = strlen(",session_max=") + 6;
+ sreq_len = strlen("session_max=") + 6;
req_len += sreq_len;
sess_cfg = dmalloc(sreq_len);
snprintf(sess_cfg, sreq_len,
- ",session_max=%" PRIu32,
+ "session_max=%" PRIu32,
opts->session_count_idle +
wtperf->workers_cnt + opts->populate_threads + 10);
}
+ req_len += user_cconfig != NULL ? strlen(user_cconfig) : 0;
+ req_len += debug_cconfig != NULL ? strlen(debug_cconfig) : 0;
cc_buf = dmalloc(req_len);
- snprintf(cc_buf, req_len, "%s,%s,%s,%s,%s",
- wtperf->async_config ? wtperf->async_config : "",
- wtperf->compress_ext ? wtperf->compress_ext : "",
- opts->verbose > 1 ? debug_cconfig : "",
- sess_cfg != NULL ? sess_cfg : "",
- user_cconfig != NULL ? user_cconfig : "");
- if (strlen(cc_buf) && (ret =
+
+ pos = 0;
+ append_comma = "";
+ if (wtperf->async_config != NULL &&
+ strlen(wtperf->async_config) != 0) {
+ pos += (size_t)snprintf(
+ cc_buf + pos, req_len - pos, "%s%s",
+ append_comma, wtperf->async_config);
+ append_comma = ",";
+ }
+ if (wtperf->compress_ext != NULL &&
+ strlen(wtperf->compress_ext) != 0) {
+ pos += (size_t)snprintf(
+ cc_buf + pos, req_len - pos, "%s%s",
+ append_comma, wtperf->compress_ext);
+ append_comma = ",";
+ }
+ if (sess_cfg != NULL && strlen(sess_cfg) != 0) {
+ pos += (size_t)snprintf(
+ cc_buf + pos, req_len - pos, "%s%s",
+ append_comma, sess_cfg);
+ append_comma = ",";
+ }
+ if (user_cconfig != NULL && strlen(user_cconfig) != 0) {
+ pos += (size_t)snprintf(
+ cc_buf + pos, req_len - pos, "%s%s",
+ append_comma, user_cconfig);
+ append_comma = ",";
+ }
+ if (opts->verbose > 1 && strlen(debug_cconfig) != 0)
+ pos += (size_t)snprintf(
+ cc_buf + pos, req_len - pos, "%s%s",
+ append_comma, debug_cconfig);
+
+ if (strlen(cc_buf) != 0 && (ret =
config_opt_name_value(wtperf, "conn_config", cc_buf)) != 0)
goto err;
}
- if (opts->verbose > 1 || opts->index ||
+ if ((opts->verbose > 1 && strlen(debug_tconfig) != 0) || opts->index ||
user_tconfig != NULL || wtperf->compress_table != NULL) {
- req_len = strlen(debug_tconfig) + 20;
- if (user_tconfig != NULL)
- req_len += strlen(user_tconfig);
- if (wtperf->compress_table != NULL)
- req_len += strlen(wtperf->compress_table);
- if (opts->index)
- req_len += strlen(INDEX_COL_NAMES);
+ req_len = 20;
+ req_len += wtperf->compress_table != NULL ?
+ strlen(wtperf->compress_table) : 0;
+ req_len += opts->index ? strlen(INDEX_COL_NAMES) : 0;
+ req_len += user_tconfig != NULL ? strlen(user_tconfig) : 0;
+ req_len += debug_tconfig != NULL ? strlen(debug_tconfig) : 0;
tc_buf = dmalloc(req_len);
- snprintf(tc_buf, req_len, "%s,%s,%s,%s",
- opts->index ? INDEX_COL_NAMES : "",
- wtperf->compress_table != NULL ?
- wtperf->compress_table : "",
- opts->verbose > 1 ? debug_tconfig : "",
- user_tconfig ? user_tconfig : "");
- if (strlen(tc_buf) && (ret =
+
+ pos = 0;
+ append_comma = "";
+ if (wtperf->compress_table != NULL &&
+ strlen(wtperf->compress_table) != 0) {
+ pos += (size_t)snprintf(
+ tc_buf + pos, req_len - pos, "%s%s",
+ append_comma, wtperf->compress_table);
+ append_comma = ",";
+ }
+ if (opts->index) {
+ pos += (size_t)snprintf(
+ tc_buf + pos, req_len - pos, "%s%s",
+ append_comma, INDEX_COL_NAMES);
+ append_comma = ",";
+ }
+ if (user_tconfig != NULL && strlen(user_tconfig) != 0) {
+ pos += (size_t)snprintf(
+ tc_buf + pos, req_len - pos, "%s%s",
+ append_comma, user_tconfig);
+ append_comma = ",";
+ }
+ if (opts->verbose > 1 && strlen(debug_tconfig) != 0)
+ pos += (size_t)snprintf(
+ tc_buf + pos, req_len - pos, "%s%s",
+ append_comma, debug_tconfig);
+
+ if (strlen(tc_buf) != 0 && (ret =
config_opt_name_value(wtperf, "table_config", tc_buf)) != 0)
goto err;
}