Raft JMX reporting: initialize after server is created

This commit is contained in:
Roman Plášil 2017-08-30 15:28:14 +08:00 committed by Mike Hearn
parent 0831fdfd4f
commit b6e8b05dea

View File

@ -46,7 +46,7 @@ import javax.persistence.Lob
* to the cluster leader to be actioned.
*/
@ThreadSafe
class RaftUniquenessProvider(services: ServiceHubInternal) : UniquenessProvider, SingletonSerializeAsToken() {
class RaftUniquenessProvider(private val services: ServiceHubInternal) : UniquenessProvider, SingletonSerializeAsToken() {
companion object {
private val log = loggerFor<RaftUniquenessProvider>()
@ -97,20 +97,6 @@ class RaftUniquenessProvider(services: ServiceHubInternal) : UniquenessProvider,
private lateinit var server: CopycatServer
init {
services.monitoringService.metrics.register("RaftCluster.ThisServerStatus", Gauge<String> {
server.state().name
})
services.monitoringService.metrics.register("RaftCluster.MembersCount", Gauge<Int> {
server.cluster().members().size
})
services.monitoringService.metrics.register("RaftCluster.Members", Gauge<List<String>> {
server.cluster().members().map { it.address().toString() }
})
}
/**
* Copycat clients are responsible for connecting to the cluster and submitting commands and queries that operate
* on the cluster's replicated state machine.
@ -165,6 +151,8 @@ class RaftUniquenessProvider(services: ServiceHubInternal) : UniquenessProvider,
server.bootstrap()
}
registerMonitoring()
val client = CopycatClient.builder(address)
.withTransport(transport) // TODO: use local transport for client-server communications
.withConnectionStrategy(ConnectionStrategies.EXPONENTIAL_BACKOFF)
@ -196,6 +184,21 @@ class RaftUniquenessProvider(services: ServiceHubInternal) : UniquenessProvider,
.build()
}
private fun registerMonitoring() {
services.monitoringService.metrics.register("RaftCluster.ThisServerStatus", Gauge<String> {
server.state().name
})
services.monitoringService.metrics.register("RaftCluster.MembersCount", Gauge<Int> {
server.cluster().members().size
})
services.monitoringService.metrics.register("RaftCluster.Members", Gauge<List<String>> {
server.cluster().members().map { it.address().toString() }
})
}
override fun commit(states: List<StateRef>, txId: SecureHash, callerIdentity: Party) {
val entries = states.mapIndexed { i, stateRef -> stateRef to UniquenessProvider.ConsumingTx(txId, i, callerIdentity) }