The GitHub Actions job "Required Checks" on texera.git/main has succeeded.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
464aa8c19e10cedcc727c913443619603b90157d / Xinyuan Lin <[email protected]>
chore(pyamber): remove the unused worker-to-worker RPC proxy (#7794)

### What changes were proposed in this PR?

Removes `AsyncRPCClient.get_worker_interface` and the `_create_proxy`
helper it is the sole caller of. **109 lines deleted, 0 added.**

Python workers talk only to the coordinator. The one production
construction of the Python `AsyncRPCClient` is `main_loop.py:114`, and
it uses `coordinator_stub()` (lines 271, 651, 671, 817) and `receive`
(line 475). Worker-to-worker RPC initiated from Python is unused.

| Grep | Result |
|---|---|
| `get_worker_interface` | its definition, plus three call sites — all
in `test_async_rpc_client.py` |
| `WorkerServiceStub` | `async_rpc_client.py` only: the import, the
return annotation, one argument. No `.scala` hit |
| `_create_proxy` | its definition, and one call inside
`get_worker_interface` — its sole caller |
| `_stream_unary` / `_unary_stream` / `_stream_stream` | only the
`Proxy` blockers inside `_create_proxy`, plus those three tests |

There is no `getattr`-style dynamic access anywhere. Scala's
`workerInterface` (`AsyncRPCClient.scala:140`, `WorkerServiceFs2Grpc`)
is a separate class and unrelated to this Python method.

`_create_proxy` is removed whole rather than just its `_unary_unary`
body: with its only caller gone, leaving a `Proxy` class holding three
stream blockers and no reachable constructor would just relocate the
dead code. The now-orphaned `WorkerServiceStub` import goes too — it was
the only orphan, since every other import is still used by
`_assign_context` / `_create_future` / `receive`.

### Three tests were removed, deliberately

`test_stream_unary_blocked`, `test_unary_stream_blocked` and
`test_stream_stream_blocked` each begin with
`client.get_worker_interface(...)` and then assert on blockers that
exist only inside `_create_proxy`'s local `Proxy`. They exercise nothing
else. Their removal orphaned `import pytest` — the file's only `pytest.`
uses were those three `pytest.raises` calls — so that went as well. The
coordinator path is untouched: it goes through `_assign_context`, never
had the blockers, and keeps its own tests.

### Scope: one item was assessed and deliberately kept

The audit that produced this also flagged `IcebergDocument`'s read side
(`get_uri`, `get_range`, `get_after`, `get_count`) as having no
production callers — only `get()` and `writer()` are used
(`input_port_materialization_reader_runnable.py:161,170`,
`main_loop.py:157,216`, `output_manager.py:148`).

**None of it is removed here**, because unlike the RPC proxy these are
working implementations of `@abstractmethod`s on
`ReadonlyVirtualDocument`, i.e. the read contract `IcebergDocument`
exists to fulfil:

- `get_range`, `get_after` and `get_count` have live passing tests
asserting real Iceberg behaviour, and `get_range`/`get_after` are the
only public entry points to the ranged form of
`_get_using_file_sequence_order`. Removing them would strand
`num_of_skipped_records`, `total_records_to_return`, `_skip_records` and
the skip loop in `IcebergIterator`.
- `get_uri` has zero references of any kind, so it *is* removable — but
it is a working override, and deleting it silently changes behaviour
from "returns the table location" to "raises `NotImplementedError`" via
`VirtualDocument`'s fallback, and drops parity with Scala's
`IcebergDocument.getURI`. That is an API decision, not a cleanup, so it
is left for a maintainer.

### Verification

| Run | Result |
|---|---|
| `core/architecture/rpc/` | **38 passed** |
| `core/architecture/rpc/` + `core/storage/model/` | 49 passed |
| `core/architecture` + `core/storage` + `test_main_loop.py`, `-m "not
integration"` | 448 passed, 1 deselected |

The deselected test is `test_iceberg_rest_catalog_integration.py`,
excluded by its own `pytestmark`.

`ruff format --check src/main/python src/test/python` → exit 0, "209
files already formatted". `ruff check` → exit 0, "All checks passed!".
`git diff --numstat` shows 0 insertions against 109 deletions, so there
are no incidental rewrites.

### History

| | |
| --- | --- |
| **Introduced by** | #2950 (2024-10-31) — "Migrate scala control
messages to protobuf", which built the Python `AsyncRPCClient` with both
a coordinator stub and this worker-to-worker proxy |
| **Usage removed by** | **never** — no non-test Python file has
referenced `get_worker_interface` at any point in the history |

Dead on arrival. Its only callers are the three tests added by #4744
(2026-05-03), a coverage PR that pinned the already-dead path — which is
why it looks live.

### Any related issues, documentation, discussions?

Closes #7793

### How was this PR tested?

```
python -m pytest src/test/python/core/architecture/rpc/ -q
```

```
38 passed, 1 warning
```

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 5)

Report URL: https://github.com/apache/texera/actions/runs/33608775617

With regards,
GitHub Actions via GitBox

Reply via email to