Jump to content
OpenSplice DDS Forum


  • Content count

  • Joined

  • Last visited

About bdavis

  • Rank
    Advanced Member

Profile Information

  • Company
    Link Simulation and Training
  1. 6.7 and apache license

    hello, looks like the licensing model has changed. from what i see, this is really no difference for people using the community edition of opensplice. if anything, it is more 'permissive'. am i missing something? regards, bud davis
  2. wishes and dreams (aka "i want a unicorn')

    Erik, Interesting. I have seen this project on github before, even tried to compile it, but did not go any farther. Time to give it a closer look. thanks, Bud Davis
  3. I wish, the idlpp would generate a set of serialization routines that I could use in application code. std::string to_JSON ( IdlStruct S ); IdlStruct S from_JSON ( std::string ); std::string to_XML ( idlStruct S); idlStruct S from_XML ( std::string) // and maybe some 'c' callable ones as well !! Or maybe the solution is for me to parse the idl file myself and make this. Something that would be quite handy at times. --bud davis
  4. Dropouts and falling behind

    I think you want BEST_EFFORT and a history depth of 1. If you miss any with these settings, then you application is not servicing the read / take often enough. suggestion, take one of the example programs (hello world is my favorite), change it to subscribe to only this topic. And make it check in a loop that runs every 10 ms. You can run this anywhere on the network. This will tell you if it is a publish or a subscriber problem. good luck, bud davis
  5. IDL Data Types

    Short answer. No. There is no way to send a 'pointer' across the network, because there is no way to send the data 'pointed to'. DDS Strings may do what you want. regards, Bud Davis
  6. dataWriter listener

    Allow me to answer my own question. along with the callback comes some status: total_count current_count current_count_change which makes it obvious why you get a call on a subscribe and a call on the un-subscribe.
  7. dataWriter listener

    static void cb (void *listener_data, DDS_DataWriter writer, const DDS_PublicationMatchedStatus *status) { printf("i am in the publication matched callback\n"); } static void ll (void *listener_data, DDS_DataWriter writer, const DDS_LivelinessLostStatus *status) { printf("i am in the liveleness lost callback\n"); } ...................................................... // Create the Publisher's in the DDS Domain. message_Publisher = createPublisher(domainParticipant); // Request a Writer from the the Publisher. message_DataWriter = createDataWriter(message_Publisher, messageTopic); /* Allocate the DataReaderListener interface. */ msgListener = DDS_DataWriterListener__alloc(); checkHandle(msgListener, "DDS_DataWriterListener__alloc"); /* Fill the listener_data with pointers to all entities needed by the Listener implementation. */ msgListener->listener_data = 0; /* Assign the function pointer attributes to their implementation functions. */ msgListener->on_publication_matched = cb; msgListener->on_offered_deadline_missed = 0; msgListener->on_offered_incompatible_qos = 0; msgListener->on_liveliness_lost = ll; /* Attach the DataReaderListener to the DataReader, only enabling the data_available event. */ int status = DDS_DataWriter_set_listener(message_DataWriter, msgListener, DDS_PUBLICATION_MATCHED_STATUS ); checkStatus(status, "DDS_DataWriter_set_listener"); Above is the code I added to the helloworld example. Plus made both the sender and reciever run forever. I run the publisher task and the subscriber task. The callback is called one time. As expected. I ctrl-c the subscriber task, and I get another DDS_PUBLICATION_MATCHED_STATUS callback. My expectation is I would recieve DDS_LIVELENESS_LOSS callback. I have used each constant in the set_listener function, and the two or'd together. The only callback I recieve is DDS_PUBLICATION_MATCHED_STATUS, and I get one when the subscriber starts and another when it exits. What am I doing wrong ? regards, bud davis
  8. sequences and bounded sequences

    Question on interoperability: Let's say system A has a topic, lets call it ALPHA , with the structure defined like this: struct some_data { sequence <long> x; } And system B has a topic; lets call it ALPHA also. struct some_data { sequence<long,100> x; } Can system A and B interoperate ? It would seem safe if system A could receive from system B, but not the other way around. Why the question ? One system requires bounded memory usage. The other does not. The other currently exists. thanks, Bud Davis
  9. This is a use case that works well with opensplice. You have something simple wrong, let's go down the list: #1. Do the examples work on each machine ? check and make sure that you can send and recieve on the same machine. This eliminates source code defects from the equations. #2. Can you ping between the machines ? #3. Ensure the firewalls are disabled. Both sides. #4. Check the 'ospl.xml' files ? Are they identical in all respects except for the network address ? #5. Don't use AUTO, specify the address. #6. Use tcpdump / wireshark. You should see traffic from the other machine when you start the process. It will work, just check these things. regards, Bud Davis
  10. include files in idlpp

    What I want to do: In the file top_level.idl #include "bill.idl" module fred { struct a { long i; }; #pragma keylist a }; In the file bill.idl module bill { struct z { long i; }; #pragma keylist z }; /usr/local/opensplice/HDE/x86_64.linux//bin/idlpp -l c -S -I./ top_level.idl I expect that the functions for 'bill' will be created in top_levelSacDcps.h and friends. But it does not !! And, yes Hans, I have read the manual ! (OpenSplice DDSVersion 6.xIDL Pre-processor Guide) thanks, Bud Davis
  11. multiple Global Data space

    The word global is pretty strong. By definition, Global kind of means only 1 ! Read Section 4.2 of the "OpenSplice Deployment Guide for Version 6.X" I think almost any use case can be accommodated with a well though out domain configuration. regards, Bud Davis
  12. Using Unity3d with OpenSplice

    I went down this path for about a day, and determined it would be a time sink of unknown duration. Ended up using websockets to interface into unity. There are several .net/mono websocket client libraries available. To go from DDS to websockets, I use a 'homegrown' piece of bridge software, but the prismtech mobile stuff does this with ease. Not sure if there is a free version, but PrismTech is very quick to give out demo licenses to help develop the first product. An additional value of going to websockets is you then are using http, which can be a lot easier to pass around on the open internet or through company firewalls. I know this is not helpful, "I couldn't figure it out either, so I did something else", but it did work in the end regards, Bud Davis
  13. Scalability of OSPL

    Back again on the same topic. Funny how if you don't go back and test all the functionality after a configuration change, you don't know that you broke it. I have come to the point where I don't have enough understanding of how the durability service works. A careful read of the OSPL deployment guide, section 4.3, was undertaken. As for the entire opensplice product, the amount of configuration is almost too much to fit in my brain at one time....good problem to have, but a little overwhelming. So, I have about 45 applications running on a couple of machines. Actually most of them run on one machine. Using the single process model. I was having performance problems, so I naively removed all of the durability services but one. My resource consumption dropped a lot; like an idiot I just moved on. Since then some defects were corrected that were causing a lot of traffic; as is usually the case, a couple of lines of code change dropped the traffic by a lot, about 90%. But, late-joiners don't work. I could probably just put the durability servers back on every process; my resource problem was fixed by the other defect I had (in the code I wrote, of course!!). To get myself a little smarter, I would like to know more of how it works so I can be intelligent in the future (very tall order, might never happen!!). I thought that a single durability server could serve the entire system. In my mind it would basically subscribe to all topics with durability, save away enough data, and then re-insert it in the system. My previous experience with the federated deployment kind of supported this, but there was a single durability server per machine, and I took a couple of examples out of context and made some assumptions that were pretty wrong. What I think happens, and this is inferred from reading section 4.3 of the deployment guide, is an application that has a durability service saves the information on datawriters in the same process and sends them to other durability services. When an application receives 'late joiner' information, it comes from it's local durability service, after another durability service has passed it information via the durability channel / protocol (meaning not the normal path). This the relatively long start up period, my application subscribes to a durable topic, the data has to come from another durability service to my durability service, and then it is provided to my application. Is this anywhere close to how it works ? My understanding is if I want late joiner data, I need to have a durability service running in the application that I am subscribing from. And I also need to have a durability service running in the application that is publishing the data. A couple of experiments that I have conducted support this mental model. For this application, I don't think I have any performance issues after turning on a durability server in each application. There are lots of tunables in the xml file to be worked on if performance is a problem. OSPL experts: Is this even close to what is going on ? Is there some other documents I need to be reading instead of spamming the forum ? regards, Bud Davis
  14. Scalability of OSPL

    Every operating system process using the 'single process model' is controlled by the specific ospl.xml file used when it is started. If the ospl.xml file has a durability server defined, then a durability server will be created. I made 2 different ospl.xml files. One with a durability server, which was used for 1 process (ospl-sp.xml). The other ospl.xml file had the durability service removed, and it was used for all the other processes. Hit the documentation. There is a chapter in the deployment guide on durability. Takes several reads to get a feel for what is going on. If this advice is in-correct, I ask that any readers kindly step up with better information. I am a novice at OpenSplice. regards, Bud Davis
  15. Scalability of OSPL

    Answering my own post. If every process has a durability server defined, there is a lot of traffic. Cut down to one durability server per system, and all is well.