Bug 887320: OutOfMemoryError when adding new Deployment child resource on AS7
Thomas Segismont
tsegismo at redhat.com
Tue Dec 18 14:13:22 UTC 2012
Hi all,
I'm writing to you about this bug:
https://bugzilla.redhat.com/show_bug.cgi?id=887320
For those not aware of it, an OutOfMemoryError is raised on the agent
when you try to add a child resource of type deployment to a managed AS7
instance.
It happens because the AS7 plugin uses HttpUrlConnection to communicate
with AS7 HTTP management interface.
Basically, HttpUrlConnection waits for the request payload to be fully
loaded in memory before it tries to contact the server. It does that to
be able to resend the request payload if the server ask for redirection
or start an authentication challenge.
While this is acceptable for small payloads, it's not suitable for large
file uploads (in our case a 42M WAR upload triggers the OutOfMemoryError).
For large file uploads, HttpUrlConnection provides a streaming mode. But
in streaming mode it does neither support redirection nor
authentication. I tried to use streaming mode to make a fix yesterday
and it's really not working (BTW, sorry for the patch revert waltz).
I can see two options:
#1 Keep HttpUrlConnection as communication layer
In this case, the streaming mode is mandatory. This means we should
maintain our own authentication challenge code and set authentication
headers manually.
#2 Use HttpClient as communication layer
Personally, I prefer #2
Importing HttpClient in AS7 plugin will increase the plugin
dependencies list. But I think it's a small price to pay compared to the
efforts we would spend maintaining our own authentication and
redirection code.
What do you think?
Thanks
Thomas
More information about the rhq-devel
mailing list