summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/include/misc.i
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2018-07-23 15:53:49 +1000
committerLuke Chen <luke.chen@mongodb.com>2018-07-23 15:53:49 +1000
commite065e7daa99f75f19a73fc1b2b57a8947852a006 (patch)
treed2c141fab1e7334b6a552ecda525d29c1cbf20dd /src/third_party/wiredtiger/src/include/misc.i
parent1c1535c9ee73ac4ed0d922855ccbe44335909082 (diff)
downloadmongo-e065e7daa99f75f19a73fc1b2b57a8947852a006.tar.gz
Import wiredtiger: 1be1b793becdfb5f4b2ae950449aa3710ca320ce from branch mongodb-4.2
ref: 3334609975..1be1b793be for: 4.1.2 WT-3276 Add recover=salvage to recover from a corrupted log file WT-3943 Include full error message when a python test asserts WT-3955 Add verbose option to log more messages on error returns WT-4160 Restore performance when timestamps are not in use WT-4168 Update upgrading documentation for 3.1.0 release WT-4169 Fix wt verify dump-pages failure WT-4171 Enabling tree walk timing stress causes excessive slowdown WT-4172 Add diagnostic hazard pointer checks in more places before freeing refs WT-4174 Do not access the lookaside file in rollback_to_stable when running with in_memory=true WT-4178 Fixes for wt_btree_immediately_durable needed for in-memory WT-4179 Expose WiredTiger crc32c functions WT-4182 Use conservative approach for log checksum errors WT-4188 Coverity: unchecked return value complaints
Diffstat (limited to 'src/third_party/wiredtiger/src/include/misc.i')
-rw-r--r--src/third_party/wiredtiger/src/include/misc.i27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/third_party/wiredtiger/src/include/misc.i b/src/third_party/wiredtiger/src/include/misc.i
index 2c380e95ade..5c9f95bc08a 100644
--- a/src/third_party/wiredtiger/src/include/misc.i
+++ b/src/third_party/wiredtiger/src/include/misc.i
@@ -259,15 +259,26 @@ __wt_spin_backoff(uint64_t *yield_count, uint64_t *sleep_usecs)
static inline void
__wt_timing_stress(WT_SESSION_IMPL *session, u_int flag)
{
- WT_CONNECTION_IMPL *conn;
- uint64_t sleep_usecs;
+ uint64_t i;
- conn = S2C(session);
-
- /* Only sleep when the specified configuration flag is set. */
- if (!FLD_ISSET(conn->timing_stress_flags, flag))
+ /* Optionally only sleep when a specified configuration flag is set. */
+ if (flag != 0 && !FLD_ISSET(S2C(session)->timing_stress_flags, flag))
return;
- sleep_usecs = __wt_random(&session->rnd) % WT_TIMING_STRESS_MAX_DELAY;
- __wt_sleep(0, sleep_usecs);
+ /*
+ * We need a fast way to choose a sleep time. We want to sleep a short
+ * period most of the time, but occasionally wait longer. Divide the
+ * maximum period of time into 10 buckets (where bucket 0 doesn't sleep
+ * at all), and roll dice, advancing to the next bucket 50% of the time.
+ * That means we'll hit the maximum roughly every 1K calls.
+ */
+ for (i = 0;;)
+ if (__wt_random(&session->rnd) & 0x1 || ++i > 9)
+ break;
+
+ if (i == 0)
+ __wt_yield();
+ else
+ /* The default maximum delay is 1/10th of a second. */
+ __wt_sleep(0, i * (WT_TIMING_STRESS_MAX_DELAY / 10));
}