From dd4e72da46df1df2c37f9fd44f9177bd60c82044 Mon Sep 17 00:00:00 2001 From: maddieford <93676569+maddieford@users.noreply.github.com> Date: Fri, 10 Feb 2023 10:15:26 -0800 Subject: [PATCH] Update log collector unit file to remove memorylimit (#2757) * Update version to dummy 1.0.0.0' * Revert version change * Update log collector slice unit file without memory limit * Update comment * Update setup errors as exceptions * Update comment for accuracy --- azurelinuxagent/common/cgroupconfigurator.py | 7 +++---- azurelinuxagent/common/logcollector.py | 2 +- tests/common/mock_cgroup_environment.py | 1 + tests/common/test_cgroupconfigurator.py | 21 +++++++++++++++++++ .../azure-walinuxagent-logcollector.slice | 9 ++++++++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tests/data/init/azure-walinuxagent-logcollector.slice diff --git a/azurelinuxagent/common/cgroupconfigurator.py b/azurelinuxagent/common/cgroupconfigurator.py index 840961e7df..627567b038 100644 --- a/azurelinuxagent/common/cgroupconfigurator.py +++ b/azurelinuxagent/common/cgroupconfigurator.py @@ -368,10 +368,9 @@ def __setup_azure_slice(): if not os.path.exists(vmextensions_slice): files_to_create.append((vmextensions_slice, _VMEXTENSIONS_SLICE_CONTENTS)) - if not os.path.exists(logcollector_slice): - slice_contents = _LOGCOLLECTOR_SLICE_CONTENTS_FMT.format(cpu_quota=_LOGCOLLECTOR_CPU_QUOTA) - - files_to_create.append((logcollector_slice, slice_contents)) + # Update log collector slice contents + slice_contents = _LOGCOLLECTOR_SLICE_CONTENTS_FMT.format(cpu_quota=_LOGCOLLECTOR_CPU_QUOTA) + files_to_create.append((logcollector_slice, slice_contents)) if fileutil.findre_in_file(agent_unit_file, r"Slice=") is not None: CGroupConfigurator._Impl.__cleanup_unit_file(agent_drop_in_file_slice) diff --git a/azurelinuxagent/common/logcollector.py b/azurelinuxagent/common/logcollector.py index 393333c962..fe62a7db6a 100644 --- a/azurelinuxagent/common/logcollector.py +++ b/azurelinuxagent/common/logcollector.py @@ -119,7 +119,7 @@ def _set_resource_usage_cgroups(cpu_cgroup_path, memory_cgroup_path): @staticmethod def _initialize_telemetry(): protocol = get_protocol_util().get_protocol(init_goal_state=False) - protocol.client.reset_goal_state(goalstate_properties=GoalStateProperties.RoleConfig | GoalStateProperties.HostingEnv) + protocol.client.reset_goal_state(goal_state_properties=GoalStateProperties.RoleConfig | GoalStateProperties.HostingEnv) # Initialize the common parameters for telemetry events initialize_event_logger_vminfo_common_parameters(protocol) diff --git a/tests/common/mock_cgroup_environment.py b/tests/common/mock_cgroup_environment.py index 10d499077e..e38471060e 100644 --- a/tests/common/mock_cgroup_environment.py +++ b/tests/common/mock_cgroup_environment.py @@ -91,6 +91,7 @@ class UnitFilePaths: walinuxagent = "/lib/systemd/system/walinuxagent.service" + logcollector = "/lib/systemd/system/azure-walinuxagent-logcollector.slice" azure = "/lib/systemd/system/azure.slice" vmextensions = "/lib/systemd/system/azure-vmextensions.slice" extensionslice = "/lib/systemd/system/azure-vmextensions-Microsoft.CPlat.Extension.slice" diff --git a/tests/common/test_cgroupconfigurator.py b/tests/common/test_cgroupconfigurator.py index 60a7cfde1c..d3410cf54a 100644 --- a/tests/common/test_cgroupconfigurator.py +++ b/tests/common/test_cgroupconfigurator.py @@ -188,6 +188,27 @@ def test_initialize_should_create_unit_files_when_the_agent_service_file_is_not_ self.assertTrue(os.path.exists(agent_drop_in_file_cpu_accounting), "{0} was not created".format(agent_drop_in_file_cpu_accounting)) self.assertTrue(os.path.exists(agent_drop_in_file_memory_accounting), "{0} was not created".format(agent_drop_in_file_memory_accounting)) + def test_initialize_should_update_logcollector_memorylimit(self): + with self._get_cgroup_configurator(initialize=False) as configurator: + log_collector_unit_file = configurator.mocks.get_mapped_path(UnitFilePaths.logcollector) + original_memory_limit = "MemoryLimit=30M" + + # The mock creates the slice unit file with memory limit + configurator.mocks.add_data_file(os.path.join(data_dir, 'init', "azure-walinuxagent-logcollector.slice"), + UnitFilePaths.logcollector) + if not os.path.exists(log_collector_unit_file): + raise Exception("{0} should have been created during test setup".format(log_collector_unit_file)) + if not fileutil.findre_in_file(log_collector_unit_file, original_memory_limit): + raise Exception("MemoryLimit was not set correctly. Expected: {0}. Got:\n{1}".format( + original_memory_limit, fileutil.read_file(log_collector_unit_file))) + + configurator.initialize() + + # initialize() should update the unit file to remove the memory limit + self.assertFalse(fileutil.findre_in_file(log_collector_unit_file, original_memory_limit), + "Log collector slice unit file was not updated correctly. Expected no memory limit. Got:\n{0}".format( + fileutil.read_file(log_collector_unit_file))) + def test_setup_extension_slice_should_create_unit_files(self): with self._get_cgroup_configurator() as configurator: # get the paths to the mocked files diff --git a/tests/data/init/azure-walinuxagent-logcollector.slice b/tests/data/init/azure-walinuxagent-logcollector.slice new file mode 100644 index 0000000000..63c09d431d --- /dev/null +++ b/tests/data/init/azure-walinuxagent-logcollector.slice @@ -0,0 +1,9 @@ +[Unit] +Description=Slice for Azure VM Agent Periodic Log Collector +DefaultDependencies=no +Before=slices.target +[Slice] +CPUAccounting=yes +CPUQuota=5% +MemoryAccounting=yes +MemoryLimit=30M \ No newline at end of file