Write response upstreamId in streaming (#419)

This commit is contained in:
KirillPamPam
2024-02-16 12:57:38 +04:00
committed by GitHub
parent 9ca803b39d
commit e612a62c71
2 changed files with 156 additions and 10 deletions

View File

@@ -110,20 +110,34 @@ open class NativeCall(
return if (callResult.stream == null) {
Mono.just(buildResponse(callResult))
} else {
val stream = callResult.stream.map { stream ->
val result = BlockchainOuterClass.NativeCallReplyItem.newBuilder()
.setSucceed(true)
.setFinalChunk(stream.finalChunk)
.setChunked(true)
.setId(callResult.id)
result.payload = ByteString.copyFrom(stream.chunkData)
result.build()
return callResult.stream.switchOnFirst { t, stream ->
val firstChunk = t.get()
if (firstChunk == null) {
stream.map { buildStreamResult(it, callResult.id).build() }
} else {
Flux.concat(
Mono.just(firstChunk)
.map {
buildStreamResult(it, callResult.id)
.setUpstreamId(callResult.upstreamId)
.build()
},
stream.skip(1).map { buildStreamResult(it, callResult.id).build() },
)
}
}
stream
}
}
private fun buildStreamResult(chunk: Chunk, id: Int): BlockchainOuterClass.NativeCallReplyItem.Builder {
return BlockchainOuterClass.NativeCallReplyItem.newBuilder()
.setSucceed(true)
.setFinalChunk(chunk.finalChunk)
.setChunked(true)
.setPayload(ByteString.copyFrom(chunk.chunkData))
.setId(id)
}
private fun completeSpan(callResult: CallResult, requestCount: Int) {
val span = tracer.currentSpan()
if (callResult.isError()) {