[EMA][C++] Login Re-Issue failed

Hi,

While doing component failovers in my application, i noticed following error (I am using realtime sdk - ema api/). What does that mean? What should i do to avoid these errors. (As it seems, login re-issue has been successful in second attempt)

Failed to reissue login request. Reason: RSSL_RET_INVALID_DATA. Error text: Login userNameType does not match existing request.

I noticed following in the documentation. We haven't handled following errors in our application explicitly. Has it anything to do with it ?

HTTP Error Handling for Reactor Token Reissues

The Enterprise Message API supports handling for the following HTTP error codes from the API gateway:

300 Errors:

  1. Perform URL redirect for 301, 302, 307 and 308 error codes.
  2. Retry the request to the API gateway for all other error codes

400 Errors:

  1. For Version 1 authentication, retry with username and password for error codes 400 and 401
  2. Stop retry the request for error codes 403, 404, 410, and 451
  3. Retry the request to the API gateway for all other error codes

500 Errors: Retry the request to the API gateway for all error codes

Best Answer

  • Jirapongse
    Answer ✓

    @thilinaillangasinghe

    Did the application call the reissue method with the Login handle?

    For example:

    consumer->reissue(Login::LoginReq().name("user").getMessage(), loginHandle);

    I got the following error when running the above code.

    1692180782336.png


Answers

  • @thilinaillangasinghe

    Thank you for reaching out to us.

    The error mean that the userNameType in the login request message doesn't match the previous login request. Typicallly, the userNameType in the login request message must be the same.

    Please let us know the version of the Real-Time SDK that you are using.

    Moreover, you have mentioned "doing component failovers in the application". How did you do it?

  • Thanks for the response @Jirapongse

    I am using ema3.6.6.L1. I have a primary process and a mirror process. Whenever primary process is down, mirror takes over and connect with RTO.

  • Thanks for the hint @Jirapongse, I'll check on that path. Apparently correct login handle has been used. I noticed, nameType field is set in login message as well as set (programmatically) it in consumer configurations.

    m_loginHandle = m_consumer->registerClient(*loginReqMsg,*this, 0);
    ------
    refinitiv::ema::access::ReqMsg* loginReqMsg = m_emaMessageHandler->getLoginReqMessage();
    loginReqMsg->initialImage(false);
    loginReqMsg->interestAfterRefresh(true);
    loginReqMsg->pause(isInputPause);
    m_consumer->reissue(*loginReqMsg, m_loginHandle);