diff --git a/node/src/main/kotlin/net/corda/node/services/api/IdentityServiceInternal.kt b/node/src/main/kotlin/net/corda/node/services/api/IdentityServiceInternal.kt index c77e39cec0..2bed926da5 100644 --- a/node/src/main/kotlin/net/corda/node/services/api/IdentityServiceInternal.kt +++ b/node/src/main/kotlin/net/corda/node/services/api/IdentityServiceInternal.kt @@ -15,4 +15,6 @@ interface IdentityServiceInternal : IdentityService { fun verifyAndRegisterNewRandomIdentity(identity: PartyAndCertificate) fun invalidateCaches(name: CordaX500Name) {} + + fun archiveNamedIdentity(name:String, publicKeyHash: String?) {} } \ No newline at end of file diff --git a/node/src/main/kotlin/net/corda/node/services/identity/PersistentIdentityService.kt b/node/src/main/kotlin/net/corda/node/services/identity/PersistentIdentityService.kt index fb0137fbe2..2e10525141 100644 --- a/node/src/main/kotlin/net/corda/node/services/identity/PersistentIdentityService.kt +++ b/node/src/main/kotlin/net/corda/node/services/identity/PersistentIdentityService.kt @@ -378,7 +378,7 @@ class PersistentIdentityService(cacheFactory: NamedCacheFactory) : SingletonSeri return resultList.last().publicKeyHash } - private fun archiveNamedIdentity(name:String, publicKeyHash: String?) { + override fun archiveNamedIdentity(name:String, publicKeyHash: String?) { archiveIdentityExecutor.submit { database.transaction { val deleteQuery = session.criteriaBuilder.createCriteriaDelete(PersistentNetworkMapCache.PersistentPartyToPublicKeyHash::class.java) diff --git a/node/src/main/kotlin/net/corda/node/services/network/PersistentNetworkMapCache.kt b/node/src/main/kotlin/net/corda/node/services/network/PersistentNetworkMapCache.kt index eb79a58302..2749f83c5d 100644 --- a/node/src/main/kotlin/net/corda/node/services/network/PersistentNetworkMapCache.kt +++ b/node/src/main/kotlin/net/corda/node/services/network/PersistentNetworkMapCache.kt @@ -310,7 +310,7 @@ open class PersistentNetworkMapCache(cacheFactory: NamedCacheFactory, synchronized(_changed) { database.transaction { removeInfoDB(session, node) - archiveNamedIdentity(session, node) + archiveNamedIdentity(node) changePublisher.onNext(MapChange.Removed(node)) } } @@ -319,13 +319,9 @@ open class PersistentNetworkMapCache(cacheFactory: NamedCacheFactory, logger.debug { "Done removing node with info: $node" } } - private fun archiveNamedIdentity(session: Session, nodeInfo: NodeInfo) { + private fun archiveNamedIdentity(nodeInfo: NodeInfo) { nodeInfo.legalIdentities.forEach { party -> - val deleteQuery = session.criteriaBuilder.createCriteriaDelete(PersistentPartyToPublicKeyHash::class.java) - val queryRoot = deleteQuery.from(PersistentPartyToPublicKeyHash::class.java) - deleteQuery.where(session.criteriaBuilder.equal(queryRoot.get("name"), party.name.toString())) - session.createQuery(deleteQuery).executeUpdate() - session.save(PersistentPartyToPublicKeyHash(party.name.toString(), party.owningKey.toStringShort() )) + identityService.archiveNamedIdentity(party.name.toString(), party.owningKey.toStringShort()) } } @@ -457,7 +453,7 @@ open class PersistentNetworkMapCache(cacheFactory: NamedCacheFactory, logger.debug { "Number of node infos to be cleared: ${result.size}" } for (nodeInfo in result) { session.remove(nodeInfo) - archiveNamedIdentity(session, nodeInfo.toNodeInfo()) + archiveNamedIdentity(nodeInfo.toNodeInfo()) } } }