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

Reply via email to