Upgrade Quasar to 0.7.6 and fix an exception handling bug in SMM that it revealed (if an exception was thrown immediately on protocol startup we let it leak instead of capturing it in the future.

This commit is contained in:
Mike Hearn 2016-08-12 18:37:56 +02:00
parent a9ec3c253e
commit db3aa1491c
4 changed files with 10 additions and 8 deletions

View File

@ -1,6 +1,6 @@
buildscript {
ext.kotlin_version = '1.0.3'
ext.quasar_version = '0.7.5'
ext.quasar_version = '0.7.6'
ext.asm_version = '0.5.3'
ext.artemis_version = '1.3.0'
ext.jackson_version = '2.8.0.rc2'

Binary file not shown.

View File

@ -215,8 +215,8 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, tokenizableService
* restarted with checkpointed state machines in the storage service.
*/
fun <T> add(loggerName: String, logic: ProtocolLogic<T>): ListenableFuture<T> {
val fiber = ProtocolStateMachineImpl(logic, scheduler, loggerName)
try {
val fiber = ProtocolStateMachineImpl(logic, scheduler, loggerName)
// Need to add before iterating in case of immediate completion
initFiber(fiber) {
val checkpoint = Checkpoint(serializeFiber(fiber), null)
@ -229,11 +229,12 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, tokenizableService
}
totalStartedProtocols.inc()
}
return fiber.resultFuture
} catch (e: Throwable) {
// TODO: We should be able to remove this as we get more confident that we never fail to log exceptions.
e.printStackTrace()
throw e
check(fiber.resultFuture.isDone)
}
return fiber.resultFuture
}
private fun updateCheckpoint(psm: ProtocolStateMachineImpl<*>,

View File

@ -7,13 +7,13 @@ import com.r3corda.core.contracts.TransactionType
import com.r3corda.core.contracts.USD
import com.r3corda.core.testing.DUMMY_NOTARY
import com.r3corda.core.testing.MEGA_CORP
import com.r3corda.core.testing.rootCauseExceptions
import com.r3corda.node.internal.testing.MockNetwork
import org.junit.Before
import org.junit.Test
import java.util.concurrent.TimeUnit
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertTrue
/**
* Tests for the data vending service.
@ -76,10 +76,11 @@ class DataVendingServiceTests {
val notifyPsm = DataVending.Service.notify(registerNode.net, registerNode.services.storageService.myLegalIdentity,
walletServiceNode.info, tx)
// Check it was accepted
// Check it was not accepted
network.runNetwork()
val ex = assertFailsWith<java.util.concurrent.ExecutionException> { notifyPsm.get(1, TimeUnit.SECONDS) }
assertTrue(ex.cause is DataVending.Service.TransactionRejectedError)
assertFailsWith<DataVending.Service.TransactionRejectedError> {
rootCauseExceptions { notifyPsm.get() }
}
// Check the transaction is not in the receiving node
assertEquals(0, walletServiceNode.services.walletService.currentWallet.states.toList().size)