[jacorb-bugs] [Bug 932] New: ServantDelegate network overheads when using interceptors can kill/DDoS DNS service
bugzilla-daemon at jacorb.org
bugzilla-daemon at jacorb.org
Tue Oct 16 18:24:40 CEST 2012
http://www.jacorb.org/cgi-bin/bugzilla/show_bug.cgi?id=932
Summary: ServantDelegate network overheads when using
interceptors can kill/DDoS DNS service
Product: JacORB
Version: 3.0
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: ORB
AssignedTo: jacorb-bugs at lists.spline.inf.fu-berlin.de
ReportedBy: roger.c.hayes at baml.com
Hi
Going from JacORB 2.3.0 to 3.0 (and 3.1) a change was made to
ServantDelegate.this_object(). By comparison with 2.3.0, in 3.0 an additional
_duplicate() invocation is made before returning the Object - comment says that
this addresses a possible interaction between the object reference cache and
generated code.
return (poa.servant_to_reference(self))._duplicate();
The issue that I have seen is that this _duplicate() invocation carries a very
high and in my view unworkable overhead - eventually we invoke
ORB._getDelegate(new ParsedIOR(orb, toString()) - as well as other processing,
the ParsedIOR construction may involve a DNS access.
My application uses interceptors. On the server side, a very common invocation
made in interception points is ServerRequestInfo.get_server_policy(). The
ServerRequestInfoImpl implementation makes a call to
ServantDelegate._get_policy() parameterised with the servant _this_object(),
which then calls ServantDelegate.this_object(). The result is not actually
used but nevertheless the call is made; when using JacORB 3.0 the result is
that I get a DNS invocation on every request to the server. (This may not be
noticed straight away but network admins will be in touch - I actually also ran
into problems when the greatly increased frequency of lookups resulted (I
believe) in servers hitting JVM bug 7012768). I suspect that this is going to
be a very common scenario in applications using interceptors.
Although I probably need to look at the code more closely, I'm not 100%
convinced that the _duplicate() has any effect - with caching enabled, the
eventual ORB._getDelegate() use the stringified IOR as the cache key - assuming
"dead" uninited IOR chars aren't an issue in ParsedIOR.getIORString() surely
this will just be the same Object that we had in the first place? (Also noted
in passing that the caching is disabled by default and the property
jacorb.reference_caching needed to enable it doesn't seem to be documented
outside the source).
For the time being I've commented the _duplicate() out in my local JacORB. I
wonder if anyone has thoughts on the possible side effects of this (or how the
original issue can be worked around without incurring the CPU or network
overhead)..
Regards, and thanks in advance for any opinions
Ted Hayes
--
Configure bugmail: http://www.jacorb.org/cgi-bin/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the jacorb-bugs
mailing list