2016-02-18 2 views
2

У меня есть приложение, использующее RTI DDS с использованием dynamic data для установки моих сообщений.Не удается выяснить причину ошибки из-за нехватки

Когда я пытаюсь отправить строку, которая была 300kb в файле я получаю следующий код ошибки:

com.rti.dds.infrastructure.RETCODE_OUT_OF_RESOURCES 
    at com.rti.dds.util.Utilities.rethrow(Unknown Source) ~[nddsjava.jar:?] 
    at com.rti.dds.infrastructure.RETCODE_ERROR.check_return_codeI(Unknown Source) ~[nddsjava.jar:?] 
    at com.rti.dds.dynamicdata.DynamicData.set_string(Unknown Source) ~[nddsjava.jar:?] 

Я искал на их форуме и попытался все изменения, которые я могу думать о моем файле QOS политики чтобы избежать этой ошибки, из которой никто не работал.

Я решил, что лучший способ перейти к решению этой проблемы - это получить основную причину проблемы, однако я попал в стену и не могу понять, связано ли это с ОС, утечка памяти или что ,

Кто-нибудь знает, что может вызвать у меня эту проблему с RTI DDS?

+1

При вызове [ 'DynamicData()'] (https://community.rti.com/static/documentation/connext-dds/5.2.0/doc/api/connext_dds/api_java/classcom_1_1rti_1_1dds_1_1dynamicdata_1_1DynamicData.html#a03e1a77369d1d5e2def6c5434bb80627) , какое значение 'property' вы передали в качестве второго параметра? –

+0

@ReinierTorenbeek Я точно знаю, что вы собираетесь сказать, так как я понял это вчера, но был немного занят, чтобы опубликовать ответ, я делал свойства по умолчанию для второго аргумента, поэтому я сделал динамический объект свойства для второго свойства который устанавливает большой размер, такой как 1mb для max и больше не получает эту ошибку. – jgr208

+1

Приятно слышать, как вы это решили. Если вы опубликуете ответ, я продолжу его ;-) –

ответ

1

В своем комментарии вы указали, что решили проблему. Это может быть полезно для других, чтобы узнать об этом, особенно, учитывая, что ситуация зависит от используемой версии Connext. Отсюда мой ответ.

DynamicData() конструктор для com.rti.dds.dynamicdata.DynamicData объекта имеет параметр type класса TypeCode и параметр, называемый property класса DynamicDataProperty_t. Последний настраивает поведение вновь созданного объекта, в частности, в отношении распределения памяти и ограничений ресурсов.

По-видимому, вы использовали значение com.rti.dds.dynamicdata.DYNAMIC_DATA_PROPERTY_DEFAULT как параметр property. Для более старых версий продукта RTI (до 5.2.0) это означало, что атрибут buffer_max_size был установлен в значение 65536 байт. Этого было недостаточно для вашего объекта с результатом RETCODE_OUT_OF_RESOURCES. Решение состоит в том, чтобы передать ваше собственное создание объекта свойства и установить значение buffer_max_size на достаточно большое значение.

Для текущей версии продукта это больше не требуется. Значение по умолчанию для buffer_max_size теперь ResourceLimitsQosPolicy.LENGTH_UNLIMITED, указывая, что в буфере нет максимального размера.

Смежные вопросы