Hi, I want to use HelloWorld example in RTI Queuing Service.
I wanted to make a DDS system with 1 publisher(producer), 1 subcriber(consumer), and 1 queuing service with SRQ(SharedReaderQueue).
So I used the example "rti_workspace/5.2.3/queuing_service/c++/hello_world" and execute the QS with HelloWorldQS config (in default QsHelloWorld.xml).
But when I execute the publisher("./objs/<arch>/HelloWorldQueue_publisher"), it shows following error messages.
REDAFastBufferPool_growEmptyPoolEA: !allocate buffer of 68719444224 bytes
REDAFastBufferPool_newWithNotification:!create fast buffer pool buffers
PRESTypePluginDefaultEndpointData_createWriterPool:!create writer buffer pool
WriterHistorySessionManager_new:!create newAllocator
WriterHistoryMemoryPlugin_createHistory:!create sessionManager
PRESWriterHistoryDriver_new:!create _whHnd
PRESPsService_enableLocalEndpointWithCursor:!create WriterHistoryDriver
PRESPsService_enableLocalEndpoint:!enable local endpoint
DDSDataWriter_impl::createI:ERROR: Failed to auto-enable entity
create_datawriter error
I thought that the unbounded sequence in IDL file occured the error, so I fixed it from sequence<octet> to sequence<octet,32>.
Then I retried to execute the publisher, but that time, the publisher couldn't discovered the SharedReaderQueue.
It shows following message permanently.
"Waiting to discover SharedReaderQueue ..."
But the subscriber("./objs/<arch>/HelloWorldQueue_subscriber") discovered SRQ well.
(Waiting to discover SharedReaderQueue ...
SharedReaderQueue discovered...)
How can I do for running this example?
Environment
Intel i5 CPU with 4GB RAM, Ubuntu 14.04 x64
RTI Connext DDS 5.2.3 with RTI Queuing Service.
I executed all components(pub, sub and QS) in one host desktop.
Hi WonHyeong,
This issue is related to a memory management. The solution here is to be more flexible in the memory allocation schemas.
The property dds.data_writer.history.memory_manager.fast_pool.pool_buffer_max_size determines how the memory is allocated, as it is said in the documentation:
- If the key’s serialized size is <= pool_buffer_max_size: pre-allocate memory.
- If the key’s serialized size is > pool_buffer_max_size: dynamically allocate from the heap.
Firstly, could you please provide us with the value that you are setting in the property pool_buffer_max_size?
- In the case that you have modified that value, could you please keep it as it was in the example?
<datawriter_qos> <property> <value> <element> <name>dds.data_writer.history.memory_manager.fast_pool.pool_buffer_max_size</name> <value>4096</value> </element> </value> </property> </datawriter_qos>- In the case that you have not modified that value, could you please update it to "0" for using only the heap dynamically?
<datawriter_qos> <property> <value> <element> <name>dds.data_writer.history.memory_manager.fast_pool.pool_buffer_max_size</name> <value>0</value> </element> </value> </property> </datawriter_qos>Let me know if it is working for you.
Best,
Antonio