svn commit: r1685053 - /tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java
Author: markt Date: Fri Jun 12 09:37:23 2015 New Revision: 1685053 URL: http://svn.apache.org/r1685053 Log: Protect against windowSize overflow Modified: tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java Modified: tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java?rev=1685053&r1=1685052&r2=1685053&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java Fri Jun 12 09:37:23 2015 @@ -18,7 +18,6 @@ package org.apache.coyote.http2; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.atomic.AtomicLong; /** * Used to managed prioritisation. @@ -29,7 +28,8 @@ abstract class AbstractStream { private volatile AbstractStream parentStream = null; private final Set childStreams = new HashSet<>(); -private AtomicLong windowSize = new AtomicLong(ConnectionSettings.DEFAULT_WINDOW_SIZE); +private long windowSize = ConnectionSettings.DEFAULT_WINDOW_SIZE; +private final Object windowSizeLock = new Object(); public Integer getIdentifier() { return identifier; @@ -89,12 +89,16 @@ abstract class AbstractStream { protected void setWindowSize(long windowSize) { -this.windowSize.set(windowSize); +synchronized (windowSizeLock) { +this.windowSize = windowSize; +} } protected long getWindowSize() { -return windowSize.get(); +synchronized (windowSizeLock) { +return windowSize; +} } @@ -103,12 +107,24 @@ abstract class AbstractStream { * @throws Http2Exception */ protected void incrementWindowSize(int increment) throws Http2Exception { -windowSize.addAndGet(increment); +synchronized (windowSizeLock) { +// Overflow protection +if (Long.MAX_VALUE - increment > windowSize) { +windowSize = Long.MAX_VALUE; +} else { +windowSize += increment; +} +} } protected void decrementWindowSize(int decrement) { -windowSize.addAndGet(-decrement); +// No need for overflow protection here. Decrement can never be larger +// the Integer.MAX_VALUE and once windowSize does negative no further +// decrements are permitted +synchronized (windowSizeLock) { +windowSize -= decrement; +} } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
buildbot failure in ASF Buildbot on tomcat-trunk
The Buildbot has detected a new failure on builder tomcat-trunk while building ASF Buildbot. Full details are available at: http://ci.apache.org/builders/tomcat-trunk/builds/1371 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: silvanus_ubuntu Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' triggered this build Build Source Stamp: [branch tomcat/trunk] 1685053 Blamelist: markt 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
svn commit: r1685065 - /tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
Author: markt Date: Fri Jun 12 11:17:08 2015 New Revision: 1685065 URL: http://svn.apache.org/r1685065 Log: Remove stray '-' after splitting of increment and decrement methods Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1685065&r1=1685064&r2=1685065&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun 12 11:17:08 2015 @@ -530,7 +530,7 @@ public class Http2UpgradeHandler extends } else { result = toWrite; } -decrementWindowSize(-result); +decrementWindowSize(result); } return result; } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685066 - in /tomcat/trunk/java/org/apache/coyote/http2: AbstractStream.java LocalStrings.properties
Author: markt Date: Fri Jun 12 11:19:55 2015 New Revision: 1685066 URL: http://svn.apache.org/r1685066 Log: Add debug logging Fix logic error in overflow protection Modified: tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Modified: tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java?rev=1685066&r1=1685065&r2=1685066&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java Fri Jun 12 11:19:55 2015 @@ -19,11 +19,18 @@ package org.apache.coyote.http2; import java.util.HashSet; import java.util.Set; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.util.res.StringManager; + /** * Used to managed prioritisation. */ abstract class AbstractStream { +private static final Log log = LogFactory.getLog(AbstractStream.class); +private static final StringManager sm = StringManager.getManager(AbstractStream.class); + private final Integer identifier; private volatile AbstractStream parentStream = null; @@ -109,11 +116,15 @@ abstract class AbstractStream { protected void incrementWindowSize(int increment) throws Http2Exception { synchronized (windowSizeLock) { // Overflow protection -if (Long.MAX_VALUE - increment > windowSize) { +if (Long.MAX_VALUE - increment < windowSize) { windowSize = Long.MAX_VALUE; } else { windowSize += increment; } +if (log.isDebugEnabled()) { +log.debug(sm.getString("abstractStream.windowSizeInc", getConnectionId(), +getIdentifier(), Integer.toString(increment), Long.toString(windowSize))); +} } } @@ -124,6 +135,10 @@ abstract class AbstractStream { // decrements are permitted synchronized (windowSizeLock) { windowSize -= decrement; +if (log.isDebugEnabled()) { +log.debug(sm.getString("abstractStream.windowSizeDec", getConnectionId(), +getIdentifier(), Integer.toString(decrement), Long.toString(windowSize))); +} } } Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1685066&r1=1685065&r2=1685066&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Fri Jun 12 11:19:55 2015 @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +abstractStream.windowSizeDec=Connection [{0}], Stream [{1}], reduce flow control window by [{2}] to [{3}] +abstractStream.windowSizeInc=Connection [{0}], Stream [{1}], increase flow control window by [{2}] to [{3}] + connectionPrefaceParser.eos=Unexpected end of stream while reading opening client preface byte sequence. Only [{0}] bytes read. connectionPrefaceParser.ioError=Failed to read opening client preface byte sequence connectionPrefaceParser.mismatch=An unexpected byte sequence was received at the start of the client preface [{0}] - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
buildbot exception in ASF Buildbot on tomcat-trunk
The Buildbot has detected a build exception on builder tomcat-trunk while building ASF Buildbot. Full details are available at: http://ci.apache.org/builders/tomcat-trunk/builds/1372 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: silvanus_ubuntu Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' triggered this build Build Source Stamp: [branch tomcat/trunk] 1685066 Blamelist: markt BUILD FAILED: exception upload_2 Sincerely, -The Buildbot - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685079 - /tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java
Author: markt Date: Fri Jun 12 12:48:44 2015 New Revision: 1685079 URL: http://svn.apache.org/r1685079 Log: Fix test error highlighted by fix in window size handling Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java?rev=1685079&r1=1685078&r2=1685079&view=diff == --- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java (original) +++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java Fri Jun 12 12:48:44 2015 @@ -212,10 +212,13 @@ public class TestHttp2Section_5_1 extend sendSimpleRequest(5); +// Default connection window size is 64k - 1. Initial request will have +// used 8k (56k -1). +// Expecting // 1 * headers -// 64k of body (8 * 8k) +// 56k-1 of body (7 * ~8k) // 1 * error (could be in any order) -for (int i = 0; i < 9; i++) { +for (int i = 0; i < 8; i++) { parser.readFrame(true); } parser.readFrame(true); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685091 - in /tomcat/trunk/java/org/apache/coyote/http2: Http2UpgradeHandler.java LocalStrings.properties
Author: markt Date: Fri Jun 12 13:45:44 2015 New Revision: 1685091 URL: http://svn.apache.org/r1685091 Log: Add some debug logging to the allocate process when there is a backlog. Fix some bugs identified by unit test I haven't committed yet (because it is still failing) Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1685091&r1=1685090&r2=1685091&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun 12 13:45:44 2015 @@ -563,7 +563,6 @@ public class Http2UpgradeHandler extends while (leftToAllocate > 0) { leftToAllocate = allocate(this, leftToAllocate); } -allocate(this, increment); for (Entry entry : backLogStreams.entrySet()) { int allocation = entry.getValue()[1]; if (allocation > 0) { @@ -578,6 +577,10 @@ public class Http2UpgradeHandler extends private int allocate(AbstractStream stream, int allocation) { +if (log.isDebugEnabled()) { +log.debug(sm.getString("upgradeHandler.allocate.debug", getConnectionId(), +stream.getIdentifier(), Integer.toString(allocation))); +} // Allocate to the specified stream int[] value = backLogStreams.get(stream); if (value[0] >= allocation) { @@ -593,6 +596,11 @@ public class Http2UpgradeHandler extends value[0] = 0; leftToAllocate -= value[1]; +if (log.isDebugEnabled()) { +log.debug(sm.getString("upgradeHandler.allocate.left", +getConnectionId(), stream.getIdentifier(), Integer.toString(leftToAllocate))); +} + // Recipients are children of the current stream that are in the // backlog. Set recipients = new HashSet<>(); @@ -608,6 +616,11 @@ public class Http2UpgradeHandler extends int totalWeight = 0; for (AbstractStream recipient : recipients) { +if (log.isDebugEnabled()) { +log.debug(sm.getString("upgradeHandler.allocate.recipient", +getConnectionId(), stream.getIdentifier(), recipient.getIdentifier(), +Integer.toString(recipient.getWeight(; +} totalWeight += recipient.getWeight(); } @@ -616,10 +629,13 @@ public class Http2UpgradeHandler extends Iterator iter = recipients.iterator(); while (iter.hasNext()) { AbstractStream recipient = iter.next(); -// +1 is to avoid rounding issues triggering an infinite loop. -// Will cause a very slight over allocation but HTTP/2 should -// cope with that. -int share = 1 + leftToAllocate * recipient.getWeight() / totalWeight; +int share = leftToAllocate * recipient.getWeight() / totalWeight; +if (share == 0) { +// This is to avoid rounding issues triggering an infinite +// loop. It will cause a very slight over allocation but +// HTTP/2 should cope with that. +share = 1; +} int remainder = allocate(recipient, share); // Remove recipients that receive their full allocation so that // they are excluded from the next allocation round. Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1685091&r1=1685090&r2=1685091&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Fri Jun 12 13:45:44 2015 @@ -66,6 +66,9 @@ streamProcessor.httpupgrade.notsupported streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed from [{2}] to [{3}] streamStateMachine.invalidFrame=Connection [{0}], Stream [{1}], State [{2}], Frame type [{3}] +upgradeHandler.allocate.debug=Connection [{0}], Stream [{1}], allocated [{2}] bytes +upgradeHandler.allocate.left=Connection [{0}], Stream [{1}], [{2}] bytes unallocated - trying to allocate to children +upgradeHandler.allocate.recipient=Connection [{0}], Stream [{1}], potential recipient [{2}] with weight [{3}] upgradeHandler.rst.debug=Connection [{0}], Stream [{1}], Err
buildbot exception in ASF Buildbot on tomcat-trunk
The Buildbot has detected a build exception on builder tomcat-trunk while building ASF Buildbot. Full details are available at: http://ci.apache.org/builders/tomcat-trunk/builds/1374 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: silvanus_ubuntu Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' triggered this build Build Source Stamp: [branch tomcat/trunk] 1685091 Blamelist: markt BUILD FAILED: exception svn upload_2 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 ASF Buildbot on tomcat-trunk
The Buildbot has detected a restored build on builder tomcat-trunk while building ASF Buildbot. Full details are available at: http://ci.apache.org/builders/tomcat-trunk/builds/1373 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: silvanus_ubuntu Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' triggered this build Build Source Stamp: [branch tomcat/trunk] 1685079 Blamelist: markt Build succeeded! Sincerely, -The Buildbot - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57974] getOpenSessions() bug
https://bz.apache.org/bugzilla/show_bug.cgi?id=57974 Remy Maucherat changed: What|Removed |Added Severity|critical|minor OS|Windows XP |All Hardware|PC |All --- Comment #2 from Remy Maucherat --- Did you look at the code ? The endpointSessionMap map is keyed on the class (rather than the endpoint instance) so what you describe can only occur when you have multiple endpoints from the same endpoint class. This is probably not correct (need to check first though ...), and is easy to fix, but running into this issue should not be very common, and it also has an easy workaround. Adjusting severity accordingly. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57282] request process UML diagram seems outdated
https://bz.apache.org/bugzilla/show_bug.cgi?id=57282 --- Comment #28 from Stephen Chen --- Created attachment 32813 --> https://bz.apache.org/bugzilla/attachment.cgi?id=32813&action=edit request process pdf version -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57282] request process UML diagram seems outdated
https://bz.apache.org/bugzilla/show_bug.cgi?id=57282 --- Comment #29 from Stephen Chen --- Created attachment 32814 --> https://bz.apache.org/bugzilla/attachment.cgi?id=32814&action=edit Authenticate pdf -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685108 - in /tomcat/tc8.0.x/trunk: java/org/apache/coyote/ajp/AbstractAjpProcessor.java webapps/docs/changelog.xml
Author: remm Date: Fri Jun 12 15:43:16 2015 New Revision: 1685108 URL: http://svn.apache.org/r1685108 Log: 58004: AJP would buffer data even in blocking mode, leading to leaking. Should not affect trunk from what I can see. Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1685108&r1=1685107&r2=1685108&view=diff == --- tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Fri Jun 12 15:43:16 2015 @@ -1648,7 +1648,7 @@ public abstract class AbstractAjpProcess bytesWritten += off; -if (len > 0) { +if (len > 0 && !blocking) { // Add this chunk to the buffer addToBuffers(chunk.getBuffer(), off, len); } Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1685108&r1=1685107&r2=1685108&view=diff == --- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Fri Jun 12 15:43:16 2015 @@ -109,6 +109,10 @@ Support "-" separator in the SSLProtocol configuration of the APR/native connector for protocol exclusion. (rjung) + +58004: Fix AJP buffering output data even in blocking mode. +(remm) + - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 58004] Possible memory leak on ClientAbortException in Ajp
https://bz.apache.org/bugzilla/show_bug.cgi?id=58004 Remy Maucherat changed: What|Removed |Added Resolution|--- |FIXED Status|NEW |RESOLVED --- Comment #1 from Remy Maucherat --- Buffering data in blocking mode seems wrong, it will be fixed in 8.0.24. However, it is really wrong to catch an IOE and expect to write some data ... -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685126 - in /tomcat/trunk/java/org/apache/coyote/http2: Http2UpgradeHandler.java Stream.java
Author: markt Date: Fri Jun 12 16:41:30 2015 New Revision: 1685126 URL: http://svn.apache.org/r1685126 Log: Fix an edge case bug - Window size may go negative due to handling of rounding errors Fix a nasty type s/=-/-=/ that was causing strange allocation effects Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/Stream.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1685126&r1=1685125&r2=1685126&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun 12 16:41:30 2015 @@ -540,7 +540,7 @@ public class Http2UpgradeHandler extends @Override protected void incrementWindowSize(int increment) throws Http2Exception { synchronized (backLogLock) { -if (getWindowSize() == 0) { +if (getWindowSize() < 1) { releaseBackLog(increment); } super.incrementWindowSize(increment); @@ -566,7 +566,7 @@ public class Http2UpgradeHandler extends for (Entry entry : backLogStreams.entrySet()) { int allocation = entry.getValue()[1]; if (allocation > 0) { -backLogSize =- allocation; +backLogSize -= allocation; synchronized (entry.getKey()) { entry.getKey().notifyAll(); } Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1685126&r1=1685125&r2=1685126&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Fri Jun 12 16:41:30 2015 @@ -134,7 +134,7 @@ public class Stream extends AbstractStre } -private int reserveWindowSize(int reservation) { +private int checkWindowSize(int reservation) { long windowSize = getWindowSize(); if (reservation > windowSize) { return (int) windowSize; @@ -318,7 +318,7 @@ public class Stream extends AbstractStre while (left > 0) { // Flow control for the Stream do { -thisWriteStream = reserveWindowSize(left); +thisWriteStream = checkWindowSize(left); if (thisWriteStream < 1) { // Need to block until a WindowUpdate message is // processed for this stream @@ -349,6 +349,9 @@ public class Stream extends AbstractStre } } while (thisWrite < 1); +// Stream.checkWindowSize() doesn't reduce the flow control +// window (reserveWindowSize() does) so the Stream's window +// needs to be reduced here. decrementWindowSize(thisWrite); // Do the write - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685128 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsSession.java WsWebSocketContainer.java
Author: remm Date: Fri Jun 12 16:42:31 2015 New Revision: 1685128 URL: http://svn.apache.org/r1685128 Log: 57974: Key the open session map on the endpoint instance rather than endpoint class. Will backport if it doesn't cause issues. Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1685128&r1=1685127&r2=1685128&view=diff == --- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 12 16:42:31 2015 @@ -415,7 +415,7 @@ public class WsSession implements Sessio @Override public Set getOpenSessions() { checkState(); -return webSocketContainer.getOpenSessions(localEndpoint.getClass()); +return webSocketContainer.getOpenSessions(localEndpoint); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1685128&r1=1685127&r2=1685128&view=diff == --- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri Jun 12 16:42:31 2015 @@ -83,7 +83,7 @@ public class WsWebSocketContainer implem private final Object asynchronousChannelGroupLock = new Object(); private final Log log = LogFactory.getLog(WsWebSocketContainer.class); -private final Map, Set> endpointSessionMap = +private final Map> endpointSessionMap = new HashMap<>(); private final Map sessions = new ConcurrentHashMap<>(); private final Object endPointSessionMapLock = new Object(); @@ -370,8 +370,6 @@ public class WsWebSocketContainer implem protected void registerSession(Endpoint endpoint, WsSession wsSession) { -Class endpointClazz = endpoint.getClass(); - if (!wsSession.isOpen()) { // The session was closed during onOpen. No need to register it. return; @@ -380,10 +378,10 @@ public class WsWebSocketContainer implem if (endpointSessionMap.size() == 0) { BackgroundProcessManager.getInstance().register(this); } -Set wsSessions = endpointSessionMap.get(endpointClazz); +Set wsSessions = endpointSessionMap.get(endpoint); if (wsSessions == null) { wsSessions = new HashSet<>(); -endpointSessionMap.put(endpointClazz, wsSessions); +endpointSessionMap.put(endpoint, wsSessions); } wsSessions.add(wsSession); } @@ -411,7 +409,7 @@ public class WsWebSocketContainer implem } -Set getOpenSessions(Class endpoint) { +Set getOpenSessions(Endpoint endpoint) { HashSet result = new HashSet<>(); synchronized (endPointSessionMapLock) { Set sessions = endpointSessionMap.get(endpoint); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685129 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
Author: remm Date: Fri Jun 12 16:44:24 2015 New Revision: 1685129 URL: http://svn.apache.org/r1685129 Log: 57974: Key the open session map on the endpoint instance rather than endpoint class. Will backport if it doesn't cause issues. [forgot unregister ...] Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1685129&r1=1685128&r2=1685129&view=diff == --- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri Jun 12 16:44:24 2015 @@ -391,14 +391,12 @@ public class WsWebSocketContainer implem protected void unregisterSession(Endpoint endpoint, WsSession wsSession) { -Class endpointClazz = endpoint.getClass(); - synchronized (endPointSessionMapLock) { -Set wsSessions = endpointSessionMap.get(endpointClazz); +Set wsSessions = endpointSessionMap.get(endpoint); if (wsSessions != null) { wsSessions.remove(wsSession); if (wsSessions.size() == 0) { -endpointSessionMap.remove(endpointClazz); +endpointSessionMap.remove(endpoint); } } if (endpointSessionMap.size() == 0) { - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57974] getOpenSessions() bug
https://bz.apache.org/bugzilla/show_bug.cgi?id=57974 --- Comment #3 from Remy Maucherat --- Attempting fix in trunk, will backport if there are no issues. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: org.apache.tomcat.util.net.AprEndpoint to 100% CPU
Hello all, Should I submit a bug report? The fact that Tomcat starts consuming 100% CPU as soon as Apache-HTTP is restarted does to me sound like a bug. Without using APR there is no issue. Thanks, Milo On 06/07/2015 08:56 PM, Milo van der Zee wrote: Hello, I'm having trouble with the following setup: - Gentoo / mariaDB - Tomcat 8.0.23 - Tomcat native 1.1.33 - Apache http 2.4.12 with modproxy_ajp server.xml: ... ... Everything works fina as long as I don' restart the apache server while the tomcat server is also running. If I do so the I get this in my catalina.out (after tweaking logging.properties): 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,023,232] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,023,232] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,023,232] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,078,656] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,078,656] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,078,656] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,023,232] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,023,232] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,023,232] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,078,656] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,078,656] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,078,656] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,023,232] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,023,232] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,023,232] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,078,656] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,078,656] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,078,656] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,023,232] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,023,232] from poller 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,023,232] for event(s) [1] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Add to poller socket [139,918,626,078,656] 07-Jun-2015 11:47:48.217 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,918,626,078,656] from poller 07-Jun-2015 11:47:48.218 FINE [ajp-apr-8208-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,918,626,078,656] for event(s) [1] As long as everything is running fine the output is like: 07-Jun-2015 20:44:01.106 FINE [http-apr-127.0.0.1-8508-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.run Processing socket [139,978,017,344,528] for event(s) [1] 07-Jun-2015 20:44:01.109 FINE [http-apr-127.0.0.1-8508-Poller] org.apache.tomcat.util.net.AprEndpoint$Poller.removeFromPoller Attempting to remove [139,978,017,344,528] from poller 07-Jun-2015 20:44:01.929 FINE [http-apr-127.0.0.1-8508-Acceptor-0] org.apache.tomcat.util.net.AprEndpoint$Acceptor.run AP
svn commit: r1685134 - /tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
Author: markt Date: Fri Jun 12 17:11:38 2015 New Revision: 1685134 URL: http://svn.apache.org/r1685134 Log: Don't release backlog until window size is positive Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1685134&r1=1685133&r2=1685134&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun 12 17:11:38 2015 @@ -540,7 +540,8 @@ public class Http2UpgradeHandler extends @Override protected void incrementWindowSize(int increment) throws Http2Exception { synchronized (backLogLock) { -if (getWindowSize() < 1) { +long windowSize = getWindowSize(); +if (windowSize < 1 && windowSize + increment > 0) { releaseBackLog(increment); } super.incrementWindowSize(increment); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685136 - /tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
Author: markt Date: Fri Jun 12 17:20:46 2015 New Revision: 1685136 URL: http://svn.apache.org/r1685136 Log: writeBody() log the actual length being written rather than the size of the data remaining in the buffer. allocate() don't update leftToAllocate until the allocation loop has completed Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1685136&r1=1685135&r2=1685136&view=diff == --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun 12 17:20:46 2015 @@ -456,7 +456,7 @@ public class Http2UpgradeHandler extends void writeBody(Stream stream, ByteBuffer data, int len, boolean finished) throws IOException { if (log.isDebugEnabled()) { log.debug(sm.getString("upgradeHandler.writeBody", connectionId, stream.getIdentifier(), -Integer.toString(data.remaining(; +Integer.toString(len))); } synchronized (socketWrapper) { byte[] header = new byte[9]; @@ -628,6 +628,7 @@ public class Http2UpgradeHandler extends // Use an Iterator so fully allocated children/recipients can be // removed. Iterator iter = recipients.iterator(); +int allocated = 0; while (iter.hasNext()) { AbstractStream recipient = iter.next(); int share = leftToAllocate * recipient.getWeight() / totalWeight; @@ -643,8 +644,9 @@ public class Http2UpgradeHandler extends if (remainder > 0) { iter.remove(); } -leftToAllocate -= (share - remainder); +allocated += (share - remainder); } +leftToAllocate -= allocated; } return 0; - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685137 - /tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java
Author: markt Date: Fri Jun 12 17:21:12 2015 New Revision: 1685137 URL: http://svn.apache.org/r1685137 Log: Test for priority Added: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java (with props) Added: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java?rev=1685137&view=auto == --- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java (added) +++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java Fri Jun 12 17:21:12 2015 @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.coyote.http2; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Unit tests for Section 5.3 of + * https://tools.ietf.org/html/rfc7540";>RFC 7540. + * + * The order of tests in this class is aligned with the order of the + * requirements in the RFC. + * + * Note: Unit tests for the examples described by each of the figures may be + * found in {@link TestAbstractStream}. + */ +public class TestHttp2Section_5_3 extends Http2TestBase { + +// Section 5.3.2 + +@Test +public void testWeighting() throws Exception { +http2Connect(); + +// Default connection window size is 64k - 1. Initial request will have +// used 8k (56k -1). Increase it to 57k +sendWindowUpdate(0, 1 + 1024); + +// Use up 56k of the connection window +for (int i = 3; i < 17; i += 2) { +sendSimpleRequest(i); +readSimpleResponse(); +} + +// Set the default window size to 1024 bytes +sendSetting(4, 1024); +// Wait for the ack +parser.readFrame(true); +output.clearTrace(); + +// At this point the connection window should be 1k and any new stream +// should have a window of 1k as well + +// Set up streams A=17, B=19, C=21 +sendPriority(17, 0, 15); +sendPriority(19, 17, 3); +sendPriority(21, 17, 11); + +// Send a simple request on each stream +sendSimpleRequest(17); +sendSimpleRequest(19); +sendSimpleRequest(21); + +// Open up the flow control windows for stream 19 & 21 to more than the +// size of a simple request (8k) +sendWindowUpdate(19, 16*1024); +sendWindowUpdate(21, 16*1024); + +// Read some frames +// 17-headers, 17-1k-body, 19-headers, 21-headers + +for (int i = 0; i < 4; i++) { +parser.readFrame(true); +} +output.clearTrace(); + +// Stream 17 should have used up its own 1k window and the connection 1k +// window. At this point 17 is blocked because the stream window is zero +// small and 19 & 21 are blocked because the connection window is zero. + +// This should release a single byte from each of 19 and 21 (the update +// is allocated by weight and then rounded up). +sendWindowUpdate(0, 1); +parser.readFrame(true); +parser.readFrame(true); + +String trace = output.getTrace(); +Assert.assertTrue(trace, trace.contains("19-Body-1")); +Assert.assertTrue(trace, trace.contains("21-Body-1")); +output.clearTrace(); + +// This should address the 'overrun' of the connection flow control +// window above. +sendWindowUpdate(0, 1); + +sendWindowUpdate(0, 1024); +parser.readFrame(true); +parser.readFrame(true); + +trace = output.getTrace(); +Assert.assertTrue(trace, trace.contains("19-Body-256")); +Assert.assertTrue(trace, trace.contains("21-Body-768")); + +// Release everything and read all the remaining data +sendWindowUpdate(0, 1024 * 1024); +sendWindowUpdate(17, 1024 * 1024); + +// Read remaining frames +// 17-7k-body, 19~8k-body, 21~8k-body +for (int i = 0; i < 3; i++) { +parser.readFrame(true); +} +} +} Propchange: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java
[Bug 57974] getOpenSessions() bug
https://bz.apache.org/bugzilla/show_bug.cgi?id=57974 --- Comment #4 from Mark Thomas --- This issue will occur frequently in POJO endpoints since they all share the same Endpoint implementation class (which is how I suspect the OP hit this issue). -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57974] getOpenSessions() bug
https://bz.apache.org/bugzilla/show_bug.cgi?id=57974 --- Comment #5 from Remy Maucherat --- Good point. So I'll backport the fix then. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
buildbot failure in ASF Buildbot on tomcat-trunk
The Buildbot has detected a new failure on builder tomcat-trunk while building ASF Buildbot. Full details are available at: http://ci.apache.org/builders/tomcat-trunk/builds/1377 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: silvanus_ubuntu Build Reason: The AnyBranchScheduler scheduler named 'on-tomcat-commit' triggered this build Build Source Stamp: [branch tomcat/trunk] 1685137 Blamelist: markt 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
[Bug 57974] getOpenSessions() bug
https://bz.apache.org/bugzilla/show_bug.cgi?id=57974 --- Comment #6 from Remy Maucherat --- TestWsWebSocketContainer, so it needs more work/review. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1685147 - /tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
Author: markt Date: Fri Jun 12 19:32:52 2015 New Revision: 1685147 URL: http://svn.apache.org/r1685147 Log: Use right i18n key Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1685147&r1=1685146&r2=1685147&view=diff == --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Jun 12 19:32:52 2015 @@ -2581,7 +2581,7 @@ public class AprEndpoint extends Abstrac @Override protected void doWriteInternal(boolean block) throws IOException { if (closed) { -throw new IOException(sm.getString("apr.closed", getSocket())); +throw new IOException(sm.getString("socket.apr.closed", getSocket())); } Lock readLock = getBlockingStatusReadLock(); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: [Bug 58004] Possible memory leak on ClientAbortException in Ajp
Rémy, On 6/12/15 11:52 AM, bugzi...@apache.org wrote: > https://bz.apache.org/bugzilla/show_bug.cgi?id=58004 > > Remy Maucherat changed: > >What|Removed |Added > > Resolution|--- |FIXED > Status|NEW |RESOLVED > > --- Comment #1 from Remy Maucherat --- > Buffering data in blocking mode seems wrong, it will be fixed in 8.0.24. > However, it is really wrong to catch an IOE and expect to write some data ... Tomcat should protect itself from corruption from misbehaving web applications, right? True, there are faster ways to leak memory, but this causes Tomcat itself to leak memory, which is a Bad Thing. -chris signature.asc Description: OpenPGP digital signature
Françoise Rebel est absente.
Je serai absent(e) du 12/06/2015 au 25/06/2015. Je répondrai à votre message dès mon retour. Pour toute urgence vous pouvez contacter le BIJ au 05 61 02 86 10 - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 57530] Reimplement TestAbstractHttp11Processor.testNon2xxResponseWithExpectation test using SimpleHttpClient instead of Java 6
https://bz.apache.org/bugzilla/show_bug.cgi?id=57530 --- Comment #5 from Christopher Schultz --- Having played-around with sun.net.http.allowRestrictedHeaders, I believe it's one of those things that gets consulted one time and then never looked-at again. That means that, if the tests are run in an unpredictable order, you'll never know which tests are using that value and which aren't. And you can't turn it off. For predictability's sake, maybe we should set that system property for the whole set of unit tests to be run? I think in the long run, use of SimpleHttpClient is probably better, since it will handle "Expect" the way we ... expect. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org