Skip to content

Trial: revert breaking changes for 10.2.0 readiness#13189

Draft
cmcfarlen wants to merge 19 commits into
apache:masterfrom
cmcfarlen:revert-incompat-trial-v2
Draft

Trial: revert breaking changes for 10.2.0 readiness#13189
cmcfarlen wants to merge 19 commits into
apache:masterfrom
cmcfarlen:revert-incompat-trial-v2

Conversation

@cmcfarlen
Copy link
Copy Markdown
Contributor

Status

Draft / discussion only — not proposed for merge as-is.

This branch is the output of a trial exercise to answer the question:
"How painful would it be to ship 10.2.0 from a master with all
backward-incompatible changes reverted?"

It builds cleanly. It is not a release candidate.

What's in here

13 reverts + 1 build-tooling fix:

# PR What Why
1 #13090 Config reload error reporting Depends on #12892 (in 11-Dev)
2 #13110 _reload directive Depends on #12892
3 #13117 Cap TLS cert compression length Depends on #13088
4 #13088 TLS Cert Compression (RFC 8879) Depends on config/ssl_multicert.h (in 11-Dev #12755)
5 #13070 plugin.config → plugin.yaml Incompatible-labeled; depends on config_result.h (in 11-Dev)
6 #13048 Coverity fix on storage Depends on #13031
7 #13031 storage.config + volume.config → storage.yaml Incompatible-labeled
8 #12998 Parallel SSL cert load Depends on #12755 (in 11-Dev)
9 #12988 Publish remap table after initial load Surface conflict on ReverseProxy.cc with #12997
10 #12997 remap.yaml support Depends on ConfigRegistry from #12892 (in 11-Dev)
11 #12983 11-Dev merge (with -m 1) Brings in #11135, #11157, #12670, #12755, #12892, #12896, etc.
12 #12913 Master-side bump to 11.0.0 Incompatible-labeled
13 #12404 cqssrt log field for TLS resumption Restored function references m_http_sm which #13123 renamed to m_data
tools Skip files staged for deletion in cmake-format.sh Build-tooling fix, useful regardless

The last one is a real upstream improvement worth landing on its own;
the rest are trial exploration.

What this trial proved

What this trial does NOT prove

  • Tests have not been run on this branch.
  • Three months of Incompatible-tagged + un-tagged behavior changes
    exist on master that may not be captured here.
  • This branch loses several useful features (plugin.yaml, remap.yaml,
    TLS cert compression, parallel SSL cert load, the new config-reload
    framework). Production would need to decide which to defer to 11.0.0
    and which to re-implement compat-friendly versions of for 10.2.0.

Detailed notes

See the comment below for the full execution log including conflict
resolution decisions, build verification, and effort breakdown.

🤖 Generated with Claude Code

cmcfarlen added 14 commits May 21, 2026 15:35
The cmake-format script invokes git ls-tree -r HEAD which lists files
present at the previous commit. When a file is staged for deletion (e.g.
during a revert), it shows up in the file list but no longer exists on
disk, causing cmake-format to fail with FileNotFoundError. Filter the
list against git diff --cached --name-only --diff-filter=D so deleted
files don't reach cmake-format.
@cmcfarlen
Copy link
Copy Markdown
Contributor Author

Trial Revert v2 — Notes

Companion log for revert-incompat-plan-v2.md. Each section captures one
revert step on branch revert-incompat-trial-v2.

