Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6db6903f7c0e7685fb65b6cfa8537c27e32c48db
https://github.com/WebKit/WebKit/commit/6db6903f7c0e7685fb65b6cfa8537c27e32c48db
Author: Ryan Haddad <[email protected]>
Date: 2026-06-26 (Fri, 26 Jun 2026)
Changed paths:
M Tools/CISupport/ews-build/results_db.py
M Tools/CISupport/ews-build/steps_unittest.py
M Tools/CISupport/ews-build/twisted_additions.py
Log Message:
-----------
[ews] Failures when querying results-db can cause false positives to be
reported
https://bugs.webkit.org/show_bug.cgi?id=317856
rdar://180634688
Reviewed by Jonathan Bedard and Aakash Jain.
When TwistedAdditions.request hit the response-header timeout added in
309004@main, the
swallowing onTimeoutCancel callback left the deferred fulfilled with None. The
next line
then called response.deliverBody on None and the catch-all `except Exception`
logged the
misleading "'NoneType' object has no attribute 'deliverBody'" message instead
of the
existing defer.TimeoutError handler running. The same pattern was in place on
the
body-delivery timeout.
Downstream, ResultsDatabase.make_request collapsed both "request failed" and
"successful
empty response" to `{}`. For the SaferCPP path, that resulted in a
normal-looking dict with
does_result_match=False on network failures, and
FindUnexpectedStaticAnalyzerResults.check_results_db
then attributed the failing files to the PR author. The protective "fall back
to tip-of-tree"
branch in filter_results_using_results_db (which runs ScanBuildWithoutChange)
was unreachable
because the returned dict was truthy.
* Tools/CISupport/ews-build/twisted_additions.py:
(TwistedAdditions.request): Drop the swallowing onTimeoutCancel callbacks so
addTimeout
default-translates the cancel into a defer.TimeoutError that the existing
handler logs cleanly.
* Tools/CISupport/ews-build/results_db.py:
(ResultsDatabase.make_request): Return None on infrastructure failure (no
response or non-200)
and preserve the response payload on 200.
(ResultsDatabase.does_result_match): When the request failed, return None even
if a `default`
is provided. This triggers the existing `if not data:` fallback in
check_results_db, which
routes to the rebuild-without-change verification step instead of blaming the
PR.
(ResultsDatabase.is_test_pre_existing_failure): Guard against None data and
expose a
request_failed flag in the output dict for future call sites.
* Tools/CISupport/ews-build/steps_unittest.py:
(TestResultsDatabaseFailureHandling): Cover make_request, does_result_match, and
is_test_pre_existing_failure behavior on both infrastructure failure and
successful empty
responses.
Canonical link: https://commits.webkit.org/315901@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications