diff options
author | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-02-17 11:22:16 +1100 |
---|---|---|
committer | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-02-17 11:22:16 +1100 |
commit | 9c8c662a9213b16ae206f495c875594f5f0454f0 (patch) | |
tree | 7c9e527eec0fc5d99119ed5bf080660e96d20405 /src/third_party/wiredtiger/src/conn/conn_ckpt.c | |
parent | 22ec4be075233d425f21349854b5ceac6baa5289 (diff) | |
download | mongo-9c8c662a9213b16ae206f495c875594f5f0454f0.tar.gz |
Import wiredtiger: e1bcc30da91eedd0b17cebb725cc7e607ffa2340 from branch mongodb-3.6
ref: 48a3cbc17f..e1bcc30da9
for: 3.5.4
WT-2790 Fix a text case false positive in test_sweep01
WT-2909 Create automatable test verifying checkpoint integrity after errors
WT-3088 bug: Don't evict a page with refs visible to readers after a split
WT-3097 Race on reconfigure or shutdown can lead to waiting for statistics log server
WT-3111 util_create() doesnt free memory assigned to "uri"
WT-3113 Add a verbose mode to dump the cache when eviction is stuck
WT-3115 Change the dhandle lock to a read/write lock
WT-3120 Fix ordering problem in connection_close for filesystem loaded in an extension
WT-3135 search_near() for index with custom collator
WT-3137 Hang in __log_slot_join/__log_slot_switch_internal
WT-3139 Enhance wtperf to support periodic table scans
WT-3144 bug fix: random cursor returns not-found when descending to an empty page
WT-3148 Improve eviction efficiency with many small trees
WT-3149 Change eviction to start new walks from a random place in the tree
WT-3150 Reduce impact of checkpoints on eviction server
WT-3152 Convert table lock from a spinlock to a read write lock
WT-3156 Assertion in log_write fires after write failure
WT-3157 checkpoint/transaction integrity issue when writes fail.
WT-3159 Incorrect key for index containing multiple variable sized entries
WT-3161 checkpoint hang after write failure injection.
WT-3164 Ensure all relevant btree fields are reset on checkpoint error
WT-3170 Clear the eviction walk point while populating from a tree
WT-3173 Add runtime detection for s390x CRC32 hardware support
WT-3174 Coverity/lint cleanup
WT-3175 New hang in internal page split
WT-3179 Test bug: clang sanitizer failure in fail_fs
WT-3180 Fault injection tests should only run as "long" tests and should not create core files
WT-3184 Problem duplicating index cursor with custom collator
WT-3186 Fix error path and panic detection in logging loops
Diffstat (limited to 'src/third_party/wiredtiger/src/conn/conn_ckpt.c')
-rw-r--r-- | src/third_party/wiredtiger/src/conn/conn_ckpt.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/third_party/wiredtiger/src/conn/conn_ckpt.c b/src/third_party/wiredtiger/src/conn/conn_ckpt.c index faeef4e71a2..7797ed4421c 100644 --- a/src/third_party/wiredtiger/src/conn/conn_ckpt.c +++ b/src/third_party/wiredtiger/src/conn/conn_ckpt.c @@ -63,6 +63,16 @@ __ckpt_server_config(WT_SESSION_IMPL *session, const char **cfg, bool *startp) } /* + * __ckpt_server_run_chk -- + * Check to decide if the checkpoint server should continue running. + */ +static bool +__ckpt_server_run_chk(WT_SESSION_IMPL *session) +{ + return (F_ISSET(S2C(session), WT_CONN_SERVER_CHECKPOINT)); +} + +/* * __ckpt_server -- * The checkpoint server thread. */ @@ -78,14 +88,18 @@ __ckpt_server(void *arg) conn = S2C(session); wt_session = (WT_SESSION *)session; - while (F_ISSET(conn, WT_CONN_SERVER_RUN) && - F_ISSET(conn, WT_CONN_SERVER_CHECKPOINT)) { + for (;;) { /* * Wait... * NOTE: If the user only configured logsize, then usecs * will be 0 and this wait won't return until signalled. */ - __wt_cond_wait(session, conn->ckpt_cond, conn->ckpt_usecs); + __wt_cond_wait(session, + conn->ckpt_cond, conn->ckpt_usecs, __ckpt_server_run_chk); + + /* Check if we're quitting or being reconfigured. */ + if (!__ckpt_server_run_chk(session)) + break; /* * Checkpoint the database if the connection is marked dirty. @@ -113,7 +127,8 @@ __ckpt_server(void *arg) * it so we don't do another checkpoint * immediately. */ - __wt_cond_wait(session, conn->ckpt_cond, 1); + __wt_cond_wait( + session, conn->ckpt_cond, 1, NULL); } } else WT_STAT_CONN_INCR(session, txn_checkpoint_skipped); @@ -152,8 +167,7 @@ __ckpt_server_start(WT_CONNECTION_IMPL *conn) "checkpoint-server", true, session_flags, &conn->ckpt_session)); session = conn->ckpt_session; - WT_RET(__wt_cond_alloc( - session, "checkpoint server", false, &conn->ckpt_cond)); + WT_RET(__wt_cond_alloc(session, "checkpoint server", &conn->ckpt_cond)); /* * Start the thread. |