Legacy Issue Number: 4796
Source: hursley.ibm.com ( Simon Nash)
This issues was previously raised as issue 4294, and was deferred to the
GIOP 1.3 wishlist. Now that GIOP 1.3 is about to become a reality, I am
re-raising the issue because of its importance for efficient RMI-IIOP
communications. This is an interop issue, but I am also copying the
Java to IDL list because of its impact on RMI-IIOP performance.
CDR should allow TypeCode indirections that refer to top-level TypeCodes.
The current prohibition of this causes servere performance penalties for
RMI-IIOP because the Java to IDL mapping requires that Java objects of
declared type java.lang.Object are marshalled as CORBA anys. In the case
of a Vector or HashTable with 100 elements, this means that 100 anys must
be marshalled. If all of these are of actual type foo, the restriction
on TypeCode indirections means that all 100 of these data values must repeat
the TypeCode for foo, which could be very large. This causes very substantial
overheads, since the space and time needed to marshal the TypeCode for foo
can greatly exceed that needed to marshal the data for foo.
I understand why a nested indirection cannot refer to any TypeCode outside
the scope of its enclosing top-level TypeCode. However, this restriction
does not need to apply to a top-level TypeCode. We have made this change
experimentally without any adverse effects and we have discovered that
using indirections for all repeated top-level TypeCodes can speed up some
common scenarios by at least a factor of 5 on end-to-end measurements.
There appears to be no downside to making this change.
In the section headed "Indirection: Recursive and Repeated TypeCodes" within
section 18.104.22.168, replace the current first bullet:
The indirection applies only to TypeCodes nested within some “top-level”
TypeCode. Indirected TypeCodes are not “freestanding,” but only exist inside
some other encoded TypeCode.
by the following two bullets:
For GIOP 1.2 and below, the indirection applies only to TypeCodes nested
within some “top-level” TypeCode. Indirected TypeCodes are not “freestanding,”
but only exist inside some other encoded TypeCode.
For GIOP 1.3 and above, the indirection applies only to TypeCodes nested
within some “top-level” TypeCode, or from one top-level TypeCode to another.
Indirected TypeCodes nested within a top-level TypeCode can only reference
TypeCodes that are part of the same top-level TypeCode, including the
top-level TypeCode itself. Indirected top-level TypeCodes can reference
other top-level TypeCodes but cannot reference TypeCodes nested within
some other top-level TypeCode.
Reported: CORBA 2.6 — Fri, 21 Dec 2001 05:00 GMT
Disposition: Resolved — CORBA 3.0.2
Updated: Fri, 6 Mar 2015 20:58 GMT