Selaa lähdekoodia

Merge pull request #5873 from ThomasWaldmann/disable-selftest-1.1

implement BORG_SELFTEST env variable, fixes #5871
TW 4 vuotta sitten
vanhempi
sitoutus
9af7cb8ef8

+ 8 - 0
docs/usage/general/environment.rst.inc

@@ -68,6 +68,14 @@ General:
         When set to no (default: yes), system information (like OS, Python version, ...) in
         When set to no (default: yes), system information (like OS, Python version, ...) in
         exceptions is not shown.
         exceptions is not shown.
         Please only use for good reasons as it makes issues harder to analyze.
         Please only use for good reasons as it makes issues harder to analyze.
+    BORG_SELFTEST
+        This can be used to influence borg's builtin self-tests. The default is to execute the tests
+        at the beginning of each borg command invocation.
+
+        BORG_SELFTEST=disabled can be used to switch off the tests and rather save some time.
+        Disabling is not recommended for normal borg users, but large scale borg storage providers can
+        use this to optimize production servers after at least doing a one-time test borg (with
+        selftests not disabled) when installing or upgrading machines / OS / borg.
     BORG_WORKAROUNDS
     BORG_WORKAROUNDS
         A list of comma separated strings that trigger workarounds in borg,
         A list of comma separated strings that trigger workarounds in borg,
         e.g. to work around bugs in other software.
         e.g. to work around bugs in other software.

+ 4 - 2
src/borg/selftest.py

@@ -12,8 +12,7 @@ To assert that self test discovery works correctly the number of tests is kept i
 variable. SELFTEST_COUNT must be updated if new tests are added or removed to or from any of the tests
 variable. SELFTEST_COUNT must be updated if new tests are added or removed to or from any of the tests
 used here.
 used here.
 """
 """
-
-
+import os
 import sys
 import sys
 import time
 import time
 from unittest import TestResult, TestSuite, defaultTestLoader
 from unittest import TestResult, TestSuite, defaultTestLoader
@@ -56,6 +55,9 @@ class SelfTestResult(TestResult):
 
 
 
 
 def selftest(logger):
 def selftest(logger):
+    if os.environ.get('BORG_SELFTEST') == 'disabled':
+        logger.debug("borg selftest disabled via BORG_SELFTEST env variable")
+        return
     selftest_started = time.perf_counter()
     selftest_started = time.perf_counter()
     result = SelfTestResult()
     result = SelfTestResult()
     test_suite = TestSuite()
     test_suite = TestSuite()

+ 1 - 0
src/borg/testsuite/archiver.py

@@ -251,6 +251,7 @@ class ArchiverTestCaseBase(BaseTestCase):
         os.environ['BORG_CHECK_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
         os.environ['BORG_CHECK_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
         os.environ['BORG_DELETE_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
         os.environ['BORG_DELETE_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
         os.environ['BORG_PASSPHRASE'] = 'waytooeasyonlyfortests'
         os.environ['BORG_PASSPHRASE'] = 'waytooeasyonlyfortests'
+        os.environ['BORG_SELFTEST'] = 'disabled'
         self.archiver = not self.FORK_DEFAULT and Archiver() or None
         self.archiver = not self.FORK_DEFAULT and Archiver() or None
         self.tmpdir = tempfile.mkdtemp()
         self.tmpdir = tempfile.mkdtemp()
         self.repository_path = os.path.join(self.tmpdir, 'repository')
         self.repository_path = os.path.join(self.tmpdir, 'repository')