I have a QoS XML file that defines a library CustomLibrary, loaded by an application that links against an unknown DDS library version (I downloaded armv8Linux4.4gcc5.4.0 package, and it contains libraries that I link against).
I'd like to have a consistent XML QoS file that lives in /etc/USER_QOS_PROFILES.xml, and an optional spare that would override it. This lives in a mountable location /run/media/mmcblk0p1/USER_QOS_PROFILES.xml. I'd like the latter to take precedence, if present.
(the reason for this is that the root filesystem is a fixed embedded image does not allow changes. however there is an sdcard attached that can hold persistent files, and we might want to make medium-term changes as we experiment with QoS.
Therefore, I give my QosProvider constructor the
string: std::string("file:///run/media/mmcblk0p1/USER_QOS_PROFILES.xml | file:///etc/USER_QOS_PROFILES.xml")
(I got this from: https://community.rti.com/static/documentation/connext-dds/5.2.3/doc/manuals/connext_dds/RTI_ConnextDDS_CoreLibraries_UsersManual.pdf, section 17.8 URL Groups, where it talks about concatenating strings separated by "|")
I can start and stop my application and things work fine when the xml file is in /etc.
However, when I delete my QoS profile in /etc to try to get it to load the one in /run/media/mmcblk0p1, I get a failure.
root@xilinx-zcu102-2017_3:/etc# mv USER_QOS_PROFILES.xml USER_QOS_PROFILES.xml_tmp root@xilinx-zcu102-2017_3:/etc# rx -d 0 -b DDS_QosProvider_load_profiles_from_url_groupI:ERROR: opening profiles group files 'file:///run/media/mmcblk0p1/USER_QOS_PROFILES.xml | file:///etc/USER_QOS_PROFILES.xml' DDS_QosProvider_load_profiles_from_url_sequenceI:ERROR: loading profiles DDS_QosProvider_load_profiles_from_policyI:ERROR: loading profiles DDS_QosProvider_load_profilesI:ERROR: loading profiles rxmain: Exception running producer: reload profiles rxmain: Done. Got EXIT.
root@xilinx-zcu102-2017_3:/etc# ls -l /run/media/mmcblk0p1/USER_QOS_PROFILES.xml -rwxrwx--- 1 root disk 8745 Sep 13 14:57 /run/media/mmcblk0p1/USER_QOS_PROFILES.xml
Obviously my goals are unreasonable, or my string format is incorrect. How should I accomplish my goal, if it is possible?
However, I think it must be partially correct because DDS's parser is able to get the QoS file path from the second part of the string.
It may be that DDS is getting some file information, because I notice that if I put the file back in /etc/ I still get an error, but this one is different. It's the same file that was gone, and is now present, but somehow, DDS is trying to add it as a duplicate library
root@xilinx-zcu102-2017_3:/etc# rx -d 0 -b RTIXMLObject_addChild: XML object with name '::CustomLibrary::Receiver.Common' already exists RTIXMLParser_onStartTag:Parse error at line 14: XML object could not be added to the DOM RTIXMLParser_parseFromFile_ex:Parse error in file '/etc/USER_QOS_PROFILES.xml' DDS_XMLParser_parse_from_file:Error parsing file DDS_QosProvider_load_profiles_from_urlI:ERROR: loading profiles file '/etc/USER_QOS_PROFILES.xml' DDS_QosProvider_load_profiles_from_url_groupI:ERROR: loading profiles DDS_QosProvider_load_profiles_from_url_sequenceI:ERROR: loading profiles DDS_QosProvider_load_profiles_from_policyI:ERROR: loading profiles DDS_QosProvider_load_profilesI:ERROR: loading profiles rxmain: Exception running producer: reload profiles rxmain: Done. Got EXIT.
Hi,
Looking at that section of the manual you referenced (17.8 URL Groups) it seems like the list of files needs to be enclosed in square brackets '[', ']'.
Something like this: