/src/third_party/wiredtiger/test/suite/test_reconfig02.py
https://github.com/paralect/mongo · Python · 119 lines · 59 code · 12 blank · 48 comment · 6 complexity · 96a8717487ee57d2ce49f60801b7c10a MD5 · raw file
- #!/usr/bin/env python
- #
- # Public Domain 2014-2020 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.
- import fnmatch, os, time
- import wiredtiger, wttest
- # test_reconfig02.py
- # Smoke-test the connection reconfiguration operations.
- class test_reconfig02(wttest.WiredTigerTestCase):
- init_config = 'log=(archive=false,enabled,file_max=100K,prealloc=false,zero_fill=false)'
- uri = "table:reconfig02"
- entries = 1000
- def setUpConnectionOpen(self, dir):
- self.conn_config = self.init_config
- return wttest.WiredTigerTestCase.setUpConnectionOpen(self, dir)
- # Logging: reconfigure the things we can reconfigure.
- def test_reconfig02_simple(self):
- self.conn.reconfigure("log=(archive=false)")
- self.conn.reconfigure("log=(prealloc=false)")
- self.conn.reconfigure("log=(zero_fill=false)")
- self.conn.reconfigure("log=(archive=true)")
- self.conn.reconfigure("log=(prealloc=true)")
- self.conn.reconfigure("log=(zero_fill=true)")
- # Logging: reconfigure the things we can't reconfigure.
- def test_reconfig02_disable(self):
- msg = '/unknown configuration key/'
- self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
- lambda: self.conn.reconfigure("log=(enabled=true)"), msg)
- self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
- lambda: self.conn.reconfigure("log=(compressor=foo)"), msg)
- self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
- lambda: self.conn.reconfigure("log=(file_max=1MB)"), msg)
- self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
- lambda: self.conn.reconfigure("log=(path=foo)"), msg)
- self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
- lambda: self.conn.reconfigure("log=(recover=true)"), msg)
- # Logging starts on, but prealloc is off. Verify it is off.
- # Reconfigure it on and run again, making sure that log files
- # get pre-allocated.
- def test_reconfig02_prealloc(self):
- # Create a table just to write something into the log. Sleep
- # to give the worker thread a chance to run.
- self.session.create(self.uri, 'key_format=i,value_format=i')
- time.sleep(2)
- prep_logs = fnmatch.filter(os.listdir('.'), "*Prep*")
- # Make sure no pre-allocated log files exist.
- self.assertEqual(0, len(prep_logs))
- # Now turn on pre-allocation. Sleep to give the worker thread
- # a chance to run and verify pre-allocated log files exist.
- #
- # Potentially loop a few times in case it is a very slow system.
- self.conn.reconfigure("log=(prealloc=true)")
- for x in range(0, 100):
- time.sleep(1)
- prep_logs = fnmatch.filter(os.listdir('.'), "*Prep*")
- if len(prep_logs) != 0:
- break
- self.assertNotEqual(0, len(prep_logs))
- # Logging starts on, but archive is off. Verify it is off.
- # Reconfigure it on and run again, making sure that log files
- # get archived.
- def test_reconfig02_archive(self):
- self.session.create(self.uri, 'key_format=i,value_format=i')
- c = self.session.open_cursor(self.uri, None, None)
- for i in range(self.entries):
- c[i] = i + 1
- c.close()
- # Close and reopen connection to write a checkpoint, move to the
- # next log file and verify that archive did not run.
- orig_logs = fnmatch.filter(os.listdir('.'), "*gerLog*")
- self.reopen_conn()
- cur_logs = fnmatch.filter(os.listdir('.'), "*gerLog*")
- for o in orig_logs:
- self.assertEqual(True, o in cur_logs)
- # Now turn on archive, sleep a bit to allow the archive thread
- # to run and then confirm that all original logs are gone.
- self.conn.reconfigure("log=(archive=true)")
- self.session.checkpoint("force")
- time.sleep(2)
- cur_logs = fnmatch.filter(os.listdir('.'), "*gerLog*")
- for o in orig_logs:
- self.assertEqual(False, o in cur_logs)
- if __name__ == '__main__':
- wttest.run()