summaryrefslogtreecommitdiff
path: root/bench/wtperf/misc.c
diff options
context:
space:
mode:
authorKeith Bostic <keith@wiredtiger.com>2013-11-20 08:57:55 -0500
committerKeith Bostic <keith@wiredtiger.com>2013-11-20 08:57:55 -0500
commit3e5ad346eaf0a8eaf8d2461f7ccbcacfae7e68c5 (patch)
treebdf45c879933dff522964b74afb3a326689bfe4a /bench/wtperf/misc.c
parentaac0acc84db32f53aa25a91a1b1e03874c577795 (diff)
downloadmongo-3e5ad346eaf0a8eaf8d2461f7ccbcacfae7e68c5.tar.gz
Split wtperf up by moving configuration functions into their own file.
Diffstat (limited to 'bench/wtperf/misc.c')
-rw-r--r--bench/wtperf/misc.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/bench/wtperf/misc.c b/bench/wtperf/misc.c
new file mode 100644
index 00000000000..2a4b4e31489
--- /dev/null
+++ b/bench/wtperf/misc.c
@@ -0,0 +1,110 @@
+/*-
+ * Public Domain 2008-2013 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 "wtperf.h"
+
+int
+enomem(const CONFIG *cfg)
+{
+ const char *msg;
+
+ msg = "Unable to allocate memory";
+ if (cfg->logf == NULL)
+ fprintf(stderr, "%s\n", msg);
+ else
+ lprintf(cfg, ENOMEM, 0, "%s", msg);
+ return (ENOMEM);
+}
+
+/* Setup the logging output mechanism. */
+int
+setup_log_file(CONFIG *cfg)
+{
+ char *fname;
+ int ret;
+
+ ret = 0;
+
+ if (cfg->verbose < 1 && cfg->stat_interval == 0)
+ return (0);
+
+ if ((fname = calloc(strlen(cfg->home) +
+ strlen(cfg->table_name) + strlen(".stat") + 2, 1)) == NULL)
+ return (enomem(cfg));
+
+ sprintf(fname, "%s/%s.stat", cfg->home, cfg->table_name);
+ if ((cfg->logf = fopen(fname, "w")) == NULL) {
+ fprintf(stderr, "Statistics failed to open log file.\n");
+ ret = EINVAL;
+ } else {
+ /* Use line buffering for the log file. */
+ (void)setvbuf(cfg->logf, NULL, _IOLBF, 0);
+ }
+ free(fname);
+ return (ret);
+}
+
+/*
+ * Log printf - output a log message.
+ */
+void
+lprintf(const CONFIG *cfg, int err, uint32_t level, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (err == 0 && level <= cfg->verbose) {
+ va_start(ap, fmt);
+ vfprintf(cfg->logf, fmt, ap);
+ va_end(ap);
+ fprintf(cfg->logf, "\n");
+
+ if (level < cfg->verbose) {
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ printf("\n");
+ }
+ }
+ if (err == 0)
+ return;
+
+ /* We are dealing with an error. */
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, " Error: %s\n", wiredtiger_strerror(err));
+ if (cfg->logf != NULL) {
+ va_start(ap, fmt);
+ vfprintf(cfg->logf, fmt, ap);
+ va_end(ap);
+ fprintf(cfg->logf, " Error: %s\n", wiredtiger_strerror(err));
+ }
+
+ /* Never attempt to continue if we got a panic from WiredTiger. */
+ if (err == WT_PANIC)
+ exit(1);
+}