ENT-1962: Perform RPC retry in case of RejectedCommandException (#982)

* ENT-1962: Perform RPC retry in case of RejectedCommandException

(cherry picked from commit 2a7f0dd)

* ENT-1962: Address code-review comments.

(cherry picked from commit 7b4edde)
This commit is contained in:
Viktor Kolomeyko 2018-06-13 12:33:36 +01:00 committed by GitHub
parent eaf7adab20
commit 1011e45b84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 2 deletions

View File

@ -45,6 +45,7 @@ dependencies {
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
cordaCompile project(":client:rpc")
cordaCompile project(':node-api')
cordaCompile project(":finance")
cordaCompile project(":perftestcordapp")

View File

@ -12,6 +12,7 @@ import net.corda.core.node.services.vault.Sort
import net.corda.core.utilities.getOrThrow
import net.corda.core.utilities.minutes
import net.corda.core.utilities.seconds
import net.corda.nodeapi.exceptions.RejectedCommandException
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.time.Duration
@ -57,13 +58,19 @@ fun <T> arithmeticBackoff(retryInterval: Duration, giveUpInterval: Duration, mea
val start = System.currentTimeMillis()
var iterCount = 0
fun doOnException(ex: Exception) {
logger.warn("Exception $meaningfulDescription, iteration #$iterCount", ex)
Thread.sleep(iterCount * retryInterval.toMillis())
}
do {
try {
iterCount++
return op()
} catch (ex: RPCException) {
logger.warn("Exception $meaningfulDescription, iteration #$iterCount", ex)
Thread.sleep(iterCount * retryInterval.toMillis())
doOnException(ex)
} catch (ex: RejectedCommandException) {
doOnException(ex)
}
} while ((System.currentTimeMillis() - start) < giveUpInterval.toMillis())