Andrey Yarovoy created HDDS-16683:
-------------------------------------
Summary: Upgrade Jetty from 12.0.38 to 12.1.13
Key: HDDS-16683
URL: https://issues.apache.org/jira/browse/HDDS-16683
Project: Apache Ozone
Issue Type: Improvement
Reporter: Andrey Yarovoy
h2. Problem
HDDS-8280 moved Ozone from Jetty 9.4 to Jetty \{{12.0.38}} on the EE8
environment (\{{javax.servlet}} 4.0).
Jetty has since opened the \{{12.1.x}} line, currently at \{{12.1.13}}, which
is where new work and most
fixes now land.
This is a get-ahead-of-it upgrade, not a forced one: the \{{12.0.x}} line is
still actively released
(\{{12.0.39}} shipped after our pin), so nothing is end-of-life today. The
reason to do it now is that the
Ozone surface is small and verifiably unaffected, which will not stay true
indefinitely — and \{{12.1.x}}
is also where the Jakarta EE 11 environment lives, which is the eventual exit
path off EE8.
h2. Current shape
| Item | Value | Where |
|---|---|---|
| \{{jetty.version}} | \{{12.0.38}} | \{{pom.xml}} L113 |
| BOMs | \{{org.eclipse.jetty:jetty-bom}} +
\{{org.eclipse.jetty.ee8:jetty-ee8-bom}} | \{{pom.xml}} L263-271 |
| \{{servlet-api.version}} | \{{4.0.9}}
(\{{org.eclipse.jetty.toolchain:jetty-servlet-api}}) | \{{pom.xml}} L201, L1585
|
| EE8 artifacts in use | \{{jetty-ee8-}}\{{{}servlet, webapp, nested, proxy,
cdi{}}} | framework, server-scm, ozone-manager, recon, s3gateway,
httpfsgateway, integration-test-s3 |
| Jetty import footprint | 30 distinct types — \{{server.*}}, \{{util.*}},
\{{http.*}}, \{{ee8.*}} only | 13 files |
h2. Proposed change
Bump \{{jetty.version}} to \{{12.1.13}}. Keep EE8, keep
\{{servlet-api.version}} at \{{4.0.9}}, keep every
artifact coordinate. In principle a one-property change plus whatever the
verification below turns up.
h2. Behavior-default changes to assert, not assume
These are the real risk in this upgrade. Each is a silent default flip in a
knob Ozone does not currently
set, so the existing tests would not notice:
* \{{HttpConfiguration.maxResponseHeaderSize}} default \{{-1}} → \{{16384}}.
* \{{HttpConfiguration.relativeRedirectAllowed}} default flipped to \{{true}}
(jetty#11947).
* \{{SslContextFactory.renegotiationAllowed}} default → \{{false}}
(jetty#12378).
* Session \{{flushOnResponseCommit}} default → \{{true}} (jetty#12339).
* \{{UriCompliance}} is now also applied to query-string parsing (jetty#12750),
and a new
{\{UriCompliance.Violation.FRAGMENT}} exists (jetty#11579). This touches Ozone
directly:
{\{OZONE_AMBIGUOUS_URI_COMPLIANCE}} in \{{HttpServer2}} and the
\{{allowAmbiguousUri}} opt-ins in S3
Gateway and httpfs.
* EE8/EE9 \{{ContextHandler.setCompactPath}} behavior was restored for
back-compat (jetty#12821).
h2. Scope
Included: the version bump, any exclusion or \{{dependency:analyze}} fallout it
causes, and tests covering
the default flips above — extending \{{TestHttpServer2}},
\{{TestHttpServer2SSL}} and \{{TestBaseHttpServer}}
rather than adding new suites.
Out of scope: migrating off EE8 to EE10 or EE11, and adopting any new 12.1
feature
(\{{CompressionHandler}}, the new deployer, \{{MultiAuthenticator}}). Each is
its own Jira.
h2. How to verify
# \{{mvn -q validate}} at root (sortpom \{{verifyFailOn=Strict}}), then
{\{mvn clean install -DskipTests -DskipShade -DskipRecon -DskipDocs}}.
# \{{mvn dependency:tree
-Dincludes=org.eclipse.jetty:*,org.eclipse.jetty.ee8:*,org.eclipse.jetty.toolchain:*}}
— every coordinate reads \{{12.1.13}} (\{{4.0.9}} for \{{jetty-servlet-api}});
no \{{12.0.*}}, no \{{9.4.*}},
no \{{ee9}}/\{{ee10}}/\{{ee11}}.
# \{{mvn dependency:tree -Dincludes=javax.servlet:*,jakarta.servlet:*}} — empty.
# \{{build.sh}} *without* \{{-Dmdep.analyze.skip}} — \{{analyze-only}} runs at
\{{verify}} and "Used
undeclared dependency" is CI-fatal.
# Framework and s3gateway unit suites; then \{{checkstyle.sh}}.
# \{{mvn -Pdist -DskipTests package}}, then \{{dependency.sh}} and
\{{license.sh}}, applying the reported
{\{jar-report.txt}} diff mechanically.
# Compose smoketests — \{{ozone}}, \{{ozonesecure}}, the s3/secret suites, and
an httpfs run —
spot-checking \{{/conf}}, \{{/jmx}}, \{{/prom}}, \{{/logLevel}}, \{{/stacks}},
\{{/logs}}, \{{/static}}, the
Recon UI, and S3 Gateway XML content types. The dist-only runtime regressions
in HDDS-8280 (Recon JAXB,
s3g Weld bean discovery) were invisible to unit tests, so the dist run is not
optional.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]