We are creating an EMA consumer, and then opening item streams (100 items batched in each ReqMsg) with the consumer. We simply stop seeing new messages a few minutes after the consumer is established, without any exceptions or errors. This happens while the loop of opening item streams is ongoing. Debugging shows that there is potentially a deadlock situation occurring, as illustrated by the stack traces below. Is there some kind of rate/limit as to how batched requests should be created (we have a single Machine ID and hence a single EMA consumer). Version used is 3.6.7.1, running Kotlin. The core code used to batch requests is below
private suspend fun requestBatchRics(rics: List<String>) {
rics.chunked(100).forEach {
val ricArray = EmaFactory.createOmmArray().apply {
it.forEach { ric -> add(EmaFactory.createOmmArrayEntry().ascii(ric)) }
}
val batchList = EmaFactory.createElementList().apply {
add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_BATCH_ITEM_LIST, ricArray))
if (REQUEST_SUBSET_MARKET_DATA_FIELDS) {
val viewDataArray = EmaFactory.createOmmArray().apply {
FIELD_IDS.values.forEach { fieldValue ->
add(EmaFactory.createOmmArrayEntry().intValue(fieldValue))
}
}
add(EmaFactory.createElementEntry().uintValue(EmaRdm.ENAME_VIEW_TYPE, 1))
add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_VIEW_DATA, viewDataArray))
}
}
EmaFactory.createReqMsg()
val requestMessage = EmaFactory
.createReqMsg()
.serviceName(service)
.payload(batchList)
consumer.registerClient(reqMsg, this)
}