GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix: populate rowcount after async DML completion by aakash-saravanan-db · Pull Request #1016 · databricks/databricks-sql-python

Conversation

@aakash-saravanan-db

@aakash-saravanan-db aakash-saravanan-db commented Nov 10, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Collaborator

What type of PR is this?

  • Bug Fix

Description

After asynchronous DML completes, Cursor.get_async_execution_result() leaves rowcount=-1 even when an affected-row count is available. Populate the result-set count from the completed kernel handle or Thrift operation status, then copy it to the cursor. Preserve zero counts, unknown counts as -1, and fetched counter rows.

The kernel path reads handle.num_modified_rows after await_result(). Thrift reuses the successful terminal status observed during polling, or requests status when resuming directly by command ID. Failed or closed operations raise before result rows are fetched.

How is this tested?

  • Unit tests

  • Manually

  • Connector unit suite: 1,341 passed, four skipped.

  • Eight focused connector regression cases passed. The reduced regressions fail against unmodified main at the cursor, kernel, and Thrift layers.

  • Existing kernel handle-routing tests verify count propagation after completion through owning, reader, and attached handles. Thrift tests cover status reuse, direct resume, non-terminal counts, preserved counter rows, and errors before fetch. Cursor tests cover positive, zero, and unknown counts plus reset for the next statement.

  • Eight connector tests passed with the rebuilt native kernel. Its source tree matches the merged binding commit.

  • Live SQL warehouse validation: 28/28 cases and 256 assertions passed on both kernel and Thrift backends. Covers async INSERT, UPDATE, DELETE, MERGE, CTE and bound writes, synchronous controls, counts before and after fetch, table contents, SELECT resets, and kernel reader re-fetches. Fixture schema removed.

  • Black on changed code, focused mypy checks, and diff whitespace checks passed.

Related Tickets & Documents

Requires a kernel release containing the Python binding merged in https://github.com/databricks/databricks-sql-kernel/pull/432. KERNEL_REV pins that merged commit for source-built tests. The connector release must set its minimum kernel version to the release containing the binding.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 10, 2026 03:48 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db requested review from cathleeny and vuanhphung November 10, 2026 21:24
@aakash-saravanan-db
aakash-saravanan-db marked this pull request as ready for review November 10, 2026 21:29
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 10, 2026 21:29 — with GitHub Actions Inactive
peco-review-bot[bot]
peco-review-bot Bot approved these changes Nov 10, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 Low · 2 Nit

Looks good overall, with 3 low-severity points: a direct attribute access next to an existing None guard in the cursor, an extra status RPC on every Thrift async result fetch, and no test for the new error-state check. As the PR description says, the kernel count depends on a binding release that isn't out yet, and the getattr fallback safely leaves the count unknown (-1) until then. Per the repo learning log, raise the databricks-sql-kernel floor once that binding ships so the feature isn't silently off on in-range wheels.

Other findings

  • ⚪ Nit — This adds an unconditional GetOperationStatus round-trip on every get_execution_result call. In the normal async flow the caller has usually just polled status through get_query_state, which makes the same RPC. The PR description acknowledges the extra call, but that earlier status response is thrown away instead of reused, so each async retrieval now costs one more network round-trip. This also affects any caller that uses get_execution_result for re-fetch. Consider caching the last TGetOperationStatusResp per command id from get_query_state and reusing it when it is terminal. Alternatively, document the extra round-trip in the method's docstring.
  • ⚪ Nit — _check_command_not_in_error_or_closed_state is new on this path. A command in ERROR, CLOSED, or otherwise invalid state now raises ServerOperationError/DatabaseError before FetchResults, where before the outcome depended on whatever FetchResults returned. That is a real behavior change, and the new test only covers FINISHED_STATE. Please add a parametrized case where _poll_for_status returns ERROR_STATE (and/or CLOSED_STATE). It should assert the expected exception and that make_request for FetchResults is never called, so this guard can't be silently dropped.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/client.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 10, 2026 21:30 Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:00 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:00 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:00 — with GitHub Actions Inactive
peco-review-bot[bot]
peco-review-bot Bot approved these changes Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 Low

Looks good, with one low note about kernel wheel version gating. The Thrift path refreshes operation status and checks for error/closed states before calling FetchResults. The kernel path reads the cached count after await_result(), and the cursor maps a None count to -1. Tests cover positive, zero and unknown counts on both backends.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 00:03 Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:03 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:23 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:23 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:23 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 00:23 — with GitHub Actions Inactive
peco-review-bot[bot]
peco-review-bot Bot approved these changes Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 Low

Looks good overall, with one low concern: the kernel dependency floor isn't bumped yet to a wheel that exposes the async count. The Thrift change reuses the existing status-poll and error-state checks the same way the sync path does, and the cursor now sets -1 explicitly when the count is unknown. Tests cover 0, None and an unavailable count on both backends.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 00:26 Inactive
vuanhphung
vuanhphung reviewed Nov 11, 2026
View reviewed changes
Comment thread src/databricks/sql/backend/kernel/client.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@vuanhphung
vuanhphung temporarily deployed to azure-prod November 11, 2026 01:00 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 01:42 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 01:42 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 01:42 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 01:42 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 01:42 — with GitHub Actions Inactive
peco-review-bot[bot]
peco-review-bot Bot approved these changes Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 Low

