Problem in Request/Reply Simple Program

3 posts / 0 new
Last post
Offline
Last seen: 4 years 4 months ago
Joined: 08/13/2014
Posts: 55
Problem in Request/Reply Simple Program

 

I have some wired problems with RTI request-replay. I did the whole steps, which mentioned in the examples, and I've got nothing but some crashes. In my replier, I have set these QoS settings:
 dds::domain::qos::DomainParticipantQos dpQos = dds::core::QosProvider::Default().participant_qos( rti::core::builtin_profiles::qos_lib::baseline()); dds::domain::qos::DomainParticipantFactoryQos factoryQos = dds::domain::DomainParticipant::participant_factory_qos(); factoryQos << dds::core::policy::EntityFactory::ManuallyEnable(); factoryQos->resource_limits.max_objects_per_thread(4096); dds::domain::DomainParticipant::participant_factory_qos(factoryQos); dpQos->participant_name = rti::core::policy::EntityName(program_invocation_short_name); rti::core::policy::DomainParticipantResourceLimits resource_limits_qos; resource_limits_qos.type_code_max_serialized_length(100); resource_limits_qos.type_object_max_serialized_length(20000); dpQos << resource_limits_qos; std::map<std::string, std::string> dpPropertyMap = {{"dds.transport.UDPv4.builtin.recv_socket_buffer_size", "1048576"}, {"dds.transport.UDPv4.builtin.parent.message_size_max", "65530"}, {"dds.transport.UDPv4.builtin.send_socket_buffer_size", "65530"}}; dpQos << rti::core::policy::Property(dpPropertyMap.begin(), dpPropertyMap.end()); dds::domain::DomainParticipant participant= dds::domain::DomainParticipant(domain_id, dpQos);


when I enabled participant before

rti::request::Replier<DirectoryRequest, DirectoryReply> replier(participant, "DirectoryService");
I got this runtime error.

REDAFastBufferPool_growEmptyPoolEA: !allocate buffer of 68719444224 bytes
REDAFastBufferPool_newWithNotification:!create fast buffer pool buffers
PRESTypePluginDefaultEndpointData_createWriterPool:!create writer buffer pool
PRESPsService_enableLocalEndpointWithCursor:failed to attach endpoint to typePlugin PRESPsService_enableLocalEndpoint:!enable local endpoint terminate called after throwing an instance of 'dds::core::Error' what():
REDAFastBufferPool_newWithNotification:!create fast buffer pool buffers
PRESTypePluginDefaultEndpointData_createWriterPool:!create writer buffer pool
PRESPsService_enableLocalEndpointWithCursor:failed to attach endpoint to typePlugin
PRESPsService_enableLocalEndpoint:!enable local endpoint enable entity


but if I enable the participant just right after it, it seems everything is just fine.

On the other side, my requester, I applied the same QoS as the above code and enabled the participant before it. Then I got the same runtime error.
but, when I enabled the participant after it and got this runtime error:

DDS_DataReader_create_index:not enabled terminate called after throwing an instance of 'dds::core::NotEnabledError' what():
create correlation index


Offline
Last seen: 2 months 2 weeks ago
Joined: 04/02/2013
Posts: 194

Hi,

One problem is that currently a Requester or a Replier can't receive a participant that is disabled or whose EntityFactory policy is ManuallyEnable.

Another problem could be related to your data types. The buffer allocation error you see is typical of trying to use unbounded sequences or strings but not configuring the Qos properly to enable it. Is that possible?

Alex

Offline
Last seen: 4 years 4 months ago
Joined: 08/13/2014
Posts: 55

The IDL I used is 'directory_service' which is one of the samples IDLs that are provided in examples, here is the IDL:

module directory_service {

        struct DirectoryRequest {
            string path;
        };

        enum Result {
            OK, PERMISSION_ERROR, DOESNT_EXIST
        };

        struct DirectoryReply {
            Result result;
            sequence<string> files;
        };

};

So, what is the proper Qos that I should use for this IDL?