Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.5.10, 2.6.8, 2.7.5
-
Unknown
Description
WSDLGetInterceptor both creates the WSDL Document object and writes that data to the OutputStream while holding onto a lock. This can cause major issues in an environment where that data is being sent to very slow clients or there are other general networking issues.
We have seen this problem manifest multiple times in a production environment where all of Tomcat's connection handler threads pile up while waiting for this lock to become available because it is being held by a thread which is trying to write to a socket but cannot for whatever reason. Eventually Tomcat stops responding to new requests and must be bounced.
Daniel Kulp suggested that instead of writing the WSDL Document directly to the OutputStream from the message, rather write it to a CachedOutputStream while holding the lock. Then outside of the synchronized block, copy it from the CachedOutputStream to the real OutputStream to the client. In this way, a single bad connection or slow client cannot cause trouble for others.
I will attach a patch made against the lastest WSDLGetInterceptor from 2.7.6-SNAPSHOT.
Attachments
Attachments
Issue Links
- is related to
-
CXF-5151 WSDLGetInterceptor supports GZIP encoding
- Closed