Skip to content

Commit dcf289a

Browse files
committed
jetty: out of memory error while uploading large files, add/set max file threshold #399
1 parent 8f24479 commit dcf289a

6 files changed

Lines changed: 20 additions & 15 deletions

File tree

jooby-jetty/src/main/java/org/jooby/internal/jetty/JettyHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,12 @@ public class JettyHandler extends AbstractHandler {
5252
private MultipartConfigElement multiPartConfig;
5353

5454
public JettyHandler(final HttpHandler dispatcher,
55-
final WebSocketServerFactory webSocketServerFactory, final String tmpdir) {
55+
final WebSocketServerFactory webSocketServerFactory, final String tmpdir,
56+
final int fileSizeThreshold) {
5657
this.dispatcher = dispatcher;
5758
this.webSocketServerFactory = webSocketServerFactory;
5859
this.tmpdir = tmpdir;
59-
this.multiPartConfig = new MultipartConfigElement(tmpdir);
60+
this.multiPartConfig = new MultipartConfigElement(tmpdir, -1L, -1L, fileSizeThreshold);
6061
this.addManaged(webSocketServerFactory);
6162
}
6263

jooby-jetty/src/main/java/org/jooby/internal/jetty/JettyServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ private Server server(final HttpHandler handler, final Config config,
107107
});
108108

109109
server.setHandler(new JettyHandler(handler, webSocketServerFactory, config
110-
.getString("application.tmpdir")));
110+
.getString("application.tmpdir"),
111+
config.getBytes("jetty.http.FileSizeThreshold").intValue()));
111112

112113
return server;
113114
}

jooby-jetty/src/main/resources/org/jooby/spi/server.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ jetty {
2222

2323
OutputBufferSize = ${server.http.ResponseBufferSize}
2424

25+
FileSizeThreshold = 16k
26+
2527
SendServerVersion = false
2628

2729
SendXPoweredBy = false

jooby-jetty/src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void handleShouldSetMultipartConfig() throws Exception {
5454
.expect(wsStopTimeout)
5555
.run(unit -> {
5656
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
57-
"target")
57+
"target", -1)
5858
.handle("/", unit.get(Request.class),
5959
unit.get(HttpServletRequest.class),
6060
unit.get(HttpServletResponse.class));
@@ -84,7 +84,7 @@ public void handleShouldIgnoreMultipartConfig() throws Exception {
8484
.expect(wsStopTimeout)
8585
.run(unit -> {
8686
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
87-
"target")
87+
"target", -1)
8888
.handle("/", unit.get(Request.class),
8989
unit.get(HttpServletRequest.class),
9090
unit.get(HttpServletResponse.class));
@@ -129,7 +129,7 @@ public void handleWsUpgrade() throws Exception {
129129
.expect(wsStopTimeout)
130130
.run(unit -> {
131131
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
132-
"target")
132+
"target", -1)
133133
.handle("/", unit.get(Request.class),
134134
unit.get(HttpServletRequest.class),
135135
unit.get(HttpServletResponse.class));
@@ -175,7 +175,7 @@ public void handleThrowUnsupportedOperationExceptionWhenWsIsMissing() throws Exc
175175
.expect(wsStopTimeout)
176176
.run(unit -> {
177177
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
178-
"target")
178+
"target", -1)
179179
.handle("/", unit.get(Request.class),
180180
unit.get(HttpServletRequest.class),
181181
unit.get(HttpServletResponse.class));
@@ -217,7 +217,7 @@ public void handleThrowUnsupportedOperationExceptionOnNoWebSocketRequest() throw
217217
.expect(wsStopTimeout)
218218
.run(unit -> {
219219
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
220-
"target")
220+
"target", -1)
221221
.handle("/", unit.get(Request.class),
222222
unit.get(HttpServletRequest.class),
223223
unit.get(HttpServletResponse.class));
@@ -261,7 +261,7 @@ public void handleThrowUnsupportedOperationExceptionOnHankshakeRejection() throw
261261
.expect(wsStopTimeout)
262262
.run(unit -> {
263263
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
264-
"target")
264+
"target", -1)
265265
.handle("/", unit.get(Request.class),
266266
unit.get(HttpServletRequest.class),
267267
unit.get(HttpServletResponse.class));
@@ -295,7 +295,7 @@ public void handleThrowUnsupportedOperationExceptionOnWrongType() throws Excepti
295295
.expect(wsStopTimeout)
296296
.run(unit -> {
297297
new JettyHandler(unit.get(HttpHandler.class), unit.get(WebSocketServerFactory.class),
298-
"target")
298+
"target", -1)
299299
.handle("/", unit.get(Request.class),
300300
unit.get(HttpServletRequest.class),
301301
unit.get(HttpServletResponse.class));
@@ -332,7 +332,7 @@ public void handleShouldReThrowServletException() throws Exception {
332332
.expect(wsStopTimeout)
333333
.run(unit -> {
334334
new JettyHandler(dispatcher, unit.get(WebSocketServerFactory.class),
335-
"target")
335+
"target", -1)
336336
.handle("/", unit.get(Request.class),
337337
unit.get(HttpServletRequest.class),
338338
unit.get(HttpServletResponse.class));
@@ -366,7 +366,7 @@ public void handleShouldReThrowIOException() throws Exception {
366366
.expect(wsStopTimeout)
367367
.run(unit -> {
368368
new JettyHandler(dispatcher, unit.get(WebSocketServerFactory.class),
369-
"target")
369+
"target", -1)
370370
.handle("/", unit.get(Request.class),
371371
unit.get(HttpServletRequest.class),
372372
unit.get(HttpServletResponse.class));
@@ -400,7 +400,7 @@ public void handleShouldReThrowIllegalArgumentException() throws Exception {
400400
.expect(wsStopTimeout)
401401
.run(unit -> {
402402
new JettyHandler(dispatcher, unit.get(WebSocketServerFactory.class),
403-
"target")
403+
"target", -1)
404404
.handle("/", unit.get(Request.class),
405405
unit.get(HttpServletRequest.class),
406406
unit.get(HttpServletResponse.class));
@@ -434,7 +434,7 @@ public void handleShouldReThrowIllegalStateException() throws Exception {
434434
.expect(wsStopTimeout)
435435
.run(unit -> {
436436
new JettyHandler(dispatcher, unit.get(WebSocketServerFactory.class),
437-
"target")
437+
"target", -1)
438438
.handle("/", unit.get(Request.class),
439439
unit.get(HttpServletRequest.class),
440440
unit.get(HttpServletResponse.class));

jooby-jetty/src/test/java/org/jooby/internal/jetty/JettyServerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class JettyServerTest {
4242
.put("HeaderCacheSize", "8k")
4343
.put("RequestHeaderSize", "8k")
4444
.put("ResponseHeaderSize", "8k")
45+
.put("FileSizeThreshold", "16k")
4546
.put("SendServerVersion", false)
4647
.put("SendXPoweredBy", false)
4748
.put("SendDateHeader", false)

jooby-netty/src/main/resources/org/jooby/spi/server.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ netty {
88

99
MaxHeaderSize = ${server.http.HeaderSize}
1010

11-
MaxChunkSize = 8k
11+
MaxChunkSize = 16k
1212

1313
MaxContentLength = ${server.http.MaxRequestSize}
1414

0 commit comments

Comments
 (0)