mirror of
https://github.com/corda/corda.git
synced 2025-06-18 15:18:16 +00:00
Converted MapChange into a sealed data structure so that only Modified has the previous node property
This commit is contained in:
@ -14,7 +14,7 @@ import net.corda.core.flows.FlowStateMachine
|
||||
import net.corda.core.messaging.SingleMessageRecipient
|
||||
import net.corda.core.node.*
|
||||
import net.corda.core.node.services.*
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChangeType
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChange
|
||||
import net.corda.core.serialization.SingletonSerializeAsToken
|
||||
import net.corda.core.serialization.deserialize
|
||||
import net.corda.core.serialization.serialize
|
||||
@ -433,18 +433,14 @@ abstract class AbstractNode(open val configuration: NodeConfiguration, val netwo
|
||||
|
||||
protected open fun makeIdentityService(): IdentityService {
|
||||
val service = InMemoryIdentityService()
|
||||
|
||||
service.registerIdentity(info.legalIdentity)
|
||||
|
||||
services.networkMapCache.partyNodes.forEach { service.registerIdentity(it.legalIdentity) }
|
||||
|
||||
netMapCache.changed.subscribe { mapChange ->
|
||||
// TODO how should we handle network map removal
|
||||
if (mapChange.type == MapChangeType.Added) {
|
||||
if (mapChange is MapChange.Added) {
|
||||
service.registerIdentity(mapChange.node.legalIdentity)
|
||||
}
|
||||
}
|
||||
|
||||
return service
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ import net.corda.core.crypto.X509Utilities.CORDA_ROOT_CA
|
||||
import net.corda.core.crypto.newSecureRandom
|
||||
import net.corda.core.div
|
||||
import net.corda.core.node.services.NetworkMapCache
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChangeType
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChange
|
||||
import net.corda.core.utilities.debug
|
||||
import net.corda.core.utilities.loggerFor
|
||||
import net.corda.node.printBasicNodeInfo
|
||||
@ -108,23 +108,13 @@ class ArtemisMessagingServer(override val config: NodeConfiguration,
|
||||
maybeDeployBridgeForAddress(networkMapService)
|
||||
}
|
||||
|
||||
private fun destroyPossibleStaleBridge(change: NetworkMapCache.MapChange) {
|
||||
fun removePreviousBridge() {
|
||||
(change.prevNodeInfo?.address as? ArtemisAddress)?.let {
|
||||
maybeDestroyBridge(it.queueName)
|
||||
}
|
||||
}
|
||||
|
||||
if (change.type == MapChangeType.Modified) {
|
||||
removePreviousBridge()
|
||||
} else if (change.type == MapChangeType.Removed) {
|
||||
removePreviousBridge()
|
||||
// TODO Fix the network map change data classes so that the remove event doesn't have two NodeInfo fields
|
||||
val address = change.node.address
|
||||
if (address is ArtemisAddress) {
|
||||
maybeDestroyBridge(address.queueName)
|
||||
}
|
||||
private fun destroyPossibleStaleBridge(change: MapChange) {
|
||||
val staleNodeInfo = when (change) {
|
||||
is MapChange.Modified -> change.previousNode
|
||||
is MapChange.Removed -> change.node
|
||||
is MapChange.Added -> return
|
||||
}
|
||||
(staleNodeInfo.address as? ArtemisAddress)?.let { maybeDestroyBridge(it.queueName) }
|
||||
}
|
||||
|
||||
private fun configureAndStartServer() {
|
||||
|
@ -186,8 +186,9 @@ private class RPCKryo(observableSerializer: Serializer<Observable<Any>>? = null)
|
||||
register(ServiceEntry::class.java)
|
||||
register(NodeInfo::class.java)
|
||||
register(PhysicalLocation::class.java)
|
||||
register(NetworkMapCache.MapChange::class.java)
|
||||
register(NetworkMapCache.MapChangeType::class.java)
|
||||
register(NetworkMapCache.MapChange.Added::class.java)
|
||||
register(NetworkMapCache.MapChange.Removed::class.java)
|
||||
register(NetworkMapCache.MapChange.Modified::class.java)
|
||||
register(ArtemisMessagingComponent.NodeAddress::class.java,
|
||||
read = { kryo, input ->
|
||||
ArtemisMessagingComponent.NodeAddress(
|
||||
|
@ -14,7 +14,6 @@ import net.corda.core.node.services.DEFAULT_SESSION_ID
|
||||
import net.corda.core.node.services.NetworkCacheError
|
||||
import net.corda.core.node.services.NetworkMapCache
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChange
|
||||
import net.corda.core.node.services.NetworkMapCache.MapChangeType
|
||||
import net.corda.core.serialization.SingletonSerializeAsToken
|
||||
import net.corda.core.serialization.deserialize
|
||||
import net.corda.core.serialization.serialize
|
||||
@ -92,17 +91,17 @@ open class InMemoryNetworkMapCache : SingletonSerializeAsToken(), NetworkMapCach
|
||||
synchronized(_changed) {
|
||||
val previousNode = registeredNodes.put(node.legalIdentity, node)
|
||||
if (previousNode == null) {
|
||||
_changed.onNext(MapChange(node, previousNode, MapChangeType.Added))
|
||||
_changed.onNext(MapChange.Added(node))
|
||||
} else if (previousNode != node) {
|
||||
_changed.onNext(MapChange(node, previousNode, MapChangeType.Modified))
|
||||
_changed.onNext(MapChange.Modified(node, previousNode))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun removeNode(node: NodeInfo) {
|
||||
synchronized(_changed) {
|
||||
val oldValue = registeredNodes.remove(node.legalIdentity)
|
||||
_changed.onNext(MapChange(node, oldValue, MapChangeType.Removed))
|
||||
registeredNodes.remove(node.legalIdentity)
|
||||
_changed.onNext(MapChange.Removed(node))
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user