NullPointerException when loading class

2020-06-05 Thread Arvind Talari
Hi All,

We have upgraded our Tomcat version to 9.0.27 from 8.0.42, since then we
have been pretty frequently running into the below NullPointerException
when our application classes get loaded, we believe this is due a
concurrency issue (more details below).
java.lang.NullPointerException
at
org.apache.catalina.webresources.CachedResource.getURL(CachedResource.java:317)
at
org.apache.catalina.webresources.FileResource.getCodeBase(FileResource.java:277)
at
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2350)
at
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1334)
at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)

Our Environment:
Tomcat Version: 9.0.27. Our application classes exploded to WEB-INF/classes.

Our Investigation:
To troubleshoot the issue, we have looked at code in
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java
 and
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/CachedResource.java#L70,
and it appears that we would run into this error if CachedResource is used
when org.apache.catalina.webresources.CachedResource#webResource isn't
initialized (i.e. stays null).

Upon further debugging and viewing code in
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L59,
it seems like it is possible that CachedResource could be used when its
#webResource isn't initialized when two threads concurrently ask for the
same resource but each with a different value for the boolean
useClassLoaderResources.

Consider this for example with 2 threads calling into
Cache#getResource(String path, boolean useClassLoaderResources) for the
same resource but with two different values for useClassLoaderResources and
the resource is not in cache, both threads end up at line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L82,
then:

Thread 1:
useClassLoaderResources=true
A new CachedResource is created at line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L77
and put into cache at line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L82
but CachedResource#validateResource (where CachedResource#webResource is
initialized) is not called yet, this would happen at line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L87
.

Thread 2:
useClassLoaderResources=false
A new CachedResource is created at line
 
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L77


but finds the CachedResource in the cache (put in by the above thread) at
line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L82
and calls CachedResource#validateResource at line
https://github.com/apache/tomcat/blob/9.0.27/java/org/apache/catalina/webresources/Cache.java#L112
,
but #validateResource doesn't do anything and returns because
useClassLoaderResources is false, and so CachedResource#webResource remains
uninitialized.
Assuming that Thread 1 hasn't initialized #webResource yet, when this
thread (Thread 2) calls into CachedResource#getURL we would run into this
error.

