Currently we are having issues crossing 32/64 bit boundaries. Our server is written in Java. When a C++ client on a 64 bit machine accesses the server on a 32bit machine one of two exceptions are raised in indeterminate order (32/32 and 64/64 combinations work fine):
(1) Most frequently:
atCode:Exception: BasicStream.cpp:363: Ice::NegativeSizeException: protocol error: negative size for sequence, dictionary, etc.
orCode:(gdb) bt #0 0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6 #1 0x00002aaaaac59ace in IceInternal::BasicStream::skipSlice () from /usr/lib/libIce.so.32 #2 0x00002aaaaac5f4fa in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32 #3 0x00002aaaab9ce2d1 in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0 #4 0x00002aaaab9ce544 in omero::model::Event::__read () from ../lib/64bit/libOMERO_common.so.0 #5 0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32 #6 0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32 #7 0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #8 0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #9 0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7fffff991260) at ../include/OMERO/API.h:1848 #10 0x0000000000409ed8 in main (argc=1, argv=0x7fffff991538) at SDK.cpp:261
(2) less frequentlyCode:(gdb) bt #0 0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6 #1 0x00002aaaaac59798 in IceInternal::BasicStream::throwNegativeSizeException () from /usr/lib/libIce.so.32 #2 0x00002aaaab9dee4a in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0 #3 0x00002aaaab9def97 in omero::model::Experimenter::__read () from ../lib/64bit/libOMERO_common.so.0 #4 0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32 #5 0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32 #6 0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #7 0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #8 0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7ffffff754b0) at ../include/OMERO/API.h:1848 #9 0x0000000000409ed8 in main (argc=1, argv=0x7ffffff75788) at SDK.cpp:261
atCode:Exception: BasicStream.cpp:1654: Ice::NoObjectFactoryException: protocol error: no suitable object factory found for `': class sliced to ::Ice::Object, which is abstract
Code:(gdb) bt #0 0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6 #1 0x00002aaaaac5fbd7 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32 #2 0x00002aaaab9daa41 in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0 #3 0x00002aaaab9dac8e in omero::model::ExperimenterGroup::__read () from ../lib/64bit/libOMERO_common.so.0 #4 0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32 #5 0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32 #6 0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #7 0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0 #8 0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7fffff87c760) at ../include/OMERO/API.h:1848 #9 0x0000000000409ed8 in main (argc=1, argv=0x7fffff87ca38) at SDK.cpp:261
For a server:
Also tried on :Code:java version "1.6.0_01" Java(TM) SE Runtime Environment (build 1.6.0_01-b06) Java HotSpot(TM) Server VM (build 1.6.0_01-b06, mixed mode)
Code:java version "1.6.0" Java(TM) SE Runtime Environment (build 1.6.0-b105) Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)and a client:Code:Linux valewalker 2.6.16-gentoo-r13 #3 SMP PREEMPT Wed Apr 25 15:55:21 BST 2007 i686 Intel(R) Xeon(TM) CPU 1.60GHz GenuineIntel GNU/Linux libIce.so.32 => /homes/jmoore/lib/ice/lib/libIce.so.32 (0xb7d18000) libIceUtil.so.32 => /homes/jmoore/lib/ice/lib/libIceUtil.so.32 (0xb7ce5000) libSlice.so.32 => /homes/jmoore/lib/ice/lib/libSlice.so.32 (0xb7bb1000) libGlacier2.so.32 => /homes/jmoore/lib/ice/lib/libGlacier2.so.32 (0xb7b36000) libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6 (0xb7a55000) libm.so.6 => /lib/libm.so.6 (0xb7a30000) libc.so.6 => /lib/libc.so.6 (0xb7912000) libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libgcc_s.so.1 (0xb7907000) libbz2.so.1 => /lib/libbz2.so.1 (0xb78f6000) libdl.so.2 => /lib/libdl.so.2 (0xb78f2000) libpthread.so.0 => /lib/libpthread.so.0 (0xb78a0000) /lib/ld-linux.so.2 (0x80000000)
If I reverse these, usingCode:Linux warlock 2.6.15-gentoo #3 SMP Wed Jan 11 10:31:26 GMT 2006 x86_64 AMD Opteron(tm) Processor 252 AuthenticAMD GNU/Linux libIce.so.32 => /usr/lib/libIce.so.32 (0x00002aaaab936000) libIceUtil.so.32 => /usr/lib/libIceUtil.so.32 (0x00002aaaabc77000) libSlice.so.32 => /usr/lib/libSlice.so.32 (0x00002aaaabdad000) libGlacier2.so.32 => /usr/lib/libGlacier2.so.32 (0x00002aaaabfec000) libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6 (0x00002aaaac176000) libm.so.6 => /lib/libm.so.6 (0x00002aaaac366000) libc.so.6 => /lib/libc.so.6 (0x00002aaaac4ed000) libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libgcc_s.so.1 (0x00002aaaac713000) libbz2.so.1 => /lib/libbz2.so.1 (0x00002aaaac81e000) libdl.so.2 => /lib/libdl.so.2 (0x00002aaaac92e000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002aaaaca31000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
on the 64-bit server, I get similar exceptions:Code:java version "1.5.0_11" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03) Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_11-b03, mixed mode)
atCode:Exception: BasicStream.cpp:200: Ice::UnmarshalOutOfBoundsException: protocol error: out of bounds during unmarshaling
orCode:0x40e56265 in __cxa_throw () from /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6 #0 0x40e56265 in __cxa_throw () from /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6 #1 0x4008f1f6 in IceInternal::BasicStream::skipSlice () from /homes/jmoore/lib/ice/lib/libIce.so.32 #2 0x40094517 in IceInternal::BasicStream::read () from /homes/jmoore/lib/ice/lib/libIce.so.32 #3 0x408e7456 in omero::model::__read () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0 #4 0x408e82a8 in omero::model::Experimenter::__read () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0 #5 0x40094fab in IceInternal::BasicStream::read () from /homes/jmoore/lib/ice/lib/libIce.so.32 #6 0x400953e4 in IceInternal::BasicStream::readPendingObjects () from /homes/jmoore/lib/ice/lib/libIce.so.32 #7 0x40a8cd8e in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0 #8 0x40a59bee in IceProxy::omero::api::IUpdate::saveAndReturnObject () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0 #9 0x0806d416 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x809b4c8, obj=@0xbfca59cc) at ../include/OMERO/API.h:1848 #10 0x08051a9b in main (argc=1, argv=0xbfca5f84) at SDK.cpp:261
(From user. No backtrace)Code:Exception: generated2/OMERO/Model/Experimenter.cpp:549: Ice::UnexpectedObjectException: unexpected class instance of type `::omero::model::ExperimenterGroup'; expected instance of type `::omero::model::Experimenter'
I'm currently trying to produce a self-contained test that shows this behavior, but haven't yet succeeded. Our setup includes object factories (as shown in the exceptions) as well as Glacier2 (always run on the server machine).

Reply With Quote