DanielLeens opened a new pull request, #13008:
URL: https://github.com/apache/seatunnel/pull/13008
> Supersedes #11613. The commits, authorship and review history of that PR
are carried over unchanged (head `117cf5289a`). It is reopened from a fork
where GitHub Actions can run: the fork behind #11613 has been disabled by
GitHub's usage-based fork workflow limit since 2026-09-15, so no `Build` run
could be created for any head after `a947704bf`, and the owner could not be
reached to re-enable it. Review threads on #11613 (SEZ9, DanielLeens) remain
the reference; all points are addressed there except refreshed screenshots,
which will follow in a separate docs PR.
### Purpose
Closes #11579.
This PR adds common Zeta Web UI operation controls while keeping the UI as a
thin client over Zeta REST APIs.
### Changes
- Add job submission from configuration text or an uploaded configuration
file, with checkpoint or savepoint restore via the explicit `restoreMode` /
`restoreSourceJobId` contract.
- Add running-job controls for graceful stop, savepoint stop, and force
cancel, each with confirmation and visible status feedback.
- Add checkpoint overview/history and restore-latest-state entry points from
Job Detail. Restore controls stay disabled until the source job reaches an end
state; the engine checks again on submission.
- Add an Operations page for connector OptionRule metadata and a read-only
HTTP service status view that omits sensitive values.
- Add local-worker tag management with an explicit target UUID,
matching-server validation, and string-only values for the new structured
endpoint, integrated with the worker resource table that landed on `dev` in
#12398.
- Reject a `restoreMode` submission while the source job has not reached an
end state, and fail non-numeric `restoreSourceJobId` values with a clear `400`.
The submit panel now shows the engine's failure message so operators see why a
restore was refused.
- Document the behavior in English and Chinese, and add regression coverage
for tag compatibility, status-response secrecy, member identity in
`/system-monitoring-information`, the restore guard, and REST E2E for the two
new endpoints.
### Compatibility and safety
- Existing REST endpoints and request fields are preserved.
- `/update-tags` retains its original legacy flat-map request contract
exactly; no key is reserved, and non-string values still convert to strings for
compatibility. Only the new `/update-local-member-tags` endpoint rejects
non-string tag values with HTTP 400.
- The Web UI uses the additive `/update-local-member-tags` endpoint with `{
uuid, tags }`. The UUID must match the node serving that REST request; remote
worker rows stay read-only. Both new endpoints sit on the same servlet context
as every other endpoint, so basic auth and mTLS apply unchanged.
- The HTTP status endpoint returns only operational booleans, ports, and
context data. Passwords, usernames, and keystore/truststore paths are never
returned. `mutualTlsEnabled` reflects the effective Jetty SSL context.
- The legacy `isStartWithSavePoint` + `jobId` path is untouched; the
restore-source guard applies only to the explicit `restoreMode` contract.
- `/system-monitoring-information` entries gain additive `uuid`,
`localMember` and `tags` fields, including for members that timed out, on top
of the bounded fan-out introduced in #12161.
### Review follow-ups addressed in the current head
- F1 `/update-tags` flat example uses plain tag keys and states that no key
is reserved.
- F2 `RestApiIT` now exercises `/http-service/status` and
`/update-local-member-tags` over real HTTP on both the Jetty and Hazelcast REST
ports, including the UUID mismatch rejection.
- F3 Docs state that both new endpoints share the existing basic-auth / mTLS
chain.
- F4 Docs call out the load-balancer limitation of the local-only UUID check
(REST API and Web UI pages).
- F5 Dedicated `/update-local-member-tags` section with request, response
and error examples, including non-string tag values; unit and REST regression
cases now cover that rejection without changing legacy `/update-tags` coercion.
- F6 Server-side guard: restore is refused while the source job is still
active; `No checkpoint found` is returned when the state was cleaned up. The
Web UI guide now states both operator-visible outcomes. Covered by
`JobInfoServiceRestoreGuardTest` and REST submit tests.
- F7 Per-field descriptions and consistent default example ports (`8080` /
`8443`) for `/http-service/status`.
- F8a Checkpoints restore controls now track the source job's terminal
status, with a UI regression test and matching en/zh docs.
- F8 Removed the outdated Running Jobs and Job Detail screenshots.
Replacement screenshots for the new controls are not included because a current
UI runtime was not available for capture.
### Verification
- Merged `apache/dev` at `99ea16b9d` and resolved the two en/zh
incompatible-changes documentation conflicts, preserving both the upstream WAL
migration note and this PR's restore guard note.
- `./mvnw -pl
seatunnel-engine/seatunnel-engine-server,seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base
spotless:apply -nsu -Dmaven.gitcommitid.skip=true`
- `[email protected] --check` passed for the five UI TypeScript/TSX files at
prior head `4aba1e689`; the latest commit changes no UI TypeScript/TSX.
- `git diff --check apache/dev` and conflict/scope checks.
Per the SeaTunnel local-validation rule for this workspace, local
compilation and unit/integration/E2E tests were not run. Scoped Spotless and
`git diff --check` passed for the latest commit `379efa74e`. GitHub CI has not
validated this head: fork Actions remain disabled by GitHub's usage-scale gate,
and a manual Build dispatch for the current head returned HTTP 422 (`Actions
has been disabled for this repository`). The fork maintainer must re-enable
Actions in the fork's Actions page before a current-head Build run can exist.
### Open follow-up
- Screenshots for the new Action controls, Submit Job panel, Checkpoints
tab, Operations page and tag editor are not included; the outdated Running Jobs
and Job Detail images were removed. They need a local UI run against fixtures
and will come in a separate docs PR.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]