solution: propagate native call exception to downstream
This commit is contained in:
@@ -75,6 +75,7 @@ class NativeCall(
|
|||||||
}
|
}
|
||||||
return BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
return BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
||||||
.setSucceed(false)
|
.setSucceed(false)
|
||||||
|
.setErrorMessage(it?.message ?: "Internal error")
|
||||||
.setId(id)
|
.setId(id)
|
||||||
.build()
|
.build()
|
||||||
.toMono()
|
.toMono()
|
||||||
@@ -139,7 +140,7 @@ class NativeCall(
|
|||||||
else CallFailure(ctx.id, it)
|
else CallFailure(ctx.id, it)
|
||||||
}
|
}
|
||||||
.switchIfEmpty(
|
.switchIfEmpty(
|
||||||
Mono.error<CallContext<ByteArray>>(CallFailure(ctx.id, Exception("No response or no available upstream for ${ctx.payload.method}")))
|
Mono.error(CallFailure(ctx.id, Exception("No response or no available upstream for ${ctx.payload.method}")) as Throwable)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import io.emeraldpay.grpc.Chain
|
|||||||
import io.infinitape.etherjar.rpc.Batch
|
import io.infinitape.etherjar.rpc.Batch
|
||||||
import io.infinitape.etherjar.rpc.JacksonRpcConverter
|
import io.infinitape.etherjar.rpc.JacksonRpcConverter
|
||||||
import io.infinitape.etherjar.rpc.RpcException
|
import io.infinitape.etherjar.rpc.RpcException
|
||||||
|
import io.infinitape.etherjar.rpc.RpcResponseError
|
||||||
import io.infinitape.etherjar.rpc.transport.BatchStatus
|
import io.infinitape.etherjar.rpc.transport.BatchStatus
|
||||||
import io.infinitape.etherjar.rpc.transport.RpcTransport
|
import io.infinitape.etherjar.rpc.transport.RpcTransport
|
||||||
import reactor.core.publisher.Flux
|
import reactor.core.publisher.Flux
|
||||||
@@ -74,7 +75,7 @@ class EthereumGrpcTransport(
|
|||||||
bi.onError(e)
|
bi.onError(e)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bi.onError(RpcException(-32603, resp.error.toString()))
|
bi.onError(RpcException(RpcResponseError.CODE_INTERNAL_ERROR, resp.errorMessage))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ class NativeCallSpec extends Specification {
|
|||||||
StepVerifier.create(resp)
|
StepVerifier.create(resp)
|
||||||
.expectNext(BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
.expectNext(BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
||||||
.setSucceed(false)
|
.setSucceed(false)
|
||||||
|
.setErrorMessage("Failed to call 5: test test")
|
||||||
.setId(5)
|
.setId(5)
|
||||||
.build())
|
.build())
|
||||||
.expectComplete()
|
.expectComplete()
|
||||||
@@ -151,6 +152,7 @@ class NativeCallSpec extends Specification {
|
|||||||
StepVerifier.create(resp)
|
StepVerifier.create(resp)
|
||||||
.expectNext(BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
.expectNext(BlockchainOuterClass.NativeCallReplyItem.newBuilder()
|
||||||
.setSucceed(false)
|
.setSucceed(false)
|
||||||
|
.setErrorMessage("test test")
|
||||||
.build())
|
.build())
|
||||||
.expectComplete()
|
.expectComplete()
|
||||||
.verify(Duration.ofSeconds(1))
|
.verify(Duration.ofSeconds(1))
|
||||||
|
|||||||
Reference in New Issue
Block a user