Skip to content

Commit 9d4848e

Browse files
committed
fix logic to use close method instead python __del__
1 parent 802f327 commit 9d4848e

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

airflow-core/src/airflow/jobs/triggerer_job_runner.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,9 @@ def __call__(self, processors: Iterable[structlog.typing.Processor]) -> WrappedL
322322
self.bound_logger = logger
323323
return logger
324324

325-
def __del__(self):
326-
# Explicitly close the file descriptor when the logger is garbage collected.
327-
if hasattr(self, "_filehandle") and self._filehandle:
325+
def close(self):
326+
# Explicitly close the file descriptor.
327+
if hasattr(self, "_filehandle") and self._filehandle and not self._filehandle.closed:
328328
self._filehandle.close()
329329

330330
def upload_to_remote(self):
@@ -433,6 +433,7 @@ def _handle_request(self, msg: ToTriggerSupervisor, log: FilteringBoundLogger, r
433433
# only need to remove the last reference to it to close the open FH
434434
if factory := self.logger_cache.pop(id, None):
435435
factory.upload_to_remote()
436+
factory.close()
436437

437438
response = messages.TriggerStateSync(
438439
to_create=[],

airflow-core/tests/unit/jobs/test_triggerer_job.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
ToTriggerSupervisor,
4343
TriggerCommsDecoder,
4444
TriggererJobRunner,
45+
TriggerLoggingFactory,
4546
TriggerRunner,
4647
TriggerRunnerSupervisor,
4748
messages,
@@ -303,6 +304,19 @@ def test_trigger_log(mock_monotonic, trigger, watcher_count, trigger_count, sess
303304
trigger_runner_supervisor.kill(force=False)
304305

305306

307+
def test_trigger_logger_close():
308+
logger = TriggerLoggingFactory(log_path="/tmp/test.log", ti=MagicMock())
309+
310+
mock_fh = MagicMock()
311+
mock_fh.closed = False
312+
313+
logger._filehandle = mock_fh
314+
315+
logger.close()
316+
317+
mock_fh.close.assert_called_once()
318+
319+
306320
def test_trigger_logger_fd_closed_when_removed(session):
307321

308322
trigger = TimeDeltaTrigger(datetime.timedelta(seconds=0.5))

0 commit comments

Comments
 (0)