zhangshenghang opened a new pull request, #12932:
URL: https://github.com/apache/seatunnel/pull/12932

   ### Purpose of this pull request
   
   Yes — this is a contribution to Apache SeaTunnel. This PR fixes 
documentation that contradicts the source code in areas not covered by the 
other open docs PRs: the Zeta REST API references, Zeta operations/deployment 
pages, several transform pages, the FAQ and the schema-feature concept page. 
Every change was verified against the implementation (option definitions, REST 
servlets/services, CLI argument parser, YAML config parser and shipped config 
templates); file/line references are given below so reviewers can re-check 
quickly.
   
   **Documentation issues found and fixed**
   
   *Zeta REST API — `rest-api-v1.md`, `rest-api-v2.md`, 
`rest-api-job-lifecycle.md`, `telemetry.md` (en + zh)*
   
   | Doc said | Code does | Evidence |
   |---|---|---|
   | overview returns `"works"` | field is `workers`; v1 sample also omitted 
`pendingJobs` | `resourcemanager/resource/OverviewInfo.java:33,35` |
   | `/running-jobs` metrics keys `sourceReceivedCount` / `sinkWriteCount` | 
keys are `SourceReceivedCount` / `SinkWriteCount` | `MetricNames.java:28,32` |
   | finished job field `finishedTime`; no `startTime` | `finishTime` 
(`RestConstant.FINISH_TIME`) and `startTime` are emitted | 
`RestConstant.java:45,47`, `BaseService.java:449,576-581` |
   | unknown job returns `{"jobId": ""}` | returns the requested id | 
`JobInfoService.java:114` |
   | `/submit-job`, `/submit-job/upload`, `/stop-job` return numeric `jobId` | 
returned as a JSON string (only batch `/stop-jobs` is numeric) | 
`BaseService.java:1373`, `JobInfoService.java:431,443` |
   | v1 option-rules `type` supports only `source`/`sink`; stale response 
sample | `transform` is accepted; response has `valueConstraints` and 
`conditionOperator*` fields | `OptionRulesService.java`, 
`OptionRuleResponse.java` (shared by v1/v2) |
   | `/logs/:jobId` "add `jobId` in the request body `params`" | GET endpoint; 
id is a path segment | `RestHttpGetCommandProcessor.java` `getAllNodeLog` |
   | `logLink`/`node` samples on `:5801/hazelcast/rest/maps/logs/…`; v2 `/log` 
examples on 5801 | links are built from the Jetty HTTP port (8080) 
`…/logs/<file>` | `LogService.java:95-127` |
   | `/running-jobs?page=` returns a bare array | wrapped as `{"data": [...], 
"total": n}` when `page` is given | `PageBaseServlet.java:41-57` |
   | `/metrics/realtime/jobs` sample lacks `collector` | always returned | 
`RealtimeMetricsServlet.java`, `RealtimeMetricsService.getCollectorStatus()` |
   | `/running-jobs/summary` undocumented | registered on v1 and v2, returns 
`jobId`,`jobName`,`jobStatus`,`createTime` | `RestConstant.java:88`, 
`JettyService.java:258`, `JobInfoService.java:254-303` |
   | job status `CANCELLED` | enum is `CANCELED` | `JobStatus.java:62` |
   | savepoint path "returned in job final state" as `savepointPath`; section 
6.3 documents `restore.mode` / `savepoint.path` env options | no such field or 
options exist; restore is driven only by `restoreMode`/`restoreSourceJobId` | 
`BaseService.java:353-589`, `RestConstant.java:29-31` |
   | `job_count` label list lacks `pending` | exported | 
`JobMetricExports.java:57` |
   
   *Zeta operations — `security.md`, `engine-jar-storage-mode.md`, 
`hybrid-cluster-deployment.md`, `separated-cluster-deployment.md`, 
`user-command.md`, `tcp.md` (en + zh)*
   
   | Doc said | Code does | Evidence |
   |---|---|---|
   | `enable-http` default `true` | default `false` (shipped 
`config/seatunnel.yaml` sets `true`) | `ServerConfigOptions.java:300-304`, 
`config/seatunnel.yaml:44` |
   | jar storage key `connector-jar-storage-enable`, `jar-storage` block at 
YAML root | key is `enable`; `jar-storage` and `coordinator-service` are only 
parsed under `seatunnel.engine` — a root-level block is silently ignored | 
`ServerConfigOptions.java:423-424`, 
`YamlSeaTunnelDomConfigProcessor.java:89-96,247-250,342-345`, 
`seatunnel-engine-common/src/main/resources/seatunnel.yaml` |
   | `max-thread-num` = "max job count executed at same time" | it is the 
coordinator executor `maximumPoolSize` | `CoordinatorService.java:306-308`, 
`ServerConfigOptions.java:493-496` |
   | `seatunnel.sh -h` output | missing `--set-job-id`, 
`--checkpoint-overview`, `--checkpoint-history`, 
`--checkpoint-history-pipeline`, `--checkpoint-history-limit`, 
`--checkpoint-history-status` | `ClientCommandArgs.java:115-148` |
   | members without ports try `5701`, `5702`; `-m` example on `:5701` | 
SeaTunnel ships `port: 5801` (`5802` worker), `auto-increment: false` | 
`config/hazelcast.yaml:33-35`, `config/hazelcast-worker.yaml:27-29` |
   
   *Transforms — `filter.md`, `transform-multi-table.md`, `data-validator.md`, 
`multi-table-transform-and-join-boundary.md`, `recipes.md`, 
`dynamic-compile.md` (en + zh)*
   
   | Doc said | Code does | Evidence |
   |---|---|---|
   | `rule_match_mode` default `-` | `FIRST_MATCH` | 
