summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-28 09:23:38 (GMT)
committerGitHub <noreply@github.com>2024-06-28 09:23:38 (GMT)
commite310d2bd71b72ad050e20a3da30636e0970a6fc2 (patch)
tree3d53a45bd0580eb76d86a8bf0ba26990bf5a8c56
parentd5441f6aacc1eab69ad539445568a2ef779cb267 (diff)
downloadcpython-e310d2bd71b72ad050e20a3da30636e0970a6fc2.zip
cpython-e310d2bd71b72ad050e20a3da30636e0970a6fc2.tar.gz
cpython-e310d2bd71b72ad050e20a3da30636e0970a6fc2.tar.bz2
[3.13] gh-105623 Fix performance degradation in logging RotatingFileHandler (GH-105887) (GH-121117)
The check for whether the log file is a real file is expensive on NFS filesystems. This commit reorders the rollover condition checking to not do the file type check if the expected file size is less than the rotation threshold. (cherry picked from commit e9b4ec614b66d11623b80471409c16a109f888d5) Co-authored-by: Craig Robson <craig@zhatt.com> Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
-rw-r--r--Lib/logging/handlers.py6
-rw-r--r--Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst2
2 files changed, 5 insertions, 3 deletions
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 410bd98..0fa40f5 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -193,15 +193,15 @@ class RotatingFileHandler(BaseRotatingHandler):
Basically, see if the supplied record would cause the file to exceed
the size limit we have.
"""
- # See bpo-45401: Never rollover anything other than regular files
- if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename):
- return False
if self.stream is None: # delay was set...
self.stream = self._open()
if self.maxBytes > 0: # are we rolling over?
msg = "%s\n" % self.format(record)
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
if self.stream.tell() + len(msg) >= self.maxBytes:
+ # See bpo-45401: Never rollover anything other than regular files
+ if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename):
+ return False
return True
return False
diff --git a/Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst b/Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst
new file mode 100644
index 0000000..2890674
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst
@@ -0,0 +1,2 @@
+Fix performance degradation in
+:class:`logging.handlers.RotatingFileHandler`. Patch by Craig Robson.