Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {

dependencies {
implementation "build.linea.internal:metrics"
implementation "build.linea.internal:long-running-service"
implementation "com.fasterxml.jackson.module:jackson-module-kotlin"
implementation "io.javalin:javalin"
implementation project(":core")
Expand Down
7 changes: 5 additions & 2 deletions api/src/main/kotlin/maru/api/ApiServerImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
package maru.api

import io.javalin.Javalin
import java.util.concurrent.CompletableFuture
import maru.VersionProvider
import maru.api.beacon.GetBlock
import maru.api.beacon.GetBlockHeader
Expand Down Expand Up @@ -38,7 +39,7 @@ class ApiServerImpl(

var app: Javalin? = null

override fun start() {
override fun start(): CompletableFuture<Unit> {
if (app != null) {
app!!.start(config.port.toInt())
} else {
Expand Down Expand Up @@ -69,11 +70,13 @@ class ApiServerImpl(
.get(GetStateValidators.ROUTE, GetStateValidators(chainDataProvider))
.start(config.port.toInt())
}
return CompletableFuture.completedFuture(Unit)
}

override fun stop() {
override fun stop(): CompletableFuture<Unit> {
app?.stop()
app = null
return CompletableFuture.completedFuture(Unit)
}

override fun port(): Int = app!!.port()
Expand Down
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ dependencies {
implementation(project(":jvm-libs:mappers"))

implementation "build.linea.internal:futures"
implementation "build.linea.internal:long-running-service"

implementation "info.picocli:picocli"
implementation "com.sksamuel.hoplite:hoplite-core"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ class MaruConsensusSwitchTest {

@AfterEach
fun tearDown() {
followerMaruNode.stop()
validatorMaruNode.stop()
followerMaruNode.stop().get()
validatorMaruNode.stop().get()
followerMaruNode.close()
validatorMaruNode.close()
cluster.close()
Expand Down Expand Up @@ -145,7 +145,7 @@ class MaruConsensusSwitchTest {
engineApiRpc = validatorEngineRpcUrl,
dataDir = validatorMaruTmpDir.toPath(),
)
validatorMaruNode.start()
validatorMaruNode.start().get()

val followerEthereumJsonRpcBaseUrl = followerBesuNode.jsonRpcBaseUrl().get()
val followerEngineRpcUrl = followerBesuNode.engineRpcUrl().get()
Expand All @@ -157,7 +157,7 @@ class MaruConsensusSwitchTest {
dataDir = followerMaruTmpDir.toPath(),
validatorPortForStaticPeering = validatorMaruNode.p2pPort(),
)
followerMaruNode.start()
followerMaruNode.start().get()

followerMaruNode.awaitTillMaruHasPeers(1u)
validatorMaruNode.awaitTillMaruHasPeers(1u)
Expand Down
6 changes: 3 additions & 3 deletions app/src/integrationTest/kotlin/maru/app/MaruDiscoveryTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class MaruDiscoveryTest {
fun tearDown() {
maruApps.forEach { app ->
try {
app.stop()
app.stop().get()
app.close()
} catch (e: Exception) {
log.warn("Error stopping Maru app", e)
Expand Down Expand Up @@ -134,7 +134,7 @@ class MaruDiscoveryTest {

bootnodeStack.setMaruApp(bootnodeMaruApp)
maruApps.add(bootnodeMaruApp)
bootnodeMaruApp.start()
bootnodeMaruApp.start().get()

// Get bootnode ENR for other nodes to use
val bootnodeEnr = bootnodeMaruApp.p2pNetwork.localNodeRecord?.asEnr()
Expand Down Expand Up @@ -171,7 +171,7 @@ class MaruDiscoveryTest {

stack.setMaruApp(followerMaruApp)
maruApps.add(followerMaruApp)
followerMaruApp.start()
followerMaruApp.start().get()
}

log.info("All $numberOfNodes Maru nodes started")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ class MaruFollowerDelayedStartTest {

@AfterEach
fun tearDown() {
followerStack.maruApp.stop()
followerStack.maruApp.stop().get()
followerStack.maruApp.close()
validatorStack.maruApp.stop()
validatorStack.maruApp.stop().get()
validatorStack.maruApp.close()
cluster.close()
}
Expand All @@ -64,7 +64,7 @@ class MaruFollowerDelayedStartTest {
dataDir = validatorStack.tmpDir,
)
validatorStack.setMaruApp(validatorMaruApp)
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

val blocksToProduce = 5
repeat(blocksToProduce) {
Expand Down Expand Up @@ -93,7 +93,7 @@ class MaruFollowerDelayedStartTest {
validatorPortForStaticPeering = validatorStack.p2pPort,
)
followerStack.setMaruApp(followerMaruApp)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

followerStack.besuNode.assertMinedBlocks(blocksToProduce)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class MaruFollowerNegativeTest {
overridingP2PNetwork = spyingP2PNetwork,
)
}
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

val validatorGenesis =
validatorStack.besuNode
Expand All @@ -84,7 +84,7 @@ class MaruFollowerNegativeTest {
p2pNetwork = followerP2PNetwork,
)
}
followerStack.maruApp.start()
followerStack.maruApp.start().get()

val followerGenesis =
followerStack.besuNode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class MaruFollowerNoElTest {
}

// Start all Besu nodes together for proper peering
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

// Discover actual validator API port
validatorApiPort = validatorStack.maruApp.apiPort()
Expand All @@ -93,7 +93,7 @@ class MaruFollowerNoElTest {
startApiServer = true,
)

maruFollower.start()
maruFollower.start().get()

// Discover actual follower API port
followerApiPort = maruFollower.apiPort()
Expand All @@ -105,8 +105,8 @@ class MaruFollowerNoElTest {

@AfterEach
fun tearDown() {
maruFollower.stop()
validatorStack.maruApp.stop()
maruFollower.stop().get()
validatorStack.maruApp.stop().get()
validatorStack.maruApp.close()
cluster.close()
}
Expand Down
24 changes: 12 additions & 12 deletions app/src/integrationTest/kotlin/maru/app/MaruFollowerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class MaruFollowerTest {
syncingConfig = syncingConfig,
)
validatorStack.setMaruApp(validatorMaruApp)
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

// Get the validator's p2p port after it's started
val validatorP2pPort = validatorStack.p2pPort
Expand All @@ -75,7 +75,7 @@ class MaruFollowerTest {
enablePayloadValidation = payloadValidationEnabled,
)
followerStack.setMaruApp(followerMaruApp)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

log.info("Nodes are peered")
followerStack.maruApp.awaitTillMaruHasPeers(1u)
Expand Down Expand Up @@ -109,8 +109,8 @@ class MaruFollowerTest {

@AfterEach
fun tearDown() {
followerStack.maruApp.stop()
validatorStack.maruApp.stop()
followerStack.maruApp.stop().get()
validatorStack.maruApp.stop().get()
followerStack.maruApp.close()
validatorStack.maruApp.close()
cluster.close()
Expand Down Expand Up @@ -170,7 +170,7 @@ class MaruFollowerTest {
// This is here mainly to wait until block propagation is complete
checkValidatorAndFollowerBlocks(blocksToProduce)

followerStack.maruApp.stop()
followerStack.maruApp.stop().get()
followerStack.maruApp.close()
followerStack.setMaruApp(
maruFactory.buildTestMaruFollowerWithP2pPeering(
Expand All @@ -180,7 +180,7 @@ class MaruFollowerTest {
validatorPortForStaticPeering = validatorStack.p2pPort,
),
)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

followerStack.maruApp.awaitTillMaruHasPeers(1u)
validatorStack.maruApp.awaitTillMaruHasPeers(1u)
Expand Down Expand Up @@ -217,7 +217,7 @@ class MaruFollowerTest {
// This is here mainly to wait until block propagation is complete
checkValidatorAndFollowerBlocks(blocksToProduce)

validatorStack.maruApp.stop()
validatorStack.maruApp.stop().get()
validatorStack.maruApp.close()
validatorStack.setMaruApp(
maruFactory.buildTestMaruValidatorWithP2pPeering(
Expand All @@ -227,7 +227,7 @@ class MaruFollowerTest {
p2pPort = validatorP2pPort,
),
)
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

repeat(blocksToProduce) {
transactionsHelper.run {
Expand Down Expand Up @@ -282,7 +282,7 @@ class MaruFollowerTest {
fun `Maru follower is able to complete initial syncing`(syncingConfig: SyncingConfig) {
setupMaruHelper(syncingConfig)

followerStack.maruApp.stop()
followerStack.maruApp.stop().get()
followerStack.maruApp.close()

val residueBlocks = 3 // residue of modulo peerChainHeightGranularity i.e. 10
Expand Down Expand Up @@ -311,7 +311,7 @@ class MaruFollowerTest {
syncingConfig = syncingConfig,
),
)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

when (syncingConfig.syncTargetSelection) {
is SyncingConfig.SyncTargetSelection.Highest ->
Expand Down Expand Up @@ -346,7 +346,7 @@ class MaruFollowerTest {
// This is here mainly to wait until block propagation is complete
checkValidatorAndFollowerBlocks(blocksToProduceWithoutResidue)

followerStack.maruApp.stop()
followerStack.maruApp.stop().get()
followerStack.maruApp.close()

repeat(blocksToProduceWithoutResidue + residueBlocks) {
Expand All @@ -369,7 +369,7 @@ class MaruFollowerTest {
syncingConfig = syncingConfig,
),
)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

when (syncingConfig.syncTargetSelection) {
is SyncingConfig.SyncTargetSelection.Highest ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class MaruLineaFinalizationTest {
overridingLineaContractClient = fakeLineaContract,
)
validatorStack.setMaruApp(validatorMaruApp)
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()

val validatorP2pPort = validatorStack.p2pPort

Expand All @@ -84,7 +84,7 @@ class MaruLineaFinalizationTest {
overridingLineaContractClient = fakeLineaContract,
)
followerStack.setMaruApp(followerMaruApp)
followerStack.maruApp.start()
followerStack.maruApp.start().get()

followerStack.maruApp.awaitTillMaruHasPeers(1u)
validatorStack.maruApp.awaitTillMaruHasPeers(1u)
Expand Down Expand Up @@ -125,8 +125,8 @@ class MaruLineaFinalizationTest {

@AfterEach
fun tearDown() {
followerStack.maruApp.stop()
validatorStack.maruApp.stop()
followerStack.maruApp.stop().get()
validatorStack.maruApp.stop().get()
followerStack.maruApp.close()
validatorStack.maruApp.close()
cluster.close()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class MaruManyFollowerElsTest {
* Starts the Maru follower that was already instantiated in setUp().
*/
private fun startMaruFollower() {
followerStack.maruApp.start()
followerStack.maruApp.start().get()

// Wait for nodes to peer
log.info("Waiting for Maru nodes to peer")
Expand Down Expand Up @@ -107,7 +107,7 @@ class MaruManyFollowerElsTest {
dataDir = validatorStack.tmpDir,
)
validatorStack.setMaruApp(validatorMaruApp)
validatorStack.maruApp.start()
validatorStack.maruApp.start().get()
val followerMaruApp =
maruFactory.buildTestMaruFollowerWithP2pPeering(
ethereumJsonRpcUrl = followerStack.besuNode.jsonRpcBaseUrl().get(),
Expand All @@ -122,8 +122,8 @@ class MaruManyFollowerElsTest {

@AfterEach
fun tearDown() {
followerStack.maruApp.stop()
validatorStack.maruApp.stop()
followerStack.maruApp.stop().get()
validatorStack.maruApp.stop().get()
followerStack.maruApp.close()
validatorStack.maruApp.close()
cluster.close()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ class MaruMultiValidatorTest {

@AfterEach
fun tearDown() {
validator2Stack.maruApp.stop()
validator1Stack.maruApp.stop()
validator2Stack.maruApp.stop().get()
validator1Stack.maruApp.stop().get()
validator2Stack.maruApp.close()
validator1Stack.maruApp.close()
cluster.close()
Expand All @@ -97,7 +97,7 @@ class MaruMultiValidatorTest {
initialValidators = initialValidators,
)
validator1Stack.setMaruApp(validator1MaruApp)
validator1Stack.maruApp.start()
validator1Stack.maruApp.start().get()
// Get validator 1 p2p port and node ID after it's started
val validator1P2pPort = validator1Stack.p2pPort
val validator1NodeId = validator1Stack.maruApp.p2pNetwork.nodeId
Expand All @@ -115,7 +115,7 @@ class MaruMultiValidatorTest {
initialValidators = initialValidators,
)
validator2Stack.setMaruApp(validator2MaruApp)
validator2Stack.maruApp.start()
validator2Stack.maruApp.start().get()

validator2Stack.maruApp.awaitTillMaruHasPeers(1u)
validator1Stack.maruApp.awaitTillMaruHasPeers(1u)
Expand Down
Loading
Loading