eclipse-cyclonedds/cyclonedds-python

Interoperability with OpenDDS fails when using complex key

smnrgrs opened this issue · 1 comments

I am using Cyclone Python with OpenDDS 3.22. Encoding is XCDR2, with Appendable extensibility. OpenDDS has xtypes-complete set.

If I have a simple Key (e.g. a long), when I run two OpenDDS publisher executables (each publishing a different instance with a random key) my Cyclone Python subscriber receives and prints the two instance's samples.

If I have a struct for my Key, e.g.

@nested struct GUID128bit_t
{
  unsigned long data1;   
  unsigned long data2;   
  unsigned long data3;   
  unsigned long data4;  
};

then when I repeat my test, Cyclone only receives one of the instances (the first one which is started). The second is never received.

I execute the test by running the Cyclone Python subscriber first, then running the two OpenDDS publishers.

This issue can be reproduce using a slightly butchered i11eperf setup for pub (using topic ou), and some simple python for sub:

  1. For the Python subscriber, run /dds/bin/idlc -x appendable -l py i11eperf.idl, then run sub2.py
  2. Build and then run opub using the modified source attached
  3. Run a second opub, which will use a different random key
  4. The python subscriber will only list updates from the first publisher

Files:
opub.cpp.txt
i11eperf.idl.txt
sub2.py.txt

I'm closing this as I think I had other problems.