Looks like the changes in the revision
https://svn.apache.org/viewvc?view=revision&revision=1831828 are related.
This seems like a concurrency issue, and we haven't seen this addressed in
newer versions (from the changelog here
https://ci.apache.org/projects/tomcat/tomcat9/docs/changelog.html)

Request:
Your prompt help on moving this forward to resolution is greatly
appreciated. I can log a defect for this if you agree.

Regards,
Arvind


Re: [tomcat] branch master updated: Ignore exception getting content length

2020-06-05 Thread Mark Thomas
On 05/06/2020 13:21, r...@apache.org wrote:
> This is an automated email from the ASF dual-hosted git repository.
> 
> remm pushed a commit to branch master
> in repository https://gitbox.apache.org/repos/asf/tomcat.git
> 
> 
> The following commit(s) were added to refs/heads/master by this push:
>  new e8bcbf1  Ignore exception getting content length
> e8bcbf1 is described below
> 
> commit e8bcbf1a017e598498343ebd05f77f07934910bb
> Author: remm 
> AuthorDate: Fri Jun 5 14:21:39 2020 +0200
> 
> Ignore exception getting content length
> 
> If the value is invalid, there will be another attempt to convert the
> number with no really easy way out. Ignore the exception which already
> happened in prepareRequest.

Thanks for catching this.

I think it would be useful to cache the fact that the header had been
parsed (or not found) to save looping through the headers again.

What do you think to switching to Long and using:
- null -> not yet parsed
- -1   -> known that no valid value is present
- >=0  -> the parsed value of the header

The alternative is a boolean flag. Long seems cleaner to me even if it
is slightly more memory.

Thoughts?

Mark

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: Usage of SynchronizedStack/Queue

2020-06-05 Thread Mark Thomas
On 05/06/2020 14:08, Martin Grigorov wrote:
> For load testing it I use wrk: wrk -c96 -t8 -d60s https://host:port/test
> The GC JVM arguments are: -Xloggc:./gc.log -XX:+PrintGCDetails -verbose:gc
> JDK 1.8.0 b252
> 
> The GC logs are:
> - Tomcat 9.0.x (uses
> SynchronizedQueue/Stack): 
> https://gist.github.com/martin-g/d2570e7a6896e4d094ce548ceea3adb6
> - Tomcat 9.0.x with my
> changes: https://gist.github.com/martin-g/52c7d3a883b37e9bcd11ad6430800852
> I've uploaded them to https://gceasy.io/ and the charts are similar.

lock-free has marginally higher throughput.

It has a longer GC pause but that might be a result of running longer
(~x2 longer).

Average creation rate and average promotion rate are lower.

Given this was with Java 8 I'm +1 to switching Tomcat 10 and also +1 to
switching Tomcat 9 if we can do it without impacting the API.

I'm neutral on making the change in Tomcat 8.5 and -0.5 on Tomcat 7.

Mark

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot success in on tomcat-85-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a restored build on builder tomcat-85-trunk while 
building tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-85-trunk/builds/2344

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-85-commit' 
triggered this build
Build Source Stamp: [branch 8.5.x] caa925b0b918530d758699e0503df3ea3d37cd95
Blamelist: remm 

Build succeeded!

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: Usage of SynchronizedStack/Queue

2020-06-05 Thread Rémy Maucherat
On Fri, Jun 5, 2020 at 3:08 PM Martin Grigorov  wrote:

> Hi,
>
> On Thu, Jun 4, 2020 at 9:28 PM Rémy Maucherat  wrote:
>
>> On Thu, Jun 4, 2020 at 6:16 PM Mark Thomas  wrote:
>>
>>> On 04/06/2020 16:33, Martin Grigorov wrote:
>>> > Hi team,
>>> >
>>> > I am profiling our application and I've found that Tomcat uses its own
>>> > Synchronized Queue/Stack implementations which synchronize on instance
>>> > level, i.e. their methods are 'synchronized'.
>>>
>>
>> Can you work off 10 (master) first ?
>>
>
> The application is based on Spring Boot and my attempts to
> "jakartaee migrate it" were not successful.
>
> But I've created a very simple Servlet and I will try it on Tomcat 10.x
> soon:
>
> @WebServlet(urlPatterns = "/test")
> public class PlainTextServlet extends HttpServlet {
>
> public static final String CONTENT = "Hello world!";
> public static final int CONTENT_LENGTH = CONTENT.length();
>
> @Override
> protected void doGet(final HttpServletRequest req, final
> HttpServletResponse resp) throws IOException {
>  resp.setContentType("text/plain");
>  resp.setContentLength(CONTENT_LENGTH);
>  resp.getWriter().println(CONTENT);
> }
> }
>
> For load testing it I use wrk: wrk -c96 -t8 -d60s https://host:port/test
> The GC JVM arguments are: -Xloggc:./gc.log -XX:+PrintGCDetails -verbose:gc
> JDK 1.8.0 b252
>
> The GC logs are:
> - Tomcat 9.0.x (uses SynchronizedQueue/Stack):
> https://gist.github.com/martin-g/d2570e7a6896e4d094ce548ceea3adb6
> - Tomcat 9.0.x with my changes:
> https://gist.github.com/martin-g/52c7d3a883b37e9bcd11ad6430800852
> I've uploaded them to https://gceasy.io/ and the charts are similar.
>
> The summary from wrk with SynchronizedQueue/Stack is:
>
> Running 1m test @ http://192.168.0.206:8080
>   8 threads and 96 connections
>   Thread Stats   Avg  Stdev Max   +/- Stdev
> Latency 1.24ms  788.15us  19.46ms   91.44%
> Req/Sec10.04k 1.64k   12.45k79.48%
>   4797193 requests in 1.00m, 600.19MB read
> Requests/sec:  79834.45
> Transfer/sec:  9.99MB
>
> I didn't preserve the summary from the lock-free run but it was similar -
> the throughput is around 80K/sec +- few thousands.
> I.e. the throughput does not improve after my changes!
> Only the locking profiling results become better (Async Profiler:
> ./profile.sh -e lock -d50s -f lock-results.txt PID)
>

I rarely got any gains when making an optimization lately. But this sounds
good [or not bad at least].

Rémy


>
> Martin
>
>
>>
>>>
>>> ~8 years ago when I was profiling Tomcat and wrote those having
>>> something targetted to Tomcat's specific use case made a measurable
>>> improvement.
>>>
>>
>> Yes, the SyncStack was the go to structure for all reuse. Not sure if
>> it's the best.
>>
>> I already removed some of the usage in 10:
>> - No more block poller and its pooling/recycling [I had to pull its
>> removal out of 9 due to an unfortunate regression, this could be brought
>> back now that it seems to work]
>> - No recycling of trivial objects
>>
>> The main use should now be the recycled processors and the recycled
>> channels (it would be bad to not reuse them since they may use direct
>> buffers ...).
>>
>>
>>>
>>> I am more than prepared to believe that things have moved on since then
>>> but I'd be interested in seeing the same numbers with the latest Java 8
>>> from Adopt OpenJDK rather than Java 14.
>>>
>>
>> +1, firnally there could be some differences between JDK, like now they
>> started to actually improve NIO 1 again.
>>
>> Rémy
>>
>>
>>>
>>> I'd also like to see overall throughput numbers and the GC frequency for
>>> each test scenario.
>>>
>>> Mark
>>>
>>>
>>>
>>> >
>>> > The javadoc for those two classes say that they are preferred because
>>> > they are GC-friendlier than
>>> > java.uti.concurrent.ConcurrentLinkedQueue.
>>> >
>>> > I use Async Profiler
>>> > (https://github.com/jvm-profiling-tools/async-profiler) to profile
>>> CPU,
>>> > memory,
>>> > locks and few lower level types (from perf).
>>> > Issuing "./profiler.sh -e lock -d 60 PID" against 9.0.x shows such
>>> reports:
>>> >
>>> > Started [lock] profiling
>>> >
>>> >  --- Execution profile ---
>>> >
>>> >  Total samples   : 713834
>>>
>>> >
>>> >
>>> >
>>> >   Frame buffer usage  : 0.0288%
>>>
>>> >
>>> >
>>> > ---
>>> > 1106165618177 ns (58.97%), 395609 samples
>>> >
>>> >  [ 0]
>>> > org.apache.tomcat.util.collections.SynchronizedStack
>>>
>>> >
>>> >  [ 1]
>>> > org.apache.tomcat.util.collections.SynchronizedStack.push
>>> >
>>> >   [ 2]
>>> > org.apache.tomcat.util.net.NioBlockingSelector.write
>>>
>>> >
>>> >  [ 3]
>>> > org.apache.tomcat.util.net.NioSelectorPool.write
>>>
>>> >

buildbot success in on tomcat-9-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a restored build on builder tomcat-9-trunk while 
building tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-9-trunk/builds/274

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-9-commit' 
triggered this build
Build Source Stamp: [branch 9.0.x] 16d3cbff99d57045af93d6d95e3fec5050d897b6
Blamelist: remm 

Build succeeded!

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot success in on tomcat-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a restored build on builder tomcat-trunk while 
building tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-trunk/builds/5227

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' 
triggered this build
Build Source Stamp: [branch master] e8bcbf1a017e598498343ebd05f77f07934910bb
Blamelist: remm 

Build succeeded!

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: Usage of SynchronizedStack/Queue

2020-06-05 Thread Martin Grigorov
Hi,

On Thu, Jun 4, 2020 at 9:28 PM Rémy Maucherat  wrote:

> On Thu, Jun 4, 2020 at 6:16 PM Mark Thomas  wrote:
>
>> On 04/06/2020 16:33, Martin Grigorov wrote:
>> > Hi team,
>> >
>> > I am profiling our application and I've found that Tomcat uses its own
>> > Synchronized Queue/Stack implementations which synchronize on instance
>> > level, i.e. their methods are 'synchronized'.
>>
>
> Can you work off 10 (master) first ?
>

The application is based on Spring Boot and my attempts to
"jakartaee migrate it" were not successful.

But I've created a very simple Servlet and I will try it on Tomcat 10.x
soon:

@WebServlet(urlPatterns = "/test")
public class PlainTextServlet extends HttpServlet {

public static final String CONTENT = "Hello world!";
public static final int CONTENT_LENGTH = CONTENT.length();

@Override
protected void doGet(final HttpServletRequest req, final
HttpServletResponse resp) throws IOException {
 resp.setContentType("text/plain");
 resp.setContentLength(CONTENT_LENGTH);
 resp.getWriter().println(CONTENT);
}
}

For load testing it I use wrk: wrk -c96 -t8 -d60s https://host:port/test
The GC JVM arguments are: -Xloggc:./gc.log -XX:+PrintGCDetails -verbose:gc
JDK 1.8.0 b252

The GC logs are:
- Tomcat 9.0.x (uses SynchronizedQueue/Stack):
https://gist.github.com/martin-g/d2570e7a6896e4d094ce548ceea3adb6
- Tomcat 9.0.x with my changes:
https://gist.github.com/martin-g/52c7d3a883b37e9bcd11ad6430800852
I've uploaded them to https://gceasy.io/ and the charts are similar.

The summary from wrk with SynchronizedQueue/Stack is:

Running 1m test @ http://192.168.0.206:8080
  8 threads and 96 connections
  Thread Stats   Avg  Stdev Max   +/- Stdev
Latency 1.24ms  788.15us  19.46ms   91.44%
Req/Sec10.04k 1.64k   12.45k79.48%
  4797193 requests in 1.00m, 600.19MB read
Requests/sec:  79834.45
Transfer/sec:  9.99MB

I didn't preserve the summary from the lock-free run but it was similar -
the throughput is around 80K/sec +- few thousands.
I.e. the throughput does not improve after my changes!
Only the locking profiling results become better (Async Profiler:
./profile.sh -e lock -d50s -f lock-results.txt PID)

Martin


>
>>
>> ~8 years ago when I was profiling Tomcat and wrote those having
>> something targetted to Tomcat's specific use case made a measurable
>> improvement.
>>
>
> Yes, the SyncStack was the go to structure for all reuse. Not sure if it's
> the best.
>
> I already removed some of the usage in 10:
> - No more block poller and its pooling/recycling [I had to pull its
> removal out of 9 due to an unfortunate regression, this could be brought
> back now that it seems to work]
> - No recycling of trivial objects
>
> The main use should now be the recycled processors and the recycled
> channels (it would be bad to not reuse them since they may use direct
> buffers ...).
>
>
>>
>> I am more than prepared to believe that things have moved on since then
>> but I'd be interested in seeing the same numbers with the latest Java 8
>> from Adopt OpenJDK rather than Java 14.
>>
>
> +1, firnally there could be some differences between JDK, like now they
> started to actually improve NIO 1 again.
>
> Rémy
>
>
>>
>> I'd also like to see overall throughput numbers and the GC frequency for
>> each test scenario.
>>
>> Mark
>>
>>
>>
>> >
>> > The javadoc for those two classes say that they are preferred because
>> > they are GC-friendlier than
>> > java.uti.concurrent.ConcurrentLinkedQueue.
>> >
>> > I use Async Profiler
>> > (https://github.com/jvm-profiling-tools/async-profiler) to profile CPU,
>> > memory,
>> > locks and few lower level types (from perf).
>> > Issuing "./profiler.sh -e lock -d 60 PID" against 9.0.x shows such
>> reports:
>> >
>> > Started [lock] profiling
>> >
>> >  --- Execution profile ---
>> >
>> >  Total samples   : 713834
>> >
>> >
>> >
>> >   Frame buffer usage  : 0.0288%
>> >
>> >
>> > ---
>> > 1106165618177 ns (58.97%), 395609 samples
>> >
>> >  [ 0]
>> > org.apache.tomcat.util.collections.SynchronizedStack
>> >
>> >  [ 1]
>> > org.apache.tomcat.util.collections.SynchronizedStack.push
>> >
>> >   [ 2]
>> > org.apache.tomcat.util.net.NioBlockingSelector.write
>>
>> >
>> >  [ 3]
>> > org.apache.tomcat.util.net.NioSelectorPool.write
>>
>> >
>> >  [ 4]
>> > org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite
>> >
>> >   [ 5]
>> > org.apache.tomcat.util.net.SocketWrapperBase.doWrite
>>
>> >
>> >  [ 6]
>> > org.apache.tomcat.util.net.Sock

[tomcat] branch 8.5.x updated: Ignore exception getting content length

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
 new caa925b  Ignore exception getting content length
caa925b is described below

commit caa925b0b918530d758699e0503df3ea3d37cd95
Author: remm 
AuthorDate: Fri Jun 5 14:21:39 2020 +0200

Ignore exception getting content length

If the value is invalid, there will be another attempt to convert the
number with no really easy way out. Ignore the exception which already
happened in prepareRequest.
---
 java/org/apache/coyote/http11/Http11Processor.java | 12 ++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 409cd8c..0ba6597 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -770,8 +770,16 @@ public class Http11Processor extends AbstractProcessor {
 
 
 private void checkMaxSwallowSize() {
-if (request.getContentLengthLong() > 0 &&
-(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// Parse content-length header
+long contentLength = -1;
+try {
+contentLength = request.getContentLengthLong();
+} catch (Exception e) {
+// Ignore, an error here is already processed in prepareRequest
+// but is done again since the content length is still -1
+}
+if (contentLength > 0 &&
+(contentLength - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
 // There is more data to swallow than Tomcat will accept so the
 // connection is going to be closed. Disable keep-alive which will
 // trigger adding the "Connection: close" header if not already


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch 9.0.x updated: Ignore exception getting content length

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
 new 16d3cbf  Ignore exception getting content length
16d3cbf is described below

commit 16d3cbff99d57045af93d6d95e3fec5050d897b6
Author: remm 
AuthorDate: Fri Jun 5 14:21:39 2020 +0200

Ignore exception getting content length

If the value is invalid, there will be another attempt to convert the
number with no really easy way out. Ignore the exception which already
happened in prepareRequest.
---
 java/org/apache/coyote/http11/Http11Processor.java | 12 ++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 4d48d92..f467f15 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -528,8 +528,16 @@ public class Http11Processor extends AbstractProcessor {
 
 
 private void checkMaxSwallowSize() {
-if (request.getContentLengthLong() > 0 &&
-(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// Parse content-length header
+long contentLength = -1;
+try {
+contentLength = request.getContentLengthLong();
+} catch (Exception e) {
+// Ignore, an error here is already processed in prepareRequest
+// but is done again since the content length is still -1
+}
+if (contentLength > 0 &&
+(contentLength - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
 // There is more data to swallow than Tomcat will accept so the
 // connection is going to be closed. Disable keep-alive which will
 // trigger adding the "Connection: close" header if not already


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch master updated: Ignore exception getting content length

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
 new e8bcbf1  Ignore exception getting content length
e8bcbf1 is described below

commit e8bcbf1a017e598498343ebd05f77f07934910bb
Author: remm 
AuthorDate: Fri Jun 5 14:21:39 2020 +0200

Ignore exception getting content length

If the value is invalid, there will be another attempt to convert the
number with no really easy way out. Ignore the exception which already
happened in prepareRequest.
---
 java/org/apache/coyote/http11/Http11Processor.java | 12 ++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 897c2d9..00469e1 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -528,8 +528,16 @@ public class Http11Processor extends AbstractProcessor {
 
 
 private void checkMaxSwallowSize() {
-if (request.getContentLengthLong() > 0 &&
-(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// Parse content-length header
+long contentLength = -1;
+try {
+contentLength = request.getContentLengthLong();
+} catch (Exception e) {
+// Ignore, an error here is already processed in prepareRequest
+// but is done again since the content length is still -1
+}
+if (contentLength > 0 &&
+(contentLength - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
 // There is more data to swallow than Tomcat will accept so the
 // connection is going to be closed. Disable keep-alive which will
 // trigger adding the "Connection: close" header if not already


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot failure in on tomcat-85-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a new failure on builder tomcat-85-trunk while 
building tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-85-trunk/builds/2342

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-85-commit' 
triggered this build
Build Source Stamp: [branch 8.5.x] 11bd3b5f68e93884e1b3b10a919a927d9bbfc904
Blamelist: Mark Thomas 

BUILD FAILED: failed compile_1

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot failure in on tomcat-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a new failure on builder tomcat-trunk while building 
tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-trunk/builds/5225

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' 
triggered this build
Build Source Stamp: [branch master] 3c304cc0da9dd413ac4df289299e9ff04c670b17
Blamelist: Mark Thomas 

BUILD FAILED: failed compile_1

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] 02/02: No server certificate in 8.5

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit b0a52eef7a9e46789a22d552342670a1b6d9453e
Author: remm 
AuthorDate: Fri Jun 5 11:12:47 2020 +0200

No server certificate in 8.5
---
 webapps/docs/rewrite.xml | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/webapps/docs/rewrite.xml b/webapps/docs/rewrite.xml
index 7c0a7a3..40c0f99 100644
--- a/webapps/docs/rewrite.xml
+++ b/webapps/docs/rewrite.xml
@@ -250,9 +250,8 @@
 SSL_SRP_USER, SSL_SRP_USERINFO,
 SSL_CLIENT_VERIFY,
 SSL_CLIENT_SAN_OTHER_msUPN_n,
-SSL_CLIENT_CERT_RFC4523_CEA,
-SSL_SERVER_SAN_OTHER_dnsSRV_n.
-When OpenSSL is used, the variables related to the server
+SSL_CLIENT_CERT_RFC4523_CEA.
+Also, the variables related to the server
 certificate, prefixed by SSL_SERVER_ are not available.
 Example:
 %{SSL:SSL_CIPHER_USEKEYSIZE} may expand to


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch 8.5.x updated (11bd3b5 -> b0a52ee)

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a change to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git.


from 11bd3b5  Improve handling of aborted uploads
 new 9032bfe  Document TLS environment update
 new b0a52ee  No server certificate in 8.5

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 webapps/docs/changelog.xml |  4 
 webapps/docs/rewrite.xml   | 12 +---
 2 files changed, 13 insertions(+), 3 deletions(-)


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] 01/02: Document TLS environment update

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 9032bfeb1e0abbd73973740aaa2b1252c1244d27
Author: remm 
AuthorDate: Fri Jun 5 11:09:42 2020 +0200

Document TLS environment update
---
 webapps/docs/changelog.xml |  4 
 webapps/docs/rewrite.xml   | 13 ++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1394312..f4a7644 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -53,6 +53,10 @@
 the sole feature that depends on it (anti-resource locking) is
 configured and can't be used. (markt)
   
+  
+Implement a significant portion of the TLS environment variables for
+the rewrite valve. (remm)
+  
 
   
   
diff --git a/webapps/docs/rewrite.xml b/webapps/docs/rewrite.xml
index 8ab57f4..7c0a7a3 100644
--- a/webapps/docs/rewrite.xml
+++ b/webapps/docs/rewrite.xml
@@ -244,9 +244,16 @@
 
 %{SSL:variable}, where variable is the
 name of an SSL environment
-variable, are not implemented, except
-SSL_PROTOCOL, SSL_SESSION_ID,
-SSL_CIPHER and SSL_CIPHER_USEKEYSIZE.
+variable, are implemented, except
+SSL_SESSION_RESUMED, SSL_SECURE_RENEG,
+SSL_COMPRESS_METHOD, SSL_TLS_SNI,
+SSL_SRP_USER, SSL_SRP_USERINFO,
+SSL_CLIENT_VERIFY,
+SSL_CLIENT_SAN_OTHER_msUPN_n,
+SSL_CLIENT_CERT_RFC4523_CEA,
+SSL_SERVER_SAN_OTHER_dnsSRV_n.
+When OpenSSL is used, the variables related to the server
+certificate, prefixed by SSL_SERVER_ are not available.
 Example:
 %{SSL:SSL_CIPHER_USEKEYSIZE} may expand to
 128.


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: buildbot failure in on tomcat-9-trunk

2020-06-05 Thread Mark Thomas
Not a Tomcat issue. repository.a.o is timing out

Mark


On 05/06/2020 10:06, build...@apache.org wrote:
> The Buildbot has detected a new failure on builder tomcat-9-trunk while 
> building tomcat. Full details are available at:
> https://ci.apache.org/builders/tomcat-9-trunk/builds/272
> 
> Buildbot URL: https://ci.apache.org/
> 
> Buildslave for this Build: asf946_ubuntu
> 
> Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-9-commit' 
> triggered this build
> Build Source Stamp: [branch 9.0.x] 923995d1d110a46fcfa35f3e9f90feeab79806c0
> Blamelist: Mark Thomas 
> 
> BUILD FAILED: failed shell_11
> 
> Sincerely,
>  -The Buildbot
> 
> 
> 
> 
> -
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
> 


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: [tomcat-connectors] update

2020-06-05 Thread Mladen Turk

On 05/06/2020 10:38, Mark Thomas wrote:

On 05/06/2020 09:17, Mladen Turk wrote:

Hi,

I plan to upgrade pcre for isapi-connector to version 8.44
and cleanup windows makefiles.

I'll also cleanup unused httpd-1.3.x code from configure.ac, etc.

I'd like to drop all the IIS < 6 code (Anyone using pre Windows-XP IIS
have much bigger problems :D )


Sounds good.

I've only been testing with currently supported Windows OSes any way.
Given the continued wide use of XP it makes sense to use that as the
minimum version for now (although personally I'll only be testing
supported OSes).



Yep. Anyhow we use strsafe.h API which require Windows XP with SP2
or Windows Server 2003 with SP1 as minimum version, and that's IIS 6.0


Regards
--
^TM

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch 9.0.x updated: Document TLS environment update

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
 new 4689a26  Document TLS environment update
4689a26 is described below

commit 4689a266effcfa6960a8c79d25f5dc03e679a9e2
Author: remm 
AuthorDate: Fri Jun 5 11:09:42 2020 +0200

Document TLS environment update
---
 webapps/docs/changelog.xml |  4 
 webapps/docs/rewrite.xml   | 13 ++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1d18452..facde6e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -53,6 +53,10 @@
 the sole feature that depends on it (anti-resource locking) is
 configured and can't be used. (markt)
   
+  
+Implement a significant portion of the TLS environment variables for
+the rewrite valve. (remm)
+  
 
   
   
diff --git a/webapps/docs/rewrite.xml b/webapps/docs/rewrite.xml
index be1befa..ea98d42 100644
--- a/webapps/docs/rewrite.xml
+++ b/webapps/docs/rewrite.xml
@@ -245,9 +245,16 @@
 
 %{SSL:variable}, where variable is the
 name of an SSL environment
-variable, are not implemented, except
-SSL_PROTOCOL, SSL_SESSION_ID,
-SSL_CIPHER and SSL_CIPHER_USEKEYSIZE.
+variable, are implemented, except
+SSL_SESSION_RESUMED, SSL_SECURE_RENEG,
+SSL_COMPRESS_METHOD, SSL_TLS_SNI,
+SSL_SRP_USER, SSL_SRP_USERINFO,
+SSL_CLIENT_VERIFY,
+SSL_CLIENT_SAN_OTHER_msUPN_n,
+SSL_CLIENT_CERT_RFC4523_CEA,
+SSL_SERVER_SAN_OTHER_dnsSRV_n.
+When OpenSSL is used, the variables related to the server
+certificate, prefixed by SSL_SERVER_ are not available.
 Example:
 %{SSL:SSL_CIPHER_USEKEYSIZE} may expand to
 128.


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch master updated: Document TLS environment update

2020-06-05 Thread remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
 new ad3f003  Document TLS environment update
ad3f003 is described below

commit ad3f0032c0a845d441139641bff51285dc650a31
Author: remm 
AuthorDate: Fri Jun 5 11:09:42 2020 +0200

Document TLS environment update
---
 webapps/docs/changelog.xml |  4 
 webapps/docs/rewrite.xml   | 13 ++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 5eed2b7..09cc8e2 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -53,6 +53,10 @@
 the sole feature that depends on it (anti-resource locking) is
 configured and can't be used. (markt)
   
+  
+Implement a significant portion of the TLS environment variables for
+the rewrite valve. (remm)
+  
 
   
   
diff --git a/webapps/docs/rewrite.xml b/webapps/docs/rewrite.xml
index be1befa..ea98d42 100644
--- a/webapps/docs/rewrite.xml
+++ b/webapps/docs/rewrite.xml
@@ -245,9 +245,16 @@
 
 %{SSL:variable}, where variable is the
 name of an SSL environment
-variable, are not implemented, except
-SSL_PROTOCOL, SSL_SESSION_ID,
-SSL_CIPHER and SSL_CIPHER_USEKEYSIZE.
+variable, are implemented, except
+SSL_SESSION_RESUMED, SSL_SECURE_RENEG,
+SSL_COMPRESS_METHOD, SSL_TLS_SNI,
+SSL_SRP_USER, SSL_SRP_USERINFO,
+SSL_CLIENT_VERIFY,
+SSL_CLIENT_SAN_OTHER_msUPN_n,
+SSL_CLIENT_CERT_RFC4523_CEA,
+SSL_SERVER_SAN_OTHER_dnsSRV_n.
+When OpenSSL is used, the variables related to the server
+certificate, prefixed by SSL_SERVER_ are not available.
 Example:
 %{SSL:SSL_CIPHER_USEKEYSIZE} may expand to
 128.


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot failure in on tomcat-9-trunk

2020-06-05 Thread buildbot
The Buildbot has detected a new failure on builder tomcat-9-trunk while 
building tomcat. Full details are available at:
https://ci.apache.org/builders/tomcat-9-trunk/builds/272

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-9-commit' 
triggered this build
Build Source Stamp: [branch 9.0.x] 923995d1d110a46fcfa35f3e9f90feeab79806c0
Blamelist: Mark Thomas 

BUILD FAILED: failed shell_11

Sincerely,
 -The Buildbot




-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch 8.5.x updated: Improve handling of aborted uploads

2020-06-05 Thread markt
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
 new 11bd3b5  Improve handling of aborted uploads
11bd3b5 is described below

commit 11bd3b5f68e93884e1b3b10a919a927d9bbfc904
Author: Mark Thomas 
AuthorDate: Fri Jun 5 09:53:11 2020 +0100

Improve handling of aborted uploads
---
 java/org/apache/coyote/http11/Http11Processor.java | 16 
 webapps/docs/changelog.xml |  9 +
 2 files changed, 25 insertions(+)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 203c16a..409cd8c 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -769,6 +769,18 @@ public class Http11Processor extends AbstractProcessor {
 }
 
 
+private void checkMaxSwallowSize() {
+if (request.getContentLengthLong() > 0 &&
+(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// There is more data to swallow than Tomcat will accept so the
+// connection is going to be closed. Disable keep-alive which will
+// trigger adding the "Connection: close" header if not already
+// present.
+keepAlive = false;
+}
+}
+
+
 private void prepareRequestProtocol() {
 
 MessageBytes protocolMB = request.protocol();
@@ -1150,6 +1162,10 @@ public class Http11Processor extends AbstractProcessor {
 // Connection header.
 checkExpectationAndResponseStatus();
 
+// This may disable keep-alive if there is more body to swallow
+// than the configuration allows
+checkMaxSwallowSize();
+
 // If we know that the request is bad this early, add the
 // Connection: close header.
 if (keepAlive && statusDropsConnection(statusCode)) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 818da19..1394312 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -55,6 +55,15 @@
   
 
   
+  
+
+  
+Include a Connection: close HTTP header when committing a
+response and it is known that the maxSwallowSize limit is
+going to be exceeded. (markt)
+  
+
+  
 
 
   


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch master updated: Improve handling of aborted uploads

2020-06-05 Thread markt
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
 new 3c304cc  Improve handling of aborted uploads
3c304cc is described below

commit 3c304cc0da9dd413ac4df289299e9ff04c670b17
Author: Mark Thomas 
AuthorDate: Fri Jun 5 09:53:11 2020 +0100

Improve handling of aborted uploads
---
 java/org/apache/coyote/http11/Http11Processor.java | 16 
 webapps/docs/changelog.xml |  9 +
 2 files changed, 25 insertions(+)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 4b6afdb..897c2d9 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -527,6 +527,18 @@ public class Http11Processor extends AbstractProcessor {
 }
 
 
+private void checkMaxSwallowSize() {
+if (request.getContentLengthLong() > 0 &&
+(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// There is more data to swallow than Tomcat will accept so the
+// connection is going to be closed. Disable keep-alive which will
+// trigger adding the "Connection: close" header if not already
+// present.
+keepAlive = false;
+}
+}
+
+
 private void prepareRequestProtocol() {
 
 MessageBytes protocolMB = request.protocol();
@@ -913,6 +925,10 @@ public class Http11Processor extends AbstractProcessor {
 // Connection header.
 checkExpectationAndResponseStatus();
 
+// This may disable keep-alive if there is more body to swallow
+// than the configuration allows
+checkMaxSwallowSize();
+
 // If we know that the request is bad this early, add the
 // Connection: close header.
 if (keepAlive && statusDropsConnection(statusCode)) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 0778232..5eed2b7 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -55,6 +55,15 @@
   
 
   
+  
+
+  
+Include a Connection: close HTTP header when committing a
+response and it is known that the maxSwallowSize limit is
+going to be exceeded. (markt)
+  
+
+  
 
 
   


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat] branch 9.0.x updated: Improve handling of aborted uploads

2020-06-05 Thread markt
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
 new 923995d  Improve handling of aborted uploads
923995d is described below

commit 923995d1d110a46fcfa35f3e9f90feeab79806c0
Author: Mark Thomas 
AuthorDate: Fri Jun 5 09:53:11 2020 +0100

Improve handling of aborted uploads
---
 java/org/apache/coyote/http11/Http11Processor.java | 16 
 webapps/docs/changelog.xml |  9 +
 2 files changed, 25 insertions(+)

diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index e7d44a3..4d48d92 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -527,6 +527,18 @@ public class Http11Processor extends AbstractProcessor {
 }
 
 
+private void checkMaxSwallowSize() {
+if (request.getContentLengthLong() > 0 &&
+(request.getContentLengthLong() - request.getBytesRead() > 
protocol.getMaxSwallowSize())) {
+// There is more data to swallow than Tomcat will accept so the
+// connection is going to be closed. Disable keep-alive which will
+// trigger adding the "Connection: close" header if not already
+// present.
+keepAlive = false;
+}
+}
+
+
 private void prepareRequestProtocol() {
 
 MessageBytes protocolMB = request.protocol();
@@ -913,6 +925,10 @@ public class Http11Processor extends AbstractProcessor {
 // Connection header.
 checkExpectationAndResponseStatus();
 
+// This may disable keep-alive if there is more body to swallow
+// than the configuration allows
+checkMaxSwallowSize();
+
 // If we know that the request is bad this early, add the
 // Connection: close header.
 if (keepAlive && statusDropsConnection(statusCode)) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 4fbd564..1d18452 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -55,6 +55,15 @@
   
 
   
+  
+
+  
+Include a Connection: close HTTP header when committing a
+response and it is known that the maxSwallowSize limit is
+going to be exceeded. (markt)
+  
+
+  
 
 
   


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: [tomcat-connectors] update

2020-06-05 Thread Mark Thomas
On 05/06/2020 09:17, Mladen Turk wrote:
> Hi,
> 
> I plan to upgrade pcre for isapi-connector to version 8.44
> and cleanup windows makefiles.
> 
> I'll also cleanup unused httpd-1.3.x code from configure.ac, etc.
> 
> I'd like to drop all the IIS < 6 code (Anyone using pre Windows-XP IIS
> have much bigger problems :D )

Sounds good.

I've only been testing with currently supported Windows OSes any way.
Given the continued wide use of XP it makes sense to use that as the
minimum version for now (although personally I'll only be testing
supported OSes).

Mark

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[tomcat-connectors] update

2020-06-05 Thread Mladen Turk

Hi,

I plan to upgrade pcre for isapi-connector to version 8.44
and cleanup windows makefiles.

I'll also cleanup unused httpd-1.3.x code from configure.ac, etc.

I'd like to drop all the IIS < 6 code (Anyone using pre Windows-XP IIS have 
much bigger problems :D )


Regards
--
^TM

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org