Setup

  • Source branch: upstream/master
  • Source HEAD: 09c4f8a125 (Enable code review settings in .asf.yaml, Enable code review settings in .asf.yaml #13183)
  • Trial branch: revert-incompat-trial-v2
  • Plan: 11 reverts, dependency-aware order, pre-emptive LogAccess
    fix-up after 11-Dev revert.

Reverts

Step 1–4: Config-reload + TLS-cert-compression dependents

Step PR Commit Result
1 #13090 4645b7dcb3 clean, 43 files / +227 -903
2 #13110 34790b0a9d clean, 10 files / +11 -657
3 #13117 4f1d3594dd clean, 4 files / -27
4 #13088 b98d8d0b31 clean (large; deletes TLS cert compression infra)

Step 5: #13070 plugin.yaml migration

Commit 49d109470b
Result clean (was 6 conflicts in v1; the dependent reverts cleared the path)

Step 6–7: Storage migration chain

Step PR Commit Result
6 #13048 9828150402 clean, 3 files
7 #13031 6d32974095 clean (was 5 conflicts in v1; #13048 + #13070 reverts already removed)

Step 8: #12998 Parallel SSL cert load

Commit e5136dde5b
Result clean, 8 files (auto-merged records.yaml docs, RecordsConfig.cc, SSLConfig.cc)

Step 9: #12988 + #12997 — surface conflict on ReverseProxy.cc

Initially attempted git revert #12997 directly. Hit:

Aborted, added #12988 ("Publish remap table after initial load") to the
revert list. #12988 is not incompatible — it's a compat improvement —
but it touched the same init_reverse_proxy() block as #12997, creating a
surface-level conflict.

Revert order: #12988#12997. Both clean after that.

Step PR Commit
9a #12988 f0b3be46b7
9b #12997 8ef420635d

Step 10: 11-Dev merge (#12983)

Commit 30a01d6e41
Result 9 conflicts (down from 17 in v1 — dependent reverts cleared most surfaces)

Conflict resolution:

  • Manual: Filenames.h, hostdb/CMakeLists.txt (kept Relocate HostDB tests and benchmark to standard directories #13115 add_subdirectory(unit_tests)), records/CMakeLists.txt (kept only test_RecDumpRecords.cc), P_SSLConfig.h (restored session-cache fields).
  • --theirs: SSLUtils.cc (tightly coupled to ssl_multicert.yaml), 4× gold tests.
  • git rm: 1 UD file (negative-caching-malformed-cc.replay.yaml).

Step 11: #12913 master-side version bump

Commit f0f4f16149
Result clean, 1 line

Step 12 (added during execution): #12404 cqssrt log field

After 11-Dev revert, the restored marshal_client_ssl_resumption_type
function referenced m_http_sm, which #13123 (kept on master, in 10.2.x as
#13124) renamed to m_data. v1 fixed this with a fixup commit; v2 instead
reverts the original PR (#12404) for cleanliness.

Commit 26cafc24d2
Result clean, 5 files / +3 -49

#12404 is in both master and 10.2.x (pre-divergence). Reverting it on
the trial branch is safe; reverting it in production would require also
removing the cqssrt log field from 10.2.x (out of scope for the trial).

Step 13 (incidental): cmake-format.sh fix

Format hook hung because git ls-tree -r HEAD listed
src/config/CMakeLists.txt (which had been deleted by an earlier revert)
and cmake-format raised FileNotFoundError. Patched the script to
filter out files staged for deletion via
git diff --cached --name-only --diff-filter=D.

Commit 3a8d37117b
Status useful for upstream — not a revert

Build verification

$ cmake --build build-mydev
[265/266] Linking CXX executable src/traffic_server/traffic_server
$ echo $?
0

traffic_server binary built cleanly (18 MB). Some ld: warning: ignoring duplicate libraries are present but cosmetic, not errors.

Final state vs upstream/10.2.x

  • 261 commits on trial-v2 not on 10.2.x (master-additive PRs that survived)
  • 98 commits on 10.2.x not on trial-v2 (10.2.x branch-specific work)
  • 507 files changed, +15,778 / -3,869 lines

v2 verdict: how painful, with lessons applied?

Mechanical effort once dependencies were known: ~90 minutes total.
13 reverts including the two discovered during execution (#12988, #12404).

Cost categories that v1 surfaced and v2 confirmed:

  1. Direct conflicts — small. Replace storage.config and volume.config with storage.yaml #13031 had 0 conflicts in v2 vs 5 in v1
    once the dependent reverts (plugin.config to plugin.yaml migration.  #13070, Fix Coverity 1646593-1646605 #13048) ran first. The 11-Dev
    merge had 9 conflicts vs 17 in v1.
  2. Dependency-chain reverts — predictable but additive. The plan
    identified 7 dependents up front. One more (Publish remap table after initial load #12988) surfaced as a
    surface conflict during execution.
  3. Silent post-merge dependencies — eliminated by reverting Add support for TLS Certificate Compression (RFC 8879) #13088,
    Parallell ssl cert load #12998, Support remap.yaml #12997 before the 11-Dev merge. The build went clean on
    first attempt afterward.
  4. cqssrt log field for TLS resumption type #12404-style "old PR uses now-renamed member" — predicted, found.
    Pre-emptive fix-up was in the plan; user preferred clean revert
    instead of fix-up.

Revised effort estimate for production:

Trial branch state at completion

  • Branch: revert-incompat-trial-v2
  • HEAD: 3a8d37117b (cmake-format.sh fix)
  • Build: clean
  • Notes file and plan are uncommitted (intentional; trial artifacts)

cmcfarlen added 5 commits May 21, 2026 16:37
CI Linux build hits a CMake configuration error reporting a cycle
between the RESCAN link group and configmanager. configmanager links
PRIVATE ts::proxy (a member of the group), and ts::logging in the
group links PUBLIC ts::configmanager (added by apache#13123, kept on this
trial because it was backported to 10.2.x).

On master, the 11-Dev merge restructured configmanager to depend on
ts::records instead of ts::proxy, breaking the cycle. This trial
reverts that restructuring; adding configmanager into the RESCAN
group lets the linker resolve the cycle the same way it does for
the other libs in the group.

macOS doesn't hit this because its linker takes the non-RESCAN
codepath.
The 11-Dev merge revert in this trial branch left unresolved conflict
markers in this test file (lines 26, 28, 289) which broke yapf in CI.
Resolved by taking the pre-11-Dev (parent-of-merge) version, consistent
with the rest of the 11-Dev revert.
PR apache#13087 (Fix AuTest with ssl_multicert) updated four tests to use
the new ssl_multicert_yaml autest API after apache#12755 migrated the
config file. This trial branch reverts apache#12755 (and the apache#13087
update was missed), leaving these tests referencing an attribute
the framework no longer exposes.
apache#13033 (tests/gold_tests/headers tests: use ATSReplayTest) deleted
these gold files when migrating cachedIMSRange.test.py to ATSReplayTest.
This trial branch reverts the cachedIMSRange test back to the pre-apache#13033
form (via the 11-Dev merge revert), which still references the original
gold files.

Restored verbatim from the parent of 49cb7c8.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant