Skip to content

FELIX-6750 Update Felix HTTP to Jetty 12.1.9#376

Open
paulrutter wants to merge 94 commits into
masterfrom
feature/FELIX-6750-Jetty-12.1.0-tryout
Open

FELIX-6750 Update Felix HTTP to Jetty 12.1.9#376
paulrutter wants to merge 94 commits into
masterfrom
feature/FELIX-6750-Jetty-12.1.0-tryout

Conversation

@paulrutter
Copy link
Copy Markdown
Contributor

@paulrutter paulrutter commented Jan 20, 2025

Updates Felix HTTP to Jetty 12.1.9 (release notes).

  • org.apache.felix.http.jetty12 bumped to 1.2.0-SNAPSHOT
  • Migrated to Jetty EE11 (servlet API 6.1)
  • Added org.eclipse.jetty.compression.* to exports
  • Added dependencies on jetty-compression-gzip and jetty-compression-common

- 1.1.0-SNAPSHOT
- Use jetty 12.1.0-alpha1
- Add `org.eclipse.jetty.compression.*` to exports
- Add dependency on jetty-compression-gzip (not sure if this is required, maybe only for the client) and jetty-compression-common
- Move to EE11
- Skip baselining to prevent errors in the baseline phase because of changed API's in 6.1.0
- Pass local maven repo to be able to get to the snapshot version of the servlet-api bundle
- Build servlet-api, as it's used in the Jetty bundles
@paulrutter
Copy link
Copy Markdown
Contributor Author

@cziegeler i did a first attempt on getting the http.jetty12 bundle to using Jetty 12.1.0 (servlet API 6.1).

Once it's GA we can revisit and check the open ends (like the servlet-api bundle failing on the baseline phase, we might need to remove version 5.0 and 6.0 from this bundle to get this resolved, as the servlet API actually changed in 6.1).

- Update wrappers to implement new methods for servlet-api 6.1. This will break backwards compatbility though
@cziegeler
Copy link
Copy Markdown
Contributor

Thanks, thats great.
Your changes to the servlet-api bundle look good - we always include the latest version (6.1 in this case) and export it as all earlier versions (5 and 6 in this case). While this is not 100% correct, it is usually good enough as the versions are compatible and code is not compiled against this bundle - it is just used at runtime.
There is of course the exception of servlet 6 which is not fully compatible to servlet 5 - due to removed methods -but we have that problem already today.

paulrutter and others added 20 commits January 22, 2025 09:01
# Conflicts:
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySpecificWebsocketIT.java
#	http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/FelixJettyWebSocketServlet.java
#	http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServletAlternative.java
# Conflicts:
#	http/itest/pom.xml
#	http/jetty/pom.xml
#	http/jetty12/pom.xml
#	http/samples/whiteboard/pom.xml
…#375)

