Skip to content

Commit 98ba2c9

Browse files
authored
Limit size of logs sent to GitHub (#1760)
Share sent bytes across handler wrappers Resolves #1494
1 parent a50ff5e commit 98ba2c9

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

src/databricks/labs/ucx/installer/workflows.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,7 @@ class MaxedStreamHandler(logging.StreamHandler):
727727

728728
MAX_STREAM_SIZE = 2**20 - 2**6 # 1 Mb minus some buffer
729729
_installed_handlers: dict[str, tuple[logging.Logger, MaxedStreamHandler]] = {}
730+
_sent_bytes = 0
730731

731732
@classmethod
732733
def install_handler(cls, logger_: logging.Logger):
@@ -738,7 +739,7 @@ def install_handler(cls, logger_: logging.Logger):
738739
# any handler to override ?
739740
handler = next((h for h in logger_.handlers if isinstance(h, logging.StreamHandler)), None)
740741
if handler:
741-
to_install = MaxedStreamHandler(cls.MAX_STREAM_SIZE, handler)
742+
to_install = MaxedStreamHandler(handler)
742743
cls._installed_handlers[logger_.name] = (logger_, to_install)
743744
logger_.removeHandler(handler)
744745
logger_.addHandler(to_install)
@@ -750,17 +751,14 @@ def install_handler(cls, logger_: logging.Logger):
750751

751752
@classmethod
752753
def uninstall_handlers(cls):
753-
for pair in cls._installed_handlers.values():
754-
logger_ = pair[0]
755-
handler = pair[1]
754+
for logger_, handler in cls._installed_handlers.values():
756755
logger_.removeHandler(handler)
757756
logger_.addHandler(handler.original_handler)
758757
cls._installed_handlers.clear()
758+
cls._sent_bytes = 0
759759

760-
def __init__(self, max_bytes: int, original_handler: logging.StreamHandler):
760+
def __init__(self, original_handler: logging.StreamHandler):
761761
super().__init__()
762-
self._max_bytes = max_bytes
763-
self._sent_bytes = 0
764762
self._original_handler = original_handler
765763

766764
@property
@@ -784,7 +782,7 @@ def emit(self, record):
784782

785783
def _prevent_overflow(self, msg: str):
786784
data = msg.encode("utf-8")
787-
if self._sent_bytes + len(data) > self._max_bytes:
785+
if self._sent_bytes + len(data) > self.MAX_STREAM_SIZE:
788786
# ensure readers are aware of why the logs are incomplete
789787
self.stream.write(f"MAX LOGS SIZE REACHED: {self._sent_bytes} bytes!!!")
790788
self.flush()

0 commit comments

Comments
 (0)