`TransformCommonOptions.java:51-53` |
   | `field_rules` required = no | required (non-empty) in single-table mode | 
`DataValidatorTransformFactory.java:53-60` |
   | per-table type casting via `FieldMapper` `define_sink_type` option; 
TableMerge example with `merge_by_field` and without `table` | no such options; 
`TableMerge` requires `table` when `table_transform` is absent; real mechanism 
is the `DefineSinkType` transform (`columns`) | `TableMergeConfig.java:38-54`, 
`TableMergeTransformFactory.java:41-61`, 
`DefineSinkTypeTransformConfig.java:43` |
   | a sink can use `table_match_regex` to capture unmatched tables | 
`table_match_regex` is transform-only; unmatched tables pass through via an 
identity transform and a sink receives every table of its input stream | 
`TransformCommonOptions.java:44-48`, `AbstractMultiCatalogTransform.java:106` |
   | "no built-in explode-array-to-rows transform" | SQL transform `LATERAL 
VIEW EXPLODE` | `ZetaSQLFunction.java` `explode(...)`, `sql-functions.md` |
   | `absolute_path` is "Java or Groovy" only | Scala is also a 
`compile_language` | `CompileLanguage.java` |
   
   *Introduction / FAQ — `faq.md`, `introduction/concepts/schema-feature.md` 
(en + zh), `zh/introduction/concepts/incompatible-changes.md`*
   
   | Doc said | Code does | Evidence |
   |---|---|---|
   | CDC does not support tables without a primary key | unique-key fallback, 
else single split; `exactly_once` needs a non-nullable key | 
`AbstractJdbcSourceChunkSplitter.java:528-553`, `incompatible-changes.md` CDC 
entry |
   | CDC source list | missing DB2, OceanBase, Vitess CDC (all have doc 
pages/modules) | `docs/en/connectors/source/*-CDC.md` |
   | `primaryKey.columns` | parser requires `primaryKey.columnNames` and throws 
otherwise | `PrimaryKeyOptions.java:43`, `ReadonlyConfigParser.java:278` |
   | array elements limited to primitives; `"{a = int, b = string}"` 
"equivalent to `{a = int, c = string}`" | `map` and nested `array` elements are 
parsed; typo | `SeaTunnelDataTypeConvertorUtil.java:237-242` |
   | zh `incompatible-changes.md` | missing the whole "Helm Chart: REST API v1 
disabled by default" entry present in en | 
`deploy/kubernetes/seatunnel/conf/hazelcast-master.yaml:21-23`, 
`values.yaml:58-65` |
   
   **Areas / files updated** — 37 files (18 en + 19 zh): 
`docs/{en,zh}/engines/zeta/{rest-api-v1,rest-api-v2,rest-api-job-lifecycle,telemetry,security,engine-jar-storage-mode,hybrid-cluster-deployment,separated-cluster-deployment,user-command,tcp}.md`,
 
`docs/{en,zh}/transforms/{filter,transform-multi-table,data-validator,multi-table-transform-and-join-boundary,recipes,dynamic-compile}.md`,
 `docs/{en,zh}/faq.md`, `docs/{en,zh}/introduction/concepts/schema-feature.md`, 
`docs/zh/introduction/concepts/incompatible-changes.md`.
   
   **English and Chinese docs** — both were audited; every fix is applied to 
both languages where the counterpart has the same content. The only zh-only 
change is the missing Helm Chart section in `incompatible-changes.md` (en 
already has it).
   
   **Duplicate check (PRs from the last 7 days)** — I listed every docs PR 
opened since 2026-10-13 and compared file lists. The open docs PRs #12911, 
#12865, #12813, #12771, #12730, #12709, #12693 cover 
connector/getting-started/sql-transform pages and share **no files** with this 
PR. #12856 (OpenAPI contract) touches `rest-api-v2.md` but only inserts one 
introductory paragraph at the top of the API reference; none of the 
field-name/sample/port fixes here overlap with it, so both can merge 
independently. #12859 (Copy transform) and #12784 (`seatunnel-cli`) touch files 
not modified here.
   
   ### Does this PR introduce _any_ user-facing change?
   
   Documentation only. No code, configuration options or defaults are changed.
   
   ### How was this patch tested?
   
   - `markdown-link-check -c .dlc.json` (the tool used by the `dead-link` CI 
job, same version 3.8.7) run on all 37 changed files — 0 failures.
   - A script resolved every relative `.md` link in the changed files — all 
targets exist.
   - All JSON code blocks touched by this change (48 blocks) were parsed with 
`json.loads`; the only two non-parsing blocks are the pre-existing 
`"transform": [...]` fragments in the multi-table boundary doc, which are 
intentionally partial. All YAML blocks in the deployment / jar-storage pages 
(76 blocks) were parsed with Ruby `YAML.safe_load`.
   - Not run: `./mvnw spotless:apply` / `./mvnw -DskipTests verify` — this PR 
contains no Java or build changes, so the Spotless and compile checks cannot be 
affected; the Docusaurus site build was not run locally because the dead-link 
and parse checks above cover the content of these markdown-only edits.
   
   ### Check list
   
   * [x] If any new Jar binary package adding in your PR, please add License 
Notice according [New License 
Guide](https://github.com/apache/seatunnel/blob/dev/docs/en/developer/new-license.md)
 — N/A
   * [x] If necessary, please update the documentation to describe the new 
feature. https://github.com/apache/seatunnel/tree/dev/docs
   * [x] If necessary, please update `incompatible-changes.md` to describe the 
incompatibility caused by this PR. — zh `incompatible-changes.md` synced with 
en; no new incompatibility introduced
   * [x] If you are contributing the connector code, please check that the 
following files are updated — N/A
   


-- 
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]

Reply via email to