-
Notifications
You must be signed in to change notification settings - Fork 246
Fix invalid escape sequences in gpMgmt Python sources - #1969
Open
tuhaihe wants to merge 1 commit into
Open
Conversation
Python 3.12 promoted "invalid escape sequence" from a DeprecationWarning (hidden by default) to a SyntaxWarning that is printed whenever the module is compiled. On distributions shipping Python 3.12 or newer -- Rocky Linux 10, Fedora 40+, Ubuntu 24.10+ -- the management utilities therefore print warnings before doing any work: /usr/local/cloudberry-db/lib/python/gppylib/util/ssh_utils.py:268: SyntaxWarning: invalid escape sequence '\ ' /usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:105: SyntaxWarning: invalid escape sequence '\[' /usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:109: SyntaxWarning: invalid escape sequence '\$' /usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:110: SyntaxWarning: invalid escape sequence '\$' The four above come from gpsync/gpssh/gpssh-exkeys and are the ones users see; compiling everything under gpMgmt/ turns up 41 such literals in 16 files. Nothing misbehaves today -- CPython leaves an unrecognised escape in the string as-is, which happens to be what a regex or a shell snippet wants -- but the warnings are noise on stderr, and the Python docs say these sequences will become a SyntaxError in a future release. Fix the literals rather than silencing the warning: * a literal whose every backslash escape is invalid gets an r prefix * a literal that mixes valid and invalid escapes has the invalid backslash doubled instead, since r would also change the meaning of the valid ones Both transformations leave the literal's runtime value byte-for-byte identical, which was verified mechanically: for each touched file the ordered list of str/bytes constants in the AST is unchanged against the parent commit, and compiling the file under -W error::SyntaxWarning is now clean. Two of the rewrites are worth a reviewer's eye: * gpstate_utils.py:79 and replication_slots_utils.py:31 are the mixed-escape case, so they read '\\%' and '\\A' now. * the '\A' in replication_slots_utils.py looks like a stray keystroke in a run of shell line continuations -- the shell it is handed sees "&& A ./demo_cluster.sh" and tries to run A. That is pre-existing behaviour, so this commit preserves it exactly rather than quietly changing what the behave step does; it wants a separate fix. gpMgmt/bin/lib/pexpect is a vendored copy of pexpect 3.3; upstream pexpect made these same literals raw long ago. 27 more files under src/ and contrib/ (mostly gporca and try_convert developer scripts) have the same problem and are left for a follow-up.
tuhaihe
commented
Sep 8, 2026
Member
Author
tuhaihe
marked this pull request as ready for review
September 8, 2026 10:12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Python 3.12 promoted "invalid escape sequence" from a DeprecationWarning (hidden by default) to a SyntaxWarning that is printed whenever the module is compiled. On distributions shipping Python 3.12 or newer -- Rocky Linux 10, Fedora 40+, Ubuntu 24.10+ -- the management utilities therefore print warnings before doing any work:
/usr/local/cloudberry-db/lib/python/gppylib/util/ssh_utils.py:268:
SyntaxWarning: invalid escape sequence '\ '
/usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:105:
SyntaxWarning: invalid escape sequence '['
/usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:109:
SyntaxWarning: invalid escape sequence '$'
/usr/local/cloudberry-db/bin/lib/pexpect/pxssh.py:110:
SyntaxWarning: invalid escape sequence '$'
The four above come from gpsync/gpssh/gpssh-exkeys and are the ones users see; compiling everything under gpMgmt/ turns up 41 such literals in 16 files. Nothing misbehaves today -- CPython leaves an unrecognised escape in the string as-is, which happens to be what a regex or a shell snippet wants -- but the warnings are noise on stderr, and the Python docs say these sequences will become a SyntaxError in a future release.
Fix the literals rather than silencing the warning:
Both transformations leave the literal's runtime value byte-for-byte identical, which was verified mechanically: for each touched file the ordered list of str/bytes constants in the AST is unchanged against the parent commit, and compiling the file under -W error::SyntaxWarning is now clean.
Two of the rewrites are worth a reviewer's eye:
gpMgmt/bin/lib/pexpect is a vendored copy of pexpect 3.3; upstream pexpect made these same literals raw long ago.
27 more files under src/ and contrib/ (mostly gporca and try_convert developer scripts) have the same problem and are left for a follow-up.
Fixes #ISSUE_Number
What does this PR do?
Type of Change
Breaking Changes
Test Plan
make installcheckmake -C src/test installcheck-cbdb-parallelImpact
Performance:
User-facing changes:
Dependencies:
Checklist
Additional Context
CI Skip Instructions