summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAlex Gorrod <alexg@wiredtiger.com>2016-02-23 16:25:00 +1100
committerAlex Gorrod <alexg@wiredtiger.com>2016-02-23 16:25:00 +1100
commite5a56007153127bc04a680ffff1d6d98e563c6e2 (patch)
tree29ff9d018b39001dc3090adba9c304db2ab986d5 /examples
parent4c1ae0fe240d9cbc8e88c091d292ce8f2f94c924 (diff)
downloadmongo-e5a56007153127bc04a680ffff1d6d98e563c6e2.tar.gz
WT-2107 Shuffle changes for event handler example.
Diffstat (limited to 'examples')
-rw-r--r--examples/c/Makefile.am1
-rw-r--r--examples/c/ex_all.c71
-rw-r--r--examples/c/ex_event_handler.c120
3 files changed, 121 insertions, 71 deletions
diff --git a/examples/c/Makefile.am b/examples/c/Makefile.am
index 587204efff1..72fd98aff7b 100644
--- a/examples/c/Makefile.am
+++ b/examples/c/Makefile.am
@@ -12,6 +12,7 @@ noinst_PROGRAMS = \
ex_cursor \
ex_data_source \
ex_encrypt \
+ ex_event_handler \
ex_extending \
ex_extractor \
ex_hello \
diff --git a/examples/c/ex_all.c b/examples/c/ex_all.c
index 0c33b471843..f9f6292dc86 100644
--- a/examples/c/ex_all.c
+++ b/examples/c/ex_all.c
@@ -1045,63 +1045,6 @@ backup(WT_SESSION *session)
return (ret);
}
-#define APPLICATION_ERROR 1
-#define APPLICATION_INFO 2
-int application_logging(int, const char *);
-int wiredtiger_handle_error(
- WT_EVENT_HANDLER *, WT_SESSION *, int, const char *);
-int wiredtiger_handle_message(WT_EVENT_HANDLER *, WT_SESSION *, const char *);
-
-int
-application_logging(int which, const char *message)
-{
- (void)which;
- (void)message;
- return (0);
-}
-
-/*! [Function event_handler] */
-
-/*
- * handle_error --
- * WiredTiger error handler.
- */
-int
-wiredtiger_handle_error(WT_EVENT_HANDLER *handler,
- WT_SESSION *session, int error, const char *message)
-{
- int ret;
-
- (void)(handler); /* Unused variables */
- (void)(error);
-
- /* Timestamp and log the error message. */
- ret = application_logging(APPLICATION_ERROR, message);
-
- /* Copy and flush the message to stderr. */
- if (fprintf(stderr, "%p: %s\n", session, message) < 0 && ret == 0)
- ret = EIO;
- if (fflush(stderr) != 0 && ret == 0)
- ret = errno;
- return (ret);
-}
-
-/*
- * handle_message --
- * WiredTiger message handler.
- */
-int
-wiredtiger_handle_message(
- WT_EVENT_HANDLER *handler, WT_SESSION *session, const char *message)
-{
- (void)(handler); /* Unused variables */
- (void)(session); /* Unused variables */
-
- /* Timestamp and log the informational message. */
- return (application_logging(APPLICATION_INFO, message));
-}
-/*! [Function event_handler] */
-
int
main(void)
{
@@ -1171,20 +1114,6 @@ main(void)
if (ret == 0)
(void)conn->close(conn, NULL);
#endif
- {
- /*! [Configure event_handler] */
- WT_EVENT_HANDLER event_handler;
-
- event_handler.handle_error = wiredtiger_handle_error;
- event_handler.handle_message = wiredtiger_handle_message;
- event_handler.handle_progress = NULL;
- event_handler.handle_close = NULL;
-
- ret = wiredtiger_open(home, &event_handler, "create", &conn);
- /*! [Configure event_handler] */
- if (ret == 0)
- (void)conn->close(conn, NULL);
- }
/*! [Configure file_extend] */
ret = wiredtiger_open(
diff --git a/examples/c/ex_event_handler.c b/examples/c/ex_event_handler.c
new file mode 100644
index 00000000000..1e277cab00c
--- /dev/null
+++ b/examples/c/ex_event_handler.c
@@ -0,0 +1,120 @@
+/*-
+ * 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.
+ *
+ * ex_event_handler.c
+ * Demonstrate how to use the WiredTiger event handler mechanism.
+ *
+ */
+#include <stdio.h>
+#include <string.h>
+
+#include <wiredtiger.h>
+
+static const char * const progname = "ex_event_handler";
+static const char *home;
+
+int handle_wiredtiger_error(
+ WT_EVENT_HANDLER *, WT_SESSION *, int, const char *);
+int handle_wiredtiger_message(WT_EVENT_HANDLER *, WT_SESSION *, const char *);
+
+/*! [Function event_handler] */
+
+/*
+ * Setup our own event handler structure to allow us to pass context through
+ * to event handler callbacks. For this to work the WiredTiger event handler
+ * must appear first in our custom event handler structure.
+ */
+typedef struct {
+ WT_EVENT_HANDLER h;
+ const char *app_id;
+} CUSTOM_EVENT_HANDLER;
+
+/*
+ * handle_wiredtiger_error --
+ * Function to handle error callbacks from WiredTiger.
+ */
+int
+handle_wiredtiger_error(WT_EVENT_HANDLER *handler,
+ WT_SESSION *session, int error, const char *message)
+{
+ CUSTOM_EVENT_HANDLER *custom_handler;
+
+ /* Cast the handler back to our custom handler. */
+ custom_handler = (CUSTOM_EVENT_HANDLER *)handler;
+
+ /* Report the error on the console. */
+ fprintf(stderr,
+ "app_id %s, thread context %p, error %d, message %s\n",
+ custom_handler->app_id, session, error, message);
+
+ return (0);
+}
+
+/*
+ * handle_wiredtiger_message --
+ * Function to handle message callbacks from WiredTiger.
+ */
+int
+handle_wiredtiger_message(
+ WT_EVENT_HANDLER *handler, WT_SESSION *session, const char *message)
+{
+ printf("app id %s, thread context %p, message %s\n",
+ ((CUSTOM_EVENT_HANDLER*)handler)->app_id, session, message);
+
+ return (0);
+}
+/*! [Function event_handler] */
+
+int
+main(void)
+{
+ WT_CONNECTION *conn;
+ WT_SESSION *session;
+ int ret;
+
+ /*! [Configure event_handler] */
+ CUSTOM_EVENT_HANDLER event_handler;
+
+ event_handler.h.handle_error = handle_wiredtiger_error;
+ event_handler.h.handle_message = handle_wiredtiger_message;
+ /* Setup a NULL to use the default handler. */
+ event_handler.h.handle_progress = NULL;
+ event_handler.h.handle_close = NULL;
+ event_handler.app_id = "example_event_handler";
+
+ ret = wiredtiger_open(home,
+ (WT_EVENT_HANDLER*)&event_handler, "create", &conn);
+ /*! [Configure event_handler] */
+
+ /* Make an invalid API call, to ensure the event handler works. */
+ (void)conn->open_session(conn, NULL, "isolation=invalid", &session);
+
+ if (ret == 0)
+ (void)conn->close(conn, NULL);
+
+ return (ret);
+}