Looks good, with one low-severity efficiency note. Async DML rowcount is now set on both backends: on Thrift from a fresh GetOperationStatus read, on the kernel through a getattr fallback that works with older wheels. The tests cover positive, zero and unknown counts, and check that counter rows are preserved and the count resets on the next statement. As the PR description says, the kernel dependency floor and the CHANGELOG minimum version still need concrete values before merge.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/thrift_backend.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 01:45 Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 01:48 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 01:48 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 20:05 — with GitHub Actions Inactive
peco-review-bot[bot]
peco-review-bot Bot reviewed Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 High · 1 Low

Mostly sound, with one high concern: on the kernel async path, the new handle.num_modified_rows read raises AttributeError on released kernel wheels that don't have the attribute. That would make every kernel async result fetch fail. The Thrift status caching and the cursor rowcount handling look correct; CommandId uses identity hashing, so the WeakKeyDictionary works.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread src/databricks/sql/backend/thrift_backend.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 20:08 Inactive
@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 20:08 Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 20:09 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 20:09 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 20:12 — with GitHub Actions Failure
peco-review-bot[bot]
peco-review-bot Bot reviewed Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 High · 1 Low

Don't merge yet: there is one high-severity issue. On the kernel path, the code reads a binding attribute that the current ^1.4.0 kernel pin doesn't provide, so every kernel async result fetch would fail until the dependency floor is raised. The Thrift status caching (a WeakKeyDictionary keyed by CommandId, which hashes by identity) and the cursor rowcount handling look correct and are well tested.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py
try:
return self._make_result_set(stream, cursor, command_id)
result_set = self._make_result_set(stream, cursor, command_id)
result_set.num_modified_rows = handle.num_modified_rows

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 High — handle.num_modified_rows is read directly, but that attribute only exists in the companion binding (databricks-sql-kernel#432). The dependency floor is still ^1.4.0, and the PR description says the floor will be raised later. On any wheel the resolver currently allows, this line raises AttributeError. The surrounding except Exception then turns it into a DatabaseError. The result is that every get_async_execution_result() on use_kernel=True fails, including plain async SELECTs, which work today. It also leaks the result set _make_result_set already built, since that result set (and its stream) is never closed.

The sync path in this file already handles this safely with getattr(executed, "num_modified_rows", None) (line 695). Either do the same here so older wheels just report rowcount=-1, or bump the pyproject floor in this same PR. Consider also adding a unit test where the handle has no num_modified_rows attribute. The new parametrized test always sets it, so the old-wheel case is never exercised.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@aakash-saravanan-db aakash-saravanan-db Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The connector release requires kernel #432 and a package minimum set to the version containing it, as stated in the PR description. That version update is pending publication of the companion binding; v1.4.0 is still the latest released kernel. The direct getter is verified against the pinned source build in the native tests and live matrix. Keeping this release prerequisite visible.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood. The kernel floor bump has to wait until the binding that includes #432 is published, and the native/live tests build against that source. Until then, though, line 970 is still a direct handle.num_modified_rows read, and pyproject still allows ^1.4.0. If this merges before the floor bump, every kernel async get_async_execution_result() raises AttributeError and leaks the result set. A one-line getattr(handle, "num_modified_rows", None), like the sync path uses, would make this safe whenever the two land. I'm leaving this open as a merge gate until the floor is raised in this PR or the guarded read goes in.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/thrift_backend.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 20:14 Inactive
@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 20:14 Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 20:16 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 20:16 — with GitHub Actions Error
@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 20:17 Inactive
@aakash-saravanan-db
test: focus async rowcount regression coverage
14466cf
Signed-off-by: Aakash Saravanan <[email protected]>
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 22:17 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 22:17 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 22:17 — with GitHub Actions Failure
peco-review-bot[bot]
peco-review-bot Bot reviewed Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 High · 1 Low

The Thrift and cursor changes look correct, but there's one high-severity compatibility issue: on any 1.4.x wheel, which the ^1.4.0 dependency range still allows, the kernel path's direct handle.num_modified_rows read makes every async get_async_execution_result() call fail. The Thrift WeakKeyDictionary cache keys on CommandId instances, which use the default identity hash, so caching per instance works as intended.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py
try:
return self._make_result_set(stream, cursor, command_id)
result_set = self._make_result_set(stream, cursor, command_id)
result_set.num_modified_rows = handle.num_modified_rows

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 High — This reads handle.num_modified_rows directly. According to the PR description, that attribute on ExecutedAsyncStatement is added by kernel PR #432, which hasn't been released yet. pyproject.toml still allows databricks-sql-kernel ^1.4.0, and KERNEL_REV only affects source-built CI.

On a 1.4.x wheel, the attribute lookup raises AttributeError. The except Exception below then turns it into a DatabaseError. The result is that every get_async_execution_result() on use_kernel=True fails, including plain async SELECTs that worked before this change. The _make_result_set result is also discarded without being closed.

The sync path a few hundred lines up guards against this with getattr(executed, "num_modified_rows", None). Use the same pattern here, which degrades to rowcount=-1 on older wheels. Alternatively, bump the dependency floor in the same PR so the requirement is enforced at install time, not only in the PR text.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@aakash-saravanan-db aakash-saravanan-db Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kernel #432 is merged and KERNEL_REV points to its merge commit. The remaining dependency-version update requires publication of that kernel release and must land before this connector is merged or released. The source-built and native tests use that binding. Leaving this release prerequisite open.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, merging #432 and pinning KERNEL_REV to its merge commit means the source-built and native CI jobs exercise the new attribute. But pyproject.toml still allows a 1.4.x wheel, and line 970 still reads handle.num_modified_rows directly. Until the dependency floor goes up, any install that resolves to 1.4.x will fail every kernel get_async_execution_result(), including plain async SELECTs. I'm keeping this thread open as the merge gate you described, so it closes when the floor bump lands. If the release slips, the getattr(handle, "num_modified_rows", None) fallback the sync path already uses would remove the gate.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/thrift_backend.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@peco-review-bot
peco-review-bot Bot had a problem deploying to azure-prod November 11, 2026 22:19 Error
@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 22:19 Inactive
@aakash-saravanan-db
docs: clarify async result status errors
6464c30
Signed-off-by: Aakash Saravanan <[email protected]>
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 22:21 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 22:21 — with GitHub Actions Failure
@aakash-saravanan-db
aakash-saravanan-db temporarily deployed to azure-prod November 11, 2026 22:21 — with GitHub Actions Inactive
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 22:21 — with GitHub Actions Error
@aakash-saravanan-db
aakash-saravanan-db had a problem deploying to azure-prod November 11, 2026 22:21 — with GitHub Actions Error
peco-review-bot[bot]
peco-review-bot Bot reviewed Nov 11, 2026
View reviewed changes

@peco-review-bot peco-review-bot Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: 1 High · 1 Low

The approach is sound, but there is one high-severity compatibility problem: on the kernel path, an unguarded attribute read breaks every async result fetch on kernel wheels the current dependency floor still allows. The Thrift path (reusing the terminal status from polling, plus a refresh on resume) and the cursor changes look correct and are well tested.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/kernel/client.py
try:
return self._make_result_set(stream, cursor, command_id)
result_set = self._make_result_set(stream, cursor, command_id)
result_set.num_modified_rows = handle.num_modified_rows

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 High — handle.num_modified_rows is read directly. The PR description says this attribute only exists in a kernel release that ships databricks-sql-kernel#432, but pyproject.toml still lets the resolver install ^1.4.0. On a 1.4.x wheel this line raises AttributeError. The surrounding except wraps it as a DatabaseError, so every get_async_execution_result() on the kernel path fails, including async SELECTs that worked before. The result set built just above it is also left unclosed. The sync path at line 695 already reads this attribute with getattr(..., None).

Fix: use getattr(handle, "num_modified_rows", None) so older wheels fall back to rowcount=-1, or bump the kernel floor in this same PR. Add a unit test where the handle has no num_modified_rows attribute.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/databricks/sql/backend/thrift_backend.py

with self._request_lock:
operation_status = self._terminal_operation_statuses.pop(command_id, None)
if operation_status is None:

@peco-review-bot peco-review-bot Bot Nov 11, 2026

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Low — When resuming directly by command ID (no cached terminal status), get_execution_result now always sends an extra GetOperationStatus RPC before FetchResults. That changes behavior: a failed or closed operation now raises from the status check, where before the error came from the fetch. That is probably the intended fix. But the error type and message for those cases have no test beyond the single ERROR_STATE case, and nothing covers the CLOSED/CANCELED states. Consider adding a parametrized case for CLOSED_STATE and CANCELED_STATE so the new pre-fetch guard is pinned.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@peco-review-bot
peco-review-bot Bot had a problem deploying to azure-prod November 11, 2026 22:23 Error
@peco-review-bot
peco-review-bot Bot had a problem deploying to azure-prod November 11, 2026 22:23 Error
@peco-review-bot
peco-review-bot Bot temporarily deployed to azure-prod November 11, 2026 22:24 Inactive

This branch was previously deployed

1 inactive deployment
azure-prod — 6464c30f Deployed Nov 11, 2026 by peco-review-bot[bot] via followup #1547
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@peco-review-bot peco-review-bot[bot] peco-review-bot[bot] approved these changes
@cathleeny cathleeny Awaiting requested review from cathleeny
@vuanhphung vuanhphung Awaiting requested review from vuanhphung

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@aakash-saravanan-db @vuanhphung
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.