Bumps [ch.qos.logback:logback-core](https://github.com/qos-ch/logback) from 1.3.12 to 1.3.15.
- [Commits](qos-ch/logback@v_1.3.12...v_1.3.15)

---
updated-dependencies:
- dependency-name: ch.qos.logback:logback-core
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ch.qos.logback:logback-core](https://github.com/qos-ch/logback) from 1.3.12 to 1.3.15.
- [Release notes](https://github.com/qos-ch/logback/releases)
- [Commits](qos-ch/logback@v_1.3.12...v_1.3.15)

---
updated-dependencies:
- dependency-name: ch.qos.logback:logback-core
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps org.apache.felix:org.apache.felix.webconsole from 4.0.0 to 4.9.10.

---
updated-dependencies:
- dependency-name: org.apache.felix:org.apache.felix.webconsole
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- Fix FIXME, handle async with future
- Reset FIXME, AsynchronousCloseException still happens
# Conflicts:
#	http/base/pom.xml
#	http/itest/pom.xml
#	http/jetty12/pom.xml
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
#	http/samples/whiteboard/pom.xml
@paulrutter
Copy link
Copy Markdown
Contributor Author

Moved to 12.1.0.beta1

# Conflicts:
#	http/base/pom.xml
#	http/jetty12/pom.xml
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
#	http/samples/whiteboard/pom.xml

Update to 12.1.0.beta2
# Conflicts:
#	http/base/pom.xml
#	http/jetty12/pom.xml
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
#	http/samples/whiteboard/pom.xml
@paulrutter
Copy link
Copy Markdown
Contributor Author

2025-08-20T11:22:46.6539890Z [�[1;31mERROR�[m] org.apache.felix.http.jetty.it.JettySizeLimitHandlerIT.testRequestResponseLimits -- Time elapsed: 1.154 s <<< ERROR!
2025-08-20T11:22:46.6542634Z java.io.EOFException: oejcti.HttpConnectionOverHTTP@48dc780c::oeji.SocketChannelEndPoint@5a81bc0a[{l=/127.0.0.1:59234,r=localhost/127.0.0.1:40165,ISHUT,fill=-,flush=-,to=2/30000}{io=0/0,kio=0,kro=1}]->[oejcti.HttpConnectionOverHTTP@48dc780c(l:/127.0.0.1:59234 <-> r:localhost/127.0.0.1:40165,closed=false)=>oejcti.HttpChannelOverHTTP@2f563bdc(exchange=HttpExchange@666c142c{req=oejct.HttpRequest[GET /withinlimit/a HTTP/1.1]@1c8306b9[TERMINATED/null] res=HttpResponse[null 0 null]@6069c786[PENDING/null]})[send=oejcti.HttpSenderOverHTTP@48515fd5(req=QUEUED,failure=null)[oejh.HttpGenerator@63e652cb{s=START}],recv=oejcti.HttpReceiverOverHTTP@3991f71a(ex=HttpExchange@666c142c{req=oejct.HttpRequest[GET /withinlimit/a HTTP/1.1]@1c8306b9[TERMINATED/null] res=HttpResponse[null 0 null]@6069c786[PENDING/null]},rsp=IDLE,failure=null)[oejh.HttpParser{s=CLOSED,0 of -1}]]]
2025-08-20T11:22:46.6543002Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:550)
2025-08-20T11:22:46.6543184Z 	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1799)
2025-08-20T11:22:46.6543569Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:323)
2025-08-20T11:22:46.6543939Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.parseAndFill(HttpReceiverOverHTTP.java:252)
2025-08-20T11:22:46.6544293Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.receiveNext(HttpReceiverOverHTTP.java:537)
2025-08-20T11:22:46.6544542Z 	at org.eclipse.jetty.util.thread.Invocable$ReadyTask.run(Invocable.java:178)
2025-08-20T11:22:46.6544790Z 	at org.eclipse.jetty.util.thread.SerializedInvoker$Link.run(SerializedInvoker.java:274)
2025-08-20T11:22:46.6545016Z 	at org.eclipse.jetty.util.thread.SerializedInvoker.run(SerializedInvoker.java:174)
2025-08-20T11:22:46.6545272Z 	at org.eclipse.jetty.client.transport.HttpReceiver.responseHeaders(HttpReceiver.java:247)
2025-08-20T11:22:46.6545602Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:335)
2025-08-20T11:22:46.6546118Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.parseAndFill(HttpReceiverOverHTTP.java:252)
2025-08-20T11:22:46.6546455Z 	at org.eclipse.jetty.client.transport.internal.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:85)
2025-08-20T11:22:46.6546784Z 	at org.eclipse.jetty.client.transport.internal.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:97)
2025-08-20T11:22:46.6547154Z 	at org.eclipse.jetty.client.transport.internal.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:267)
2025-08-20T11:22:46.6547581Z 	at org.eclipse.jetty.client.transport.internal.HttpConnectionOverHTTP$FillableCallback.succeeded(HttpConnectionOverHTTP.java:458)
2025-08-20T11:22:46.6547756Z 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
2025-08-20T11:22:46.6548012Z 	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
2025-08-20T11:22:46.6548241Z 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:999)
2025-08-20T11:22:46.6548511Z 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1229)
2025-08-20T11:22:46.6548752Z 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1184)
2025-08-20T11:22:46.6548871Z 	at java.base/java.lang.Thread.run(Thread.java:1583)

Again when switching to 12.1.0 (only on java 21 and 23).
I will try/catch it for now, but unclear why it happens again (was solved in beta2).

@paulrutter
Copy link
Copy Markdown
Contributor Author

@cziegeler now 12.1.0 is out, #376 (comment) might become something to look into. It has been intermittent between beta versions. In the final version, it's again an issue.

@cziegeler
Copy link
Copy Markdown
Contributor

maybe we just wait for 12.1.1 :)

- Use 1.2.0-SNAPSHOT now 1.1.0 will be released soon on master
# Conflicts:
#	http/base/pom.xml
#	http/jetty12/pom.xml
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
#	http/samples/whiteboard/pom.xml
- Use 1.2.0 snapshot
@enapps-enorman
Copy link
Copy Markdown
Contributor

Can we revisit these changes now? Jetty is up to 12.1.9 now.

@paulrutter
Copy link
Copy Markdown
Contributor Author

Yeah this one should indeed be revisited soon.

paulrutter and others added 2 commits May 22, 2026 15:23
# Conflicts:
#	http/base/pom.xml
#	http/jetty12/pom.xml
#	http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
#	http/samples/whiteboard/pom.xml
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@paulrutter
Copy link
Copy Markdown
Contributor Author

paulrutter commented May 22, 2026

Can we revisit these changes now? Jetty is up to 12.1.9 now.

I have just updated it to 12.1.9.
If that succeeds, next up would be to discuss how to get this into the jetty12 bundle.
What i'm not sure about yet is if 12.1.9 is entirely backwards compatible with EE10, and thus, if the jetty12 bundle could safely move to 12.1.x or that we need to maintain two branches with 12.0.x and 12.1.x.

I guess it depends on how supportive we want to be; do we want to keep maintaining a EE10 version (i would assume so), while also offering a EE11 version? Or just a EE11 version when we increase jetty12 to 1.2.0, and keep maintaining a EE10 version in a jetty12 1.1.x branch?

@cziegeler any ideas on this?

@paulrutter paulrutter changed the title FELIX-6750 Try out Jetty 12.1.0 in Felix HTTP FELIX-6750 Update Felix HTTP to Jetty 12.1.9 May 22, 2026
…ranges

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@paulrutter paulrutter marked this pull request as ready for review May 22, 2026 14:07
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.

4 participants