Repository navigation
gh-98894: Check readelf failures in test_dtrace - #152345
Conversation
Report readelf command failures directly instead of later failing with missing-probe assertions.
|
cc @vstinner |
vstinner
left a comment
There was a problem hiding this comment.
get_readelf_version() and get_readelf_output() share most code to spawn the subprocess. Can you move the common code into a run_readelf(command) function?
Something like:
def run_readelf(cmd):
# Force the C locale to disable localization.
env = dict(os.environ, LC_ALL="C")
proc = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
env=env,
)
with proc:
stdout, stderr = proc.communicate()
if proc.returncode:
raise AssertionError(
f"Command {' '.join(cmd)!r} failed "
f"with exit code {proc.returncode}: "
f"stdout={version!r} stderr={stderr!r}"
)
return stdout
You can replace legacy universal_newlines=True with text=True :-)
|
Thanks @stratakis for the PR, and @vstinner for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15. |
|
Sorry, @stratakis and @vstinner, I could not cleanly backport this to |
|
Sorry, @stratakis and @vstinner, I could not cleanly backport this to |
|
GH-152891 is a backport of this pull request to the 3.15 branch. |
|
3.14 and 3.13 are not relevant here due to the dtrace support not being there in a proper way (it will to be backported fully from #142397 ) |
|
Merged, thanks for your fix.
Oh ok. No 3.13 and 3.14 backport in this case. |
* gh-98894: Fix DTrace test_check_probes for shared builds (#151122) When building with --enable-shared, the SystemTap/DTrace notes live in libpython. Add detection logic to be used by readelf. Force the C locale on readelf output. (cherry picked from commit 3a08e93) * gh-151496: Use process groups in test_dtrace (#151512) Create a new process group to run bpftrace commands, so it's possible to kill also child processes on timeout. (cherry picked from commit a064b32) * gh-151496: Use process groups in TraceBackend in test_dtrace (#152039) Run the generic DTrace/SystemTap commands in a new process group and terminate the whole group on timeout. This prevents a forked tracer child from keeping stdout/stderr pipes open after the direct tracer process is killed. (cherry picked from commit 1785f4b) * gh-98894: Check readelf failures in test_dtrace (#152345) Report readelf command failures directly instead of later failing with missing-probe assertions. (cherry picked from commit d60a677) * gh-98894: Check tracer exit status in test_dtrace (#152893) Fail functional dtrace and SystemTap cases directly when the tracer exits non-zero. (cherry picked from commit 311e7e7) * gh-98894: Quote test_dtrace tracer subcommands (#152901) Use shlex.join() when building tracer -c command strings for avoiding issues with spaces. (cherry picked from commit a159c68) * gh-98894: Fix dtrace tests in shared builds (#153372) Generate SystemTap probe definitions targeting libpython for shared builds and use centralized USDT probe object discovery for readelf and BPFTrace. (cherry picked from commit 298bef3) * gh-156703: Set LD_LIBRARY_PATH in SystemTap trace commands (GH-156424) Prefix commands passed to stap -c with LD_LIBRARY_PATH via env, when probes reside in libpython. This allows the interpreter to find libpython when staprun does not preserve the loader path. (cherry picked from commit faf4e52) * gh-156722, test_dtrace: Terminate tracing processes gracefully on timeout (#156753) Send SIGTERM to the tracing process group before falling back to SIGKILL. (cherry picked from commit 55ecc0a) * gh-156701: Increase the SystemTap usability timeout (#156720) SystemTap may compile a kernel module during its usability check (if no cached module is available). We need to allow a larger timeout for that case. (cherry picked from commit e1be613) --------- Co-authored-by: stratakis <cstratak@redhat.com> Co-authored-by: stratakis <stratakishar@gmail.com>
Report readelf command failures directly instead of later failing with missing-probe assertions.