morningman opened a new pull request, #70475:
URL: https://github.com/apache/doris/pull/70475

   ### Background
   
   FE REST endpoints such as `get_load_state` forward follower requests to the 
master. Internal FE clients also serve checkpoint synchronization, manager 
operations and audit loading. HTTPS deployments need those clients to select a 
matching protocol, port and trust store.
   
   ### What problem does this PR solve?
   
   Issue Number: #70425
   Related PR: #60921 (original FE HTTPS support), #64697 (required follow-up 
fixes), #63918 (companion BE small-file support), #64670 (port helper already 
present), #70472 (branch-4.1 companion backport)
   PR Type: Bugfix
   
   Problem Summary:
   
   Backport #60921 and its required companion fixes #64697 and #63918 to 
branch-4.2. An HTTPS request to a follower currently forwards to the master's 
HTTP port and returns an error envelope. The patch selects the HTTPS endpoint, 
trusts certificates from the FE HTTPS keystore, keeps BE stream-load redirects 
on HTTP, and allows BE small-file downloads to use the HTTPS port advertised by 
the FE.
   
   ### Details
   
   - **Change map:** 371 changed lines in production code and 301 in tests; no 
generated files or documentation. The production changes cover internal FE URLs 
and clients, FE-keystore trust, FE-to-BE redirect selection, audit loading, and 
the companion BE small-file retry.
   - **Frequency:** HTTPS requests that require follower-to-master forwarding 
fail when the HTTP and HTTPS listeners use different ports.
   - **Root cause:** The original forwarding code combines the incoming HTTPS 
scheme with `getMasterHttpPort()`, which advertises the HTTP port on this 
branch.
   - **Why existing tests missed it:** The forwarding unit-test shortcut uses 
the request's own endpoint. The upstream URL, client-selection and redirect 
tests cover the individual behaviors, but there is no real multi-FE HTTPS 
integration test in this backport.
   - **Fix:** Reuse `HttpURLUtil.buildInternalFeUrl()` and the upstream 
internal TLS client. Include #64697 so FE HTTPS trust does not depend on the 
separate MySQL truststore and HTTP BE requests keep using a plain client. 
Include #63918 because the heartbeat now advertises `https_port` to BEs.
   - **Other paths and branches:** The branch-4.1 companion backport is #70472. 
Master already contains the upstream fixes. This PR does not target branch-4.0 
or branch-4.1.4.
   
   ### Testing
   
   - `mvn -B -pl fe-core checkstyle:check` (from `fe/`): passed, zero 
violations.
   - `bash run-fe-ut.sh --run 
'org.apache.doris.common.util.HttpURLUtilTest,org.apache.doris.common.util.InternalHttpsUtilsTest,org.apache.doris.httpv2.rest.RestBaseControllerTest,org.apache.doris.httpv2.rest.manager.HttpUtilsTest,org.apache.doris.system.HeartbeatMgrTest,org.apache.doris.nereids.minidump.MinidumpUtTest'`:
 passed, 20 tests reported, 19 passed and one existing skipped test; no 
failures or errors.
   - `build-support/check-format.sh` with clang-format 16: passed; the 
companion branch already ran the formatter on the identical BE source.
   - `build-support/run-clang-tidy.sh --base HEAD --build-dir be/build_ASAN`: 
no warnings on the changed C++ lines. This branch predates the helper, so the 
master helper was run from a temporary file with its repository-root path set 
explicitly. It used the compilation database generated by the branch-4.1 build 
in the same checkout; the changed BE translation unit is identical on both 
backports.
   - `git diff --cached --check`: passed.
   - Full BE build was attempted on the companion branch-4.1 backport (#70472): 
configuration succeeded, but compilation failed in unchanged 
ANN/runtime-profile code because LLVM 22 diagnoses `__COUNTER__` as a C2y 
extension under `-Werror`. A full BE build was not repeated on branch-4.2; 
linking and runtime tests are not verified.
   - No live cluster, multi-FE HTTPS integration, or BE HTTPS download test was 
run. The header-hygiene helper is absent from this release branch.
   
   ### Notes for Reviewers
   
   Conflict resolution preserves the branch's existing FE metadata 
authentication token, log redaction, JMockit-based heartbeat tests, audit-log 
GZIP compression, and minidump-test assertions. The existing `getHttpPort()` 
helper is retained once; upstream URL tests are appended to the existing token 
tests. In the BE retry, failure to truncate the partial download returns an 
error instead of continuing with an invalid temporary file.
   
   Review checks:
   
   - Goal and scope: the forwarding defect is addressed through the upstream 
shared URL/client path; companion changes prevent known regressions from a 
partial pick.
   - Concurrency and lifecycle: the upstream volatile, synchronized SSL-context 
cache and per-request client ownership are preserved; cached certificates 
require an FE restart after rotation.
   - Configuration: no new options or defaults. Internal FE URLs use the local 
`enable_https` and listener port, so FE protocol/port settings must be uniform 
and the HTTPS keystore must contain the relevant trusted certificates or CA 
chain.
   - Compatibility: no Thrift/protobuf IDs, persisted formats or transaction 
semantics change. Deploy the companion BE support before relying on HTTPS-port 
heartbeats during a rolling upgrade.
   - Parallel paths and conditions: FE forwarding, metadata synchronization and 
manager clients use the shared helpers; BE redirects and BE manager requests 
retain HTTP.
   - Tests and expected output: upstream unit tests are retained, with no 
handwritten regression output. Real follower/master HTTPS and BE HTTPS download 
integration tests remain unexecuted locally.
   - Observability and performance: existing exception logging is retained; 
SSL-context initialization remains cached, and plain HTTP does not construct 
the HTTPS client.
   - Data writes and FE/BE propagation: label-state and transaction logic are 
unchanged; the existing heartbeat port field carries the selected FE listener, 
paired with the BE fallback.
   
   ### Release note
   
   Fix FE HTTPS forwarding from followers to the master, including load-state 
queries. Internal FE communication and audit loading use the configured HTTPS 
listener and keystore; BE stream-load redirects continue to use HTTP, and 
small-file downloads support HTTPS-enabled FEs.
   
   ### Check List (For Author)
   
   - Behavior changed: Yes (see Details).
   - Does this need documentation: No new configuration; deployment assumptions 
are recorded above.
   - Pre-submission status: Partially verified: FE unit tests, Java style, C++ 
formatting and changed-line static analysis pass; full BE build remains 
unverified after the companion backport encountered the local LLVM 22 warning 
above, and live HTTPS integration remains unverified.
   
   ### AI Disclosure
   
   - Tool: Codex (GPT-6).
   - Generated: Backport conflict resolutions, a BE error-propagation 
adjustment, and this description. Other code and tests originate in the linked 
upstream PRs.
   - Human review: Pending maintainer review.
   


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


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to