Merge pull request #1790 from akka/wip-3676-cache-the-last-system-and-protocol-ban

=clu #3676 Cache the last system name and protocol during deserialization.
This commit is contained in:
Björn Antonsson 2013-10-21 07:07:00 -07:00
commit bc94f52362

View file

@ -127,8 +127,34 @@ class ClusterMessageSerializer(val system: ExtendedActorSystem) extends Serializ
private def uniqueAddressToProto(uniqueAddress: UniqueAddress): cm.UniqueAddress.Builder =
cm.UniqueAddress.newBuilder().setAddress(addressToProto(uniqueAddress.address)).setUid(uniqueAddress.uid)
// we don't care about races here since it's just a cache
@volatile
private var protocolCache: String = null
@volatile
private var systemCache: String = null
private def getProtocol(address: cm.Address): String = {
val p = address.getProtocol
val pc = protocolCache
if (pc == p) pc
else {
protocolCache = p
p
}
}
private def getSystem(address: cm.Address): String = {
val s = address.getSystem
val sc = systemCache
if (sc == s) sc
else {
systemCache = s
s
}
}
private def addressFromProto(address: cm.Address): Address =
Address(address.getProtocol, address.getSystem, address.getHostname, address.getPort)
Address(getProtocol(address), getSystem(address), address.getHostname, address.getPort)
private def uniqueAddressFromProto(uniqueAddress: cm.UniqueAddress): UniqueAddress =
UniqueAddress(addressFromProto(uniqueAddress.getAddress), uniqueAddress.getUid)