Can't open request for whole directory with EMA C++ in custom application

Hello,

can somebody tell me how i can open request for MMT_DIRECTORY of all sources in custom application. If I try this, as described in RDM USAGE GUIDE, I got the following Message:

loggerMsg
TimeStamp: 12:47:51.941
ClientName: DirectoryCallbackClient
Severity: Error
Text: Internal error: failed to encode RsslRDMDirectoryMsg in DirectoryCa
llbackClient::processCallback()
RsslChannel 0x0000000000000000
Error Id -21
Internal sysError 0
Error Location rsslRDMDirectoryMsg.c:644
Error Text (ret = rsslEncodeElementEntry(pEncodeIter, &elementEntry, &pL
oad->openLimit)) == RSSL_RET_SUCCESS
loggerMsgEnd

If I request directory for a single source by setting a source name, it works, as expected.

Setting SEVERTITY to VERBOSE I see, that the hole dictionary was downloaded previous by the consumer.

Best Answer

  • hi @Umer Nalla

    we currently have 11 souces in our TREP and I use v1.1. As I told before the throuble must be in configuration of the ADS. With one of our six ADS it works fine.

    Thank you

Answers

  • Hi @Reinhold.Blank,

    Within the ESDK package contains the 300 Series example: 331_Directory_Streaming which demonstrates basic usage of the EMA Library for accessing and parsing of OMM Directory data.

    image

  • Hi @nick.zincone.1,

    I used this Sample for testing this pupose. I just remove service name as descriped in USAGE GUID to get a complete source directory with all services existing in our TREP.

    But it doesn't work!

  • Hi @Reinhold.Blank,

    I was able to remove the service name and received a complete source directory, i.e.

    image

    This was my output:

    image

    I assume you are doing the same. Can you confirm which version of the ESDK you are using and show your output window?

    thanks.

  • Hi @Reinhold.Blank

    Can you confirm how many services there are on your TREP? And also what version of EMA you are using?

    There was a bug in an older version of ESDK - I just tried the 331 example in v.1.1 and it failed with a large source directory.

    When I tried the same example in ESDK v1.2 it worked with the same large source directory.

  • Hi @nick.zincone.1,

    I using EMA SDK 3.3.1. Below you see the result.

    image

    But I found out, where the throuble must be. We have 6 ADS. With one off them it works fine. On the other 5 the request fails. So I called our admins, that they check the configuration of this ADS.

    Thank you for your assistance

  • Thanks @Reinhold.Blank.

    Did you mean EMA 3.1.1? The latest version is 3.2.0 which was just recently released. It would be interesting if you get a chance to try the latest version to see if you get an internal error with those specific ADS processes.

  • @Reinhold.Blank

    Error Id -21 is RSSL_RET_BUFFER_TOO_SMALL. It looks like the allocated buffer is too small to encode the retrieved directory before sending to the application. I have tested with the ADS that provides a lot of services and found the same error in EMA 3.1.1..

    loggerMsg
    TimeStamp: 11:41:04.700
    ClientName: DirectoryCallbackClient
    Severity: Error
    Text: Internal error: failed to encode RsslRDMDirectoryMsg in DirectoryCallbackClie
    nt::processCallback()
    RsslChannel 0x0000000000000000
    Error Id -21
    Internal sysError 0
    Error Location rsslRDMDirectoryMsg.c:375
    Error Text (ret = rsslEncodeElementEntry(pEncodeIter, &elementEntry, &pInfo->serviceName)) == RSSL_RET_SUCCESS
    loggerMsgEnd

    However, after testing with EMA 3.2.0.L1, it works fine.

    EMA 3.2.0.L1 has been restructured and it uses CMake to generate build files. Please refer to ESDK_C_Migration_Guide.pdf in the package for more information.