To stress test our code we've created a test case that takes all the symbols from a symbol list (about 9500) and attempts to establish a new reactor connection for each of them in turn.
We know that this will be rejected by the edge device given the limit on the number of connections and will most likely fail in the reactor due to open file handle limit.
We wanted to make sure our code could recover from those situations.
What we didn't expect was reactor corruption.
After about 11 calls to connect (all parameters the same), the reactor returns produces a RECONNECTING event with the following:
rsslErrorInfo {
rsslErrorInfoCode = RSSL_EIC_FAILURE
rsslError {
RsslErrorId = -29;
sysError = 0;
text = "(ret = rsslEncodeMsgInit(pEncodeIter, &msg, 0)) == RSSL_RET_ENCODE_MSG_KEY_OPAQUE"
}
errorLocation = "RDM/Impl/rsslRDMLoginMsg.c:53"
}
This happens after the CHANNEL_UP, but before a CHANNEL_READY
After this another ReactorChannel that had also received a Channel_UP event gets an CHANNEL_RECONNECTING, with the error info:
rsslErrorInfo {
rsslErrorInfoCode = RSSL_EIC_FAILURE
rsslError {
RsslErrorId = -1;
sysError = 0;
text = "Unknown login
msg type 6116480"
errorLocation = "RDM/Impl/rsslRDMLoginMsg.c:604"
}
This is easily reproducable.
We're using the ElektronSDK 1.0.6