From c25a0a20ce312d3d6342639a4264299544edeab8 Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Tue, 20 Jun 2023 14:24:42 +0200 Subject: [PATCH] node-proxy: try to acquire lock early in reporter's loop The lock should be acquired early in this loop. If the lock gets acquired by another call after we enter that condition *and* before Reporter.loop() actually acquires it, it can lead to issue if during this short amount of time the value of `data_ready` gets modified Signed-off-by: Guillaume Abrioux (cherry picked from commit 3f7384c7e1a9656dcc91fcd9e34c9095371a2a1e) --- src/cephadm/node-proxy/reporter.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/cephadm/node-proxy/reporter.py b/src/cephadm/node-proxy/reporter.py index a5ba531d1a8de..07ac637bf1c8c 100644 --- a/src/cephadm/node-proxy/reporter.py +++ b/src/cephadm/node-proxy/reporter.py @@ -28,10 +28,11 @@ class Reporter: # scenario probably we should just send the sub-parts # that have changed to minimize the traffic in # dense clusters + log.logger.debug("waiting for a lock.") + self.system.lock.acquire() + log.logger.debug("lock acquired.") if self.system.data_ready: - log.logger.debug("waiting for a lock.") - self.system.lock.acquire() - log.logger.debug("lock acquired.") + log.logger.info('data ready to be sent to the mgr.') if not self.system.get_system() == self.system.previous_data: log.logger.info('data has changed since last iteration.') d = self.system.get_system() @@ -46,6 +47,6 @@ class Reporter: self.system.previous_data = self.system.get_system() else: log.logger.info('no diff, not sending data to the mgr.') - self.system.lock.release() - log.logger.debug("lock released.") + self.system.lock.release() + log.logger.debug("lock released.") time.sleep(5) -- 2.39.5