Jump to content
OpenSplice DDS Forum

All Activity

This stream auto-updates     

  1. Earlier
  2. Not being notified of own publications

    Hi If you are sure not to use local to local transport , you could change XML file to set "EnableMulticastLoopback"= false Or you can use filter to filter topic content , if there is a variable to recognize machine , like topic key . But this method still cost DDS transport & discovery resources . <OpenSplice> <Domain> <Name>ospl_sp_ddsi</Name> <Id>0</Id> <SingleProcess>true</SingleProcess> <Description>Stand-alone 'single-process' deployment and standard DDSI networking.</Description> <Service name="ddsi2"> <Command>ddsi2</Command> </Service> <Service name="durability"> <Command>durability</Command> </Service> <Service name="cmsoap"> <Command>cmsoap</Command> </Service> </Domain> <DDSI2Service name="ddsi2"> <General> <NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress> <AllowMulticast>true</AllowMulticast> <EnableMulticastLoopback>false</EnableMulticastLoopback> <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking> </General> <Compatibility> <!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability --> <StandardsConformance>lax</StandardsConformance> <!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility --> <!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> --> </Compatibility> </DDSI2Service> <DurabilityService name="durability"> <Network> <Alignment> <TimeAlignment>false</TimeAlignment> <RequestCombinePeriod> <Initial>2.5</Initial> <Operational>0.1</Operational> </RequestCombinePeriod> </Alignment> <WaitForAttachment maxWaitCount="100"> <ServiceName>ddsi2</ServiceName> </WaitForAttachment> </Network> <NameSpaces> <NameSpace name="defaultNamespace"> <Partition>*</Partition> </NameSpace> <Policy alignee="Initial" aligner="true" durability="Durable" nameSpace="defaultNamespace"/> </NameSpaces> </DurabilityService> <TunerService name="cmsoap"> <Server> <PortNr>Auto</PortNr> </Server> </TunerService> </OpenSplice>
  3. ACE/TAO

    Hi All, I'm looking at ACE/TAO supported IDL compiler version supported by OpenSplice. It's seems that two IDL compiler are available ACE/TAO (DOC Group) and OpenFusion (Microfocus). Which one is recommended with OpenSplice ? OpenSlice seems to support ACE/TAO up to the version 5.6.6 (the last one is 6.4.4). Is there any reason to keep ACE/TAO 5.6.6 ? Best regards, Romain Naour
  4. Not being notified of own publications

    Hi, Here is my scenario : I have two publisher and subscriber on a topic for two distinct machines. Both publish and subscribe some content. Is there a way for my local machine to ignore publication being emitted myself? Or should I create two partitions "Local to Remote" and "Remote to Local" for their DataReader/DataWriter ? Regards
  5. DDS Within Java OSGi

    I am trying to use DDS in a java application running in an OSGi environment. I keep running into class loading and link errors. We have everything working correctly in a standalone non-OSGi java application. I know OpenSplice supports OSGi so hopefully this is a quick problem to solve. Background on our system Builds using maven Our application runs in Apache ServiceMix, which uses Apache Felix as the OSGi runtime. Using Vortex OpenSplice HDE Release 6.7.1705230SS, date 2017-06-05 Running on CentOS 7 Java JDK 1.8 Here is what we did Used maven to manually deploy the dcpssaj5.jar and dcpssaj.jar into the local maven repository so that we could include them in our project’s pom.xml file Updated our pom.xml file to depend on those jars. This allowed us to build our code without issues Loaded the bcpssaj5 bundle. Successfully loaded in Felix. Loaded our freshly build application bundle Initially got class loader errors as “org.opensplice.dds.core.OsplServiceEnvironment” was not found. Updated our code to manually create an OsplServiceEnvironment object. This hack got rid of the class loader errors but now we get link errors on org.opensplice.dds.dcps.ReportStack. Our code is pretty simple public DdsIpcController (int inDomainId) { // force loading of needed class OsplServiceEnvironment temp = new OsplServiceEnvironment(); System.setProperty(ServiceEnvironment.IMPLEMENTATION_CLASS_NAME_PROPERTY, "org.opensplice.dds.core.OsplServiceEnvironment"); // Instantiate a DDS ServiceEnvironment env = ServiceEnvironment.createInstance(this.getClass().getClassLoader()); // Get the DomainParticipantFactory dpf = DomainParticipantFactory.getInstance(env); // Create a DomainParticipant with default domainID domainParticipant = dpf.createParticipant(inDomainId); // Create Reliability and Durability QoS reliability = PolicyFactory.getPolicyFactory(env).Reliability().withReliable(); durability = PolicyFactory.getPolicyFactory(env).Durability().withTransient(); } So clearly we are not using dds correctly in an OSGi environment. I would appreciate any insights anyone has into this problem. Perhaps there is a tutorial or example that shows how to get it working.
  6. Some error of pointer when use 'return_loan'

    Hi , So , will console printf data ? Why top1Seq_var and SampleInfoSeq_var ? They should be top1Seq and SampleInfoSeq , according to sample code . And what OpenSplice version you use ?
  7. Some error of pointer when use 'return_loan'

    Can you explain how this can be related to Qos?
  8. Some error of pointer when use 'return_loan'

    Most likely there is a problem with your QoS
  9. Some error of pointer when use 'return_loan'

    Unfortunately in my case the error occurs even if msg1Seg and info1Seq size is 1. I investigated further and it seems _BLOCK_TYPE_IS_VALID assert fails when trying to delete[] SampleInfoSeq, indicating heap is corrupt somehow.
  10. Some error of pointer when use 'return_loan'

    Hi , Try to check msg1Seq is not null nor 0 length before calling return loan status = top1dr->take( msg1Seq, info1Seq, LENGTH_UNLIMITED, ANY_SAMPLE_STATE, ANY_VIEW_STATE, ALIVE_INSTANCE_STATE); checkStatus(status,"pubsub::top1DataReader::take"); for (DDS::ULong i = 0;i<msg1Seq->length();i++) { top1 *msg1 = &(msg1Seq[i]); cout<<"receive data:"<<msg1->content<<endl; fflush(stdout); } if (msg1Seq->length() > 0) { status = top1dr->return_loan(msg1Seq,info1Seq); checkStatus(status,"pubsub::top1DataReader::return_loan"); } take method is non-blocking . Therefore , even no data coming , take will return and msg1Seq should be nothing .
  11. Some error of pointer when use 'return_loan'

    I also get this error. Any solutions available?
  12. helloworld standalone example memory leak

    Hi Payne, To complement Hans' suggestion, you could modify your code in the following ways: On the Publishing side, follow your write instruction immediately by a corresponding unregister instruction. This instructs the Writer to release all resources allocated to accomodate for future updates to that instance. Not doing this is what causes your memory leak. status = HelloWorldWriter->write(msgInstance, DDS::HANDLE_NIL); status = HelloWorldWriter->unregister_instance(msgInstance, DDS::HANDLE_NIL); Instruct the Writer to automatically unregister after each Write instruction by setting the (OpenSplice specific) autounregister_instance_delay to 0 on the DataWriterLifecycleQosPolicy in your WriterQos. DDS::DataWriterQos wQos; result = publisher->get_default_datawriter_qos(wQos); result = publisher->copy_from_topic_qos(wQos, tQos); wQos.writer_data_lifecycle.autodispose_unregistered_instances = false; wQos.writer_data_lifecycle.autounregister_instance_delay = DDS::DURATION_ZERO; writer = publisher->create_datawriter(topic, wQos, NULL, DDS::STATUS_MASK_NONE); Regards, Erik Hendriks.
  13. helloworld standalone example memory leak

    Yeah, I remember that the msgId is a 'key' in the topic so you're creating as many instances as you have key-values. You could try unregistering the instance after you've written it.
  14. helloworld standalone example memory leak

    Hi hans, Thank you for your suggestions. The code I modified is simple, I just make the publisher and subscriber can be always running, and the MAX_NUM is 300. How can I unregister() or take() the samples to reduce the memory usage? BTW, the topic QOS of the example is set RELIABLE_RELIABILITY_QOS and TRANSIENT_DURABILITY_QOS, and I comment out the TRANSIENT_DURABILITY_QOS. publisher: while (true) { msgInstance.userID = index++; msgInstance.timestamp = getCurrentTime(); for (int i = 0; i < MAX_NUM; i++) { status = HelloWorldWriter->write(msgInstance, DDS::HANDLE_NIL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_1ms); } /*cout << "=== [Publisher] writing a message containing :" << endl; cout << " userID : " << msgInstance.userID << endl; cout << " Message : \"" << msgInstance.message << "\"" << endl;*/ os_nanoSleep(delay_700ms); } subscriber: while (!closed && count < 1500) // We dont want the example to run indefinitely { for (int i = 0; i < MAX_NUM; i++) { status = HelloWorldReader->take(msgList, infoSeq, LENGTH_UNLIMITED, ANY_SAMPLE_STATE, ANY_VIEW_STATE, ANY_INSTANCE_STATE); checkStatus(status, "msgDataReader::take"); for (DDS::ULong j = 0; j < msgList.length(); j++) { /*cout << "=== [Subscriber] message received :" << endl; cout << " userID : " << msgList[j].userID << endl; cout << " Message : \"" << msgList[j].message << "\"" << endl;*/ outfile << "topic" << i << " " << msgList[j].userID << " " << msgList[j].message << /* " " << msgList[j].timestamp << " " << getCurrentTime() << " " << msgList[j].buf <<*/ endl; //closed = true; } status = HelloWorldReader->return_loan(msgList, infoSeq); checkStatus(status, "MsgDataReader::return_loan"); } os_nanoSleep(delay_1ms); //++count; } IDL: module Simulator{ typedef char array1024[1024]; struct Message { long msgId; array1024 msg; }; #pragma keylist Message msgId };
  15. Thank you for the update, your post pointed us in the right direction for the work around. Cheers.
  16. helloworld standalone example memory leak

    Hi, It might help if you could share the modified code. What might have happened is that you're creating as many instances (i.e. key-values) as you're creating samples and then perhaps don't unregister() or take() the samples .. in which case the administration-overhead related to any 'instance' might explain your observation. Regards, Hans
  17. Mapping a partition to a channel

    Hi Guy, I think you're confusing 2 concepts: network-channels (that relate to a range of transport-priorities) and network-partitions (that relate to a set of logical DDS-partitions). In your case it seems like you're looking for 'network-partitions' rather than 'network-channels'. Currently both 'mapping' features (i.e. mapping of logical QoS's such as TRANSPORT_PRIORITY and/or PARTITION to physical constructs such as network-channels and network-partitions) are part of our 'extended' DDSI2E service thats currently not part of our community edition. Note however that these are purely non-functional optimizations so even without those, functionally you should be 'fine' when 'just' using logical DDS-partitions to 'group' your topics and their connectivity. The good news is that DDSI2E and its mapping features will become available soon when we are going to opensource our full product under the Eclipse foundation (working title: Eclipse Cyclone). In the mean-time you could try-out our commercially supported version to see if it suits your needs via our website (see opensplice download). Regards, Hans
  18. Hi all, I am using 6.7.1 community version to do some tests, I modified the helloworld standalone example under "\examples\dcps\helloworld\cpp", the program will send 300 samples(or called message?) of 300 topics in a second, and each sample(or called message?) is about 1k byte. After running about 1 hour, the memory usage of the applications(both of sacpp_helloworld_pub.exe and sacpp_helloworld_sub.exe) are more than 1GB, while at the beginning, they were about 6MB. Does anyone know what's the problem? Do I need to do some configurations to avoid the memory leak? I just use the default ospl.xml as the OSPL_URI value, the content as show below: <OpenSplice> <Domain> <Name>ospl_sp_ddsi</Name> <Id>0</Id> <SingleProcess>true</SingleProcess> <Description>Stand-alone 'single-process' deployment and standard DDSI networking.</Description> <Service name="ddsi2"> <Command>ddsi2</Command> </Service> <Service name="cmsoap"> <Command>cmsoap</Command> </Service> <DurablePolicies> <Policy obtain="*.*"/> </DurablePolicies> </Domain> <DDSI2Service name="ddsi2"> <General> <NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress> <AllowMulticast>true</AllowMulticast> <EnableMulticastLoopback>true</EnableMulticastLoopback> <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking> </General> <Compatibility> <!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability --> <StandardsConformance>lax</StandardsConformance> <!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility --> <!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> --> </Compatibility> </DDSI2Service> <TunerService name="cmsoap"> <Server> <PortNr>Auto</PortNr> </Server> </TunerService> </OpenSplice> Sorry for my poor English, and thank you for your great help.
  19. Hi guys, I am using the 6.7.1 community version, and I use TCP protocol, because I have two publishers run in the same PC, so I have to set the <Port> element to "0" to dynamically allocate ports, but I don't know how to configure the subscriber application to discovery the publishers and build connections(run in other PCs). My publisher configuration(IP: <DDSI2Service name="ddsi2"> ... <TCP> <Enable>true</Enable> <Port>0</Port> <NoDelay>true</NoDelay> </TCP> and my subscriber configuration: <TCP> <Enable>true</Enable> <NoDelay>true</NoDelay> </TCP> <Discovery> <Peers> <Peer Address=""/> </Peers> </Discovery> but it doesn't work, and I can not subscribe the message from the server, I think the problem should be about how to discovery the port of the publishers. can somebody help me about this? Thanks, Payne
  20. C# no content is passed with sequence<char>?

    Hi , Please check your HelloWorldSplDcps.cs . In CopyIn method , code like below public V_COPYIN_RESULT CopyIn(System.IntPtr typePtr, DataType from, ref __DataType to) { if (from == null) return V_COPYIN_RESULT.INVALID; to.id = from.id; if (from.msg == null) return V_COPYIN_RESULT.INVALID; // Unbounded string: bounds check not required... if (!Write(c.getBase(typePtr), ref to.msg, from.msg)) return V_COPYIN_RESULT.OUT_OF_MEMORY; if (from.payload == null) return V_COPYIN_RESULT.INVALID; int attr2Seq0Length = from.payload.Length; // Unbounded sequence: bounds check not required... if (attr2Seq0Type == IntPtr.Zero) { IntPtr memberOwnerType = DDS.OpenSplice.Database.c.resolve(c.getBase(typePtr), fullyScopedName); IntPtr specifier = DDS.OpenSplice.Database.c.metaResolveSpecifier(memberOwnerType, "payload"); IntPtr specifierType = DDS.OpenSplice.Database.c.specifierType(specifier); attr2Seq0Type = DDS.OpenSplice.Database.c.typeActualType(specifierType); } IntPtr attr2Seq0Buf = DDS.OpenSplice.Database.c.newSequence(attr2Seq0Type, attr2Seq0Length); if (attr2Seq0Buf == IntPtr.Zero) return V_COPYIN_RESULT.OUT_OF_MEMORY; Marshal.Copy(from.payload, 0, attr2Seq0Buf, attr2Seq0Length); return V_COPYIN_RESULT.OK; } You have to modify code yourself to replace " attr2Seq0Buf " to " to.something " , which is according to your sequence structure . This was a idlpp bug which I have reported and fixed in OpenSplice 6.8.2 version . If this help you , you need this workaround or update to new version .
  21. Using: VortexOpenSplice-6.7.170912OSS-HDE-x86_64.win-vs2015 I've received some IDL that utilizes sequence<char> for passing strings (rather than char[] or string); it appears that in C# this doesn't actually pass the value through. (Note that this works fine in C++) This can be easily reproduced in the HelloWorld sample as follows: Change the HelloWorldData.idl: Replace: string message; With: sequence<char,16> message; Change the HellowWorldDataPublisher.cs: Replace: msgInstance.message = "Hello World"; With: string str = "Hello World"; char[] array = new char[16]; Array.Copy(str.ToCharArray(), array, str.Length); msgInstance.message = array; Run the HelloWorld sample app and you'll see that the received message in the HelloWorldDataSubscriber has no content (is of length 0) Note that in the IDL if you use a char<16> rather than a sequence<char,16> it works as expected and you get the "Hello World" in the subscriber. Can you please advise on whether this is a usage problem, code generation problem or something else? (and if there's a workaround short of changing the IDL) Thank you very much.
  22. Interop Issue

    Hi there, Does anybody know the state of the resolution of this problem in OpenSplice? I mean without tweaking the source code. With current versions of OpenDDS (3.12) and OpenSplice (V6.4.140407OSS ) I am obtaining similar "malformed packets" logs using "ospl_sp_ddsi.xml". ======================================================================================== Report : WARNING Date : Tue Oct 31 13:15:11 EDT 2017 Description : malformed packet received from vendor 1.3 state header <52545053 02020103 01038cae 4cf48cd7 1e030000 07011c00 00000000 000200c2> (note: maybe partially bswap'd) Node : black Process : Messenger <7725> Thread : recv 7ffff521a700 Internals : V6.4.140407OSS/3b83e82/3b83e82/ddsi2/q_receive.c/2297/0/1509470111.571741537 ======================================================================================== Report : WARNING Date : Tue Oct 31 13:15:12 EDT 2017 Description : malformed packet received from vendor 1.3 state header <52545053 02020103 01038cae 4cf48cd7 1e030000 07011c00 00000000 000200c2> (note: maybe partially bswap'd) Node : black Process : Messenger <7725> Thread : recv 7ffff521a700 Internals : V6.4.140407OSS/3b83e82/3b83e82/ddsi2/q_receive.c/2297/0/1509470112.571875786 ======================================================================================== Thank you, Marco A.
  23. Awesome, thank you very much James.
  24. Hi Yes I heard from engineering that the above is valid, but of course PrismTech will be fixing it properly in a future release so the workaround won't be necessary. cheers James
  25. Hello, Just I would like to know if DDS Security is supported on OSPL Community Edition. I have already found the comment "DDS Security is supported on only Commercial Edition" on 2012. But, I found the following comment on RTI's Community Forum... === The simplest way to have RTI Connext DDS send encrypted UDP packets is to use the DTLS Transport plugin (also known as the Secure Transport), which comes with RTI Secure WAN Transport, but does not actually require WAN. In the Connext DDS 5.1.0 Core Libraries and Utilities User's Manual, Sections 24.4 and 25.4 discuss how to generate certificate files using OpenSSL and configure Connext DDS to use the Secure Transport. The shipped helloWorldWAN examples show how to configure RTI Secure WAN Transport to use DTLS. From the examples and documentation, you can figure out how to configure a non-WAN DDS application to use DTLS, but here is the XML configuration for your convenience: === So, I expected that DTLS Transport plugin is provided on OSPL Community Edition. Does someone know the detail? Best regards, Yuichi
  1. Load more activity