mirror of https://github.com/mongodb/mongo
47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
"""Set cluster server parameter hook.
|
|
|
|
A hook to set the given cluster server parameter on a replica set fixture.
|
|
"""
|
|
|
|
from buildscripts.resmokelib.testing.hooks import interface
|
|
|
|
|
|
class ClusterParameter(interface.Hook):
|
|
IS_BACKGROUND = False
|
|
|
|
def __init__(self, hook_logger, rs_fixture, key=None, value=None):
|
|
description = "Sets the specified cluster server parameter."
|
|
interface.Hook.__init__(self, hook_logger, rs_fixture, description)
|
|
self._fixture = rs_fixture
|
|
self._key = key
|
|
self._value = value
|
|
self._original_value = None
|
|
|
|
def before_suite(self, test_report):
|
|
"""Calls setClusterParameter to set the specified parameter on the fixture before running the suite."""
|
|
client = self._fixture.get_primary().mongo_client()
|
|
self._original_value = client.get_database("admin").command(
|
|
{"getClusterParameter": self._key}
|
|
)["clusterParameters"][0]
|
|
# There are extra parameters in the response that aren't part of the original value so
|
|
# they must be removed.
|
|
del self._original_value["_id"]
|
|
del self._original_value["clusterParameterTime"]
|
|
self.logger.info(f"Original parameter saved: {str(self._original_value)}")
|
|
command_request = {
|
|
"setClusterParameter": {self._key: self._value},
|
|
}
|
|
client.get_database("admin").command(command_request)
|
|
self.logger.info(f"Successfully called setClusterParameter to set {self._key}")
|
|
|
|
def after_suite(self, test_report, teardown_flag=None):
|
|
"""Restores the original value modified by setClusterParameter."""
|
|
client = self._fixture.get_primary().mongo_client()
|
|
command_request = {
|
|
"setClusterParameter": {self._key: self._original_value},
|
|
}
|
|
client.get_database("admin").command(command_request)
|
|
self.logger.info(
|
|
f"Successfully called setClusterParameter to restor original value of {self._key}"
|
|
)
|