summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/test
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2021-06-01 19:22:08 +1000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-06-01 10:41:06 +0000
commitcde925294d785851a593f5f0a92c6b7c73e7d7ab (patch)
treeb5c7983256a6aef0c8d07393569341b4d9653dfe /src/third_party/wiredtiger/test
parente36b6bcb692cc79173853d89023546e21c944e4d (diff)
downloadmongo-cde925294d785851a593f5f0a92c6b7c73e7d7ab.tar.gz
Import wiredtiger: 0784f508f9ea28834c848ec36467fa9ad7a48f15 from branch mongodb-5.0
ref: a449c141a4..0784f508f9 for: 5.0.0-rc1 WT-7493 Add a new connection config to control the page eviction with update restore eviction
Diffstat (limited to 'src/third_party/wiredtiger/test')
-rwxr-xr-xsrc/third_party/wiredtiger/test/suite/test_debug_mode09.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/test/suite/test_debug_mode09.py b/src/third_party/wiredtiger/test/suite/test_debug_mode09.py
new file mode 100755
index 00000000000..a44e25ca7ce
--- /dev/null
+++ b/src/third_party/wiredtiger/test/suite/test_debug_mode09.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+#
+# Public Domain 2014-present 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.
+
+from wiredtiger import stat
+import wttest
+
+# test_debug_mode09.py
+# Test the debug mode setting for update_restore_evict.
+# Force update restore eviction, whenever we evict a page. The debug mode
+# is only effective on high cache pressure as WiredTiger can potentially decide
+# to do an update restore evict on a page, when the cache pressure requirements are not met.
+# This means setting eviction target low and cache size high.
+class test_debug_mode09(wttest.WiredTigerTestCase):
+ conn_config = 'cache_size=10MB,statistics=(all),eviction_target=10'
+ uri = "table:test_debug_mode09"
+
+ # Insert a bunch of data to trigger eviction
+ def trigger_eviction(self, uri):
+ cursor = self.session.open_cursor(uri)
+ for i in range(0, 20000):
+ self.session.begin_transaction()
+ cursor[i] = 'b' * 500
+ self.session.commit_transaction()
+
+ def test_update_restore_evict(self):
+ self.session.create(self.uri, 'key_format=i,value_format=S')
+
+ self.trigger_eviction(self.uri)
+
+ # Read the statistics of pages that have been update restored without update_restore
+ stat_cursor = self.session.open_cursor('statistics:')
+ pages_update_restored = stat_cursor[stat.conn.cache_write_restore][2]
+ stat_cursor.close()
+ self.assertGreater(pages_update_restored, 0)
+
+ # Restart the connection with update restore evict config and a clean table
+ self.close_conn()
+ self.conn_config += ",debug_mode=(update_restore_evict=true)"
+ self.reopen_conn(".", self.conn_config)
+ self.session.drop(self.uri)
+ self.session.create(self.uri, 'key_format=i,value_format=S')
+
+ self.trigger_eviction(self.uri)
+
+ stat_cursor = self.session.open_cursor('statistics:')
+ forced_pages_update_restore = stat_cursor[stat.conn.cache_write_restore][2]
+ stat_cursor.close()
+ self.assertGreater(forced_pages_update_restore, pages_update_restored)