From e9c1a2ab2b2ab3d7fdcfa6980e32f6a2d0d13dcb Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Tue, 28 Feb 2023 14:04:19 +0300 Subject: [PATCH] [TrueCloudLab/hrw#2] sdk-go: Optimize node hash Compute node hash by node initialization Signed-off-by: Dmitrii Stepanov --- netmap/node_info.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/netmap/node_info.go b/netmap/node_info.go index 42adffd..e7e30ce 100644 --- a/netmap/node_info.go +++ b/netmap/node_info.go @@ -25,7 +25,8 @@ import ( // // Instances can be created using built-in var declaration. type NodeInfo struct { - m netmap.NodeInfo + m netmap.NodeInfo + hash uint64 } // reads NodeInfo from netmap.NodeInfo message. If checkFieldPresence is set, @@ -86,6 +87,7 @@ func (x *NodeInfo) readFromV2(m netmap.NodeInfo, checkFieldPresence bool) error } x.m = m + x.hash = hrw.Hash(binPublicKey) return nil } @@ -167,6 +169,7 @@ func (x *NodeInfo) UnmarshalJSON(data []byte) error { // See also PublicKey. func (x *NodeInfo) SetPublicKey(key []byte) { x.m.SetPublicKey(key) + x.hash = hrw.Hash(x.m.GetPublicKey()) } // PublicKey returns value set using SetPublicKey. @@ -233,6 +236,9 @@ var _ hrw.Hasher = NodeInfo{} // Hash is needed to support weighted HRW therefore sort function sorts nodes // based on their public key. Hash isn't expected to be used directly. func (x NodeInfo) Hash() uint64 { + if x.hash != 0 { + return x.hash + } return hrw.Hash(x.m.GetPublicKey()) }