From 85cb683f99442d142f8c0870e089c55fc7029c45 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 18 Jun 2025 07:40:17 -0700 Subject: [PATCH 1/4] Update to Tomcat version 10.1.42 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7516287bcd..e6a27ad47a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -99,7 +99,7 @@ apacheDirectoryVersion=2.1.7 apacheMinaVersion=2.2.4 # Usually matches the version specified as a Spring Boot dependency (see springBootVersion below) -apacheTomcatVersion=10.1.41 +apacheTomcatVersion=10.1.42 # (mothership) -> json-path -> json-smart -> accessor-smart # (core) -> graalvm From 5ff8efe64c640e424243c605ca310a5509bf7f19 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 18 Jun 2025 11:15:36 -0700 Subject: [PATCH 2/4] Customize part count and header size using context properties --- server/configs/application.properties | 5 +++ .../embedded/config/application.properties | 5 +++ .../src/org/labkey/embedded/LabKeyServer.java | 33 +++++++++++++++++++ .../LabKeyTomcatServletWebServerFactory.java | 1 + 4 files changed, 44 insertions(+) diff --git a/server/configs/application.properties b/server/configs/application.properties index f5311aa879..4b146d0d58 100644 --- a/server/configs/application.properties +++ b/server/configs/application.properties @@ -65,6 +65,11 @@ context.encryptionKey=@@encryptionKey@@ #context.bypass2FA=true #context.workDirLocation=/path/to/desired/workDir +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 100, but can be overridden here. +## Header size default changed from 10Kb to 512, which is also our default. +#context.maxConnectorPartCount=100 +#context.maxConnectorPartHeaderSize=512 + ## SMTP configuration mail.smtpHost=@@smtpHost@@ mail.smtpPort=@@smtpPort@@ diff --git a/server/configs/webapps/embedded/config/application.properties b/server/configs/webapps/embedded/config/application.properties index 07a93674a8..66101345c4 100644 --- a/server/configs/webapps/embedded/config/application.properties +++ b/server/configs/webapps/embedded/config/application.properties @@ -103,6 +103,11 @@ mail.smtpUser=Anonymous #context.bypass2FA=true #context.workDirLocation=@@/path/to/desired/workDir@@ +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 100, but can be overridden here. +## Header size default changed from 10Kb to 512, which is also our default. +#context.maxConnectorPartCount=100 +#context.maxConnectorPartHeaderSize=512 + ## Other webapps to be deployed, most commonly to deliver a set of static files. The context path to deploy into is the ## property name after the "context.additionalWebapps." prefix, and the value is the location of the webapp on disk #context.additionalWebapps.firstContextPath=@@/my/webapp/path@@ diff --git a/server/embedded/src/org/labkey/embedded/LabKeyServer.java b/server/embedded/src/org/labkey/embedded/LabKeyServer.java index bf4faadf28..ccec522cc5 100644 --- a/server/embedded/src/org/labkey/embedded/LabKeyServer.java +++ b/server/embedded/src/org/labkey/embedded/LabKeyServer.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.ApplicationPidFileWriter; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; @@ -147,6 +148,14 @@ public WebServerFactoryCustomizer customizer() return customizer -> customizer.setDisableMBeanRegistry(false); } + @Bean + TomcatConnectorCustomizer connectorCustomizer() { + return (connector) -> { + connector.setMaxPartCount(contextSource().getMaxConnectorPartCount()); + connector.setMaxPartHeaderSize(contextSource().getMaxConnectorPartHeaderSize()); + }; + } + @Bean public TomcatServletWebServerFactory servletContainerFactory() { @@ -159,6 +168,7 @@ public TomcatServletWebServerFactory servletContainerFactory() Connector httpConnector = new Connector(); httpConnector.setScheme("http"); httpConnector.setPort(contextProperties.getHttpPort()); + result.getTomcatConnectorCustomizers().forEach(customizer -> customizer.customize(httpConnector)); result.addAdditionalTomcatConnectors(httpConnector); } @@ -456,6 +466,9 @@ public static class ContextProperties private Map>> resources; private Map additionalWebapps; + private Integer maxConnectorPartCount = 100; + private Integer maxConnectorPartHeaderSize = 512; + public List getDataSourceName() { return dataSourceName; @@ -718,6 +731,26 @@ public void setAdditionalWebapps(Map additionalWebapps) { this.additionalWebapps = additionalWebapps; } + + public Integer getMaxConnectorPartCount() + { + return maxConnectorPartCount; + } + + public void setMaxConnectorPartCount(Integer maxConnectorPartCount) + { + this.maxConnectorPartCount = maxConnectorPartCount; + } + + public Integer getMaxConnectorPartHeaderSize() + { + return maxConnectorPartHeaderSize; + } + + public void setMaxConnectorPartHeaderSize(Integer maxConnectorPartHeaderSize) + { + this.maxConnectorPartHeaderSize = maxConnectorPartHeaderSize; + } } @Configuration diff --git a/server/embedded/src/org/labkey/embedded/LabKeyTomcatServletWebServerFactory.java b/server/embedded/src/org/labkey/embedded/LabKeyTomcatServletWebServerFactory.java index a02a5312e1..74cb72ff34 100644 --- a/server/embedded/src/org/labkey/embedded/LabKeyTomcatServletWebServerFactory.java +++ b/server/embedded/src/org/labkey/embedded/LabKeyTomcatServletWebServerFactory.java @@ -38,6 +38,7 @@ public LabKeyTomcatServletWebServerFactory(LabKeyServer server) addConnectorCustomizers(connector -> { LabKeyServer.TomcatProperties props = _server.tomcatProperties(); + _server.connectorCustomizer().customize(connector); if (props.getUseBodyEncodingForURI() != null) { From 47cc465619fd597a7e77261dd89c0493502d65e8 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 18 Jun 2025 12:31:29 -0700 Subject: [PATCH 3/4] Increase default part count to 250 --- server/configs/application.properties | 4 ++-- server/configs/webapps/embedded/config/application.properties | 4 ++-- server/embedded/src/org/labkey/embedded/LabKeyServer.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/configs/application.properties b/server/configs/application.properties index 4b146d0d58..a101e1be48 100644 --- a/server/configs/application.properties +++ b/server/configs/application.properties @@ -65,9 +65,9 @@ context.encryptionKey=@@encryptionKey@@ #context.bypass2FA=true #context.workDirLocation=/path/to/desired/workDir -## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 100, but can be overridden here. +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 250, but can be overridden here. ## Header size default changed from 10Kb to 512, which is also our default. -#context.maxConnectorPartCount=100 +#context.maxConnectorPartCount=250 #context.maxConnectorPartHeaderSize=512 ## SMTP configuration diff --git a/server/configs/webapps/embedded/config/application.properties b/server/configs/webapps/embedded/config/application.properties index 66101345c4..32b8251539 100644 --- a/server/configs/webapps/embedded/config/application.properties +++ b/server/configs/webapps/embedded/config/application.properties @@ -103,9 +103,9 @@ mail.smtpUser=Anonymous #context.bypass2FA=true #context.workDirLocation=@@/path/to/desired/workDir@@ -## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 100, but can be overridden here. +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 250, but can be overridden here. ## Header size default changed from 10Kb to 512, which is also our default. -#context.maxConnectorPartCount=100 +#context.maxConnectorPartCount=250 #context.maxConnectorPartHeaderSize=512 ## Other webapps to be deployed, most commonly to deliver a set of static files. The context path to deploy into is the diff --git a/server/embedded/src/org/labkey/embedded/LabKeyServer.java b/server/embedded/src/org/labkey/embedded/LabKeyServer.java index ccec522cc5..3cbffc5e70 100644 --- a/server/embedded/src/org/labkey/embedded/LabKeyServer.java +++ b/server/embedded/src/org/labkey/embedded/LabKeyServer.java @@ -466,7 +466,7 @@ public static class ContextProperties private Map>> resources; private Map additionalWebapps; - private Integer maxConnectorPartCount = 100; + private Integer maxConnectorPartCount = 250; private Integer maxConnectorPartHeaderSize = 512; public List getDataSourceName() From ceb520a2a9f07b6aef5645f994d4765dfd88fb27 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 18 Jun 2025 15:33:32 -0700 Subject: [PATCH 4/4] Change default to 500 for better(?) assay file support --- server/configs/application.properties | 4 ++-- server/configs/webapps/embedded/config/application.properties | 4 ++-- server/embedded/src/org/labkey/embedded/LabKeyServer.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/configs/application.properties b/server/configs/application.properties index a101e1be48..c62474a7cf 100644 --- a/server/configs/application.properties +++ b/server/configs/application.properties @@ -65,9 +65,9 @@ context.encryptionKey=@@encryptionKey@@ #context.bypass2FA=true #context.workDirLocation=/path/to/desired/workDir -## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 250, but can be overridden here. +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 500, but can be overridden here. ## Header size default changed from 10Kb to 512, which is also our default. -#context.maxConnectorPartCount=250 +#context.maxConnectorPartCount=500 #context.maxConnectorPartHeaderSize=512 ## SMTP configuration diff --git a/server/configs/webapps/embedded/config/application.properties b/server/configs/webapps/embedded/config/application.properties index 32b8251539..2bb403a668 100644 --- a/server/configs/webapps/embedded/config/application.properties +++ b/server/configs/webapps/embedded/config/application.properties @@ -103,9 +103,9 @@ mail.smtpUser=Anonymous #context.bypass2FA=true #context.workDirLocation=@@/path/to/desired/workDir@@ -## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 250, but can be overridden here. +## Tomcat v10.1.42 lowered the default for part count from 1000 to 10. Our default is now 500, but can be overridden here. ## Header size default changed from 10Kb to 512, which is also our default. -#context.maxConnectorPartCount=250 +#context.maxConnectorPartCount=500 #context.maxConnectorPartHeaderSize=512 ## Other webapps to be deployed, most commonly to deliver a set of static files. The context path to deploy into is the diff --git a/server/embedded/src/org/labkey/embedded/LabKeyServer.java b/server/embedded/src/org/labkey/embedded/LabKeyServer.java index 3cbffc5e70..9bfd54431a 100644 --- a/server/embedded/src/org/labkey/embedded/LabKeyServer.java +++ b/server/embedded/src/org/labkey/embedded/LabKeyServer.java @@ -466,7 +466,7 @@ public static class ContextProperties private Map>> resources; private Map additionalWebapps; - private Integer maxConnectorPartCount = 250; + private Integer maxConnectorPartCount = 500; private Integer maxConnectorPartHeaderSize = 512; public List getDataSourceName()