[#1170] pkg/morph: Invalidate cache on RPC switch

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
Pavel Karpy 2022-03-31 16:12:42 +03:00 committed by Alex Vanin
parent 6508136204
commit 4ed5b1ceef
5 changed files with 58 additions and 25 deletions

View file

@ -83,20 +83,18 @@ func (c *Client) NNSHash() (util.Uint160, error) {
return util.Uint160{}, ErrConnectionLost
}
c.mtx.RLock()
nnsHash := c.nnsHash
c.mtx.RUnlock()
nnsHash := c.cache.nns()
if nnsHash.Equals(util.Uint160{}) {
if nnsHash == nil {
cs, err := c.client.GetContractStateByID(nnsContractID)
if err != nil {
return util.Uint160{}, fmt.Errorf("NNS contract state: %w", err)
}
c.mtx.Lock()
c.nnsHash = cs.Hash
c.mtx.Unlock()
c.cache.setNNSHash(cs.Hash)
nnsHash = &cs.Hash
}
return nnsHash, nil
return *nnsHash, nil
}
func nnsResolveItem(c *client.WSClient, nnsHash util.Uint160, domain string) (stackitem.Item, error) {
@ -202,12 +200,8 @@ func (c *Client) SetGroupSignerScope() error {
// contractGroupKey returns public key designating NeoFS contract group.
func (c *Client) contractGroupKey() (*keys.PublicKey, error) {
c.mtx.RLock()
pub := c.groupKey
c.mtx.RUnlock()
if pub != nil {
return pub, nil
if gKey := c.cache.groupKey(); gKey != nil {
return gKey, nil
}
nnsHash, err := c.NNSHash()
@ -225,13 +219,11 @@ func (c *Client) contractGroupKey() (*keys.PublicKey, error) {
return nil, err
}
pub, err = keys.NewPublicKeyFromString(string(bs))
pub, err := keys.NewPublicKeyFromString(string(bs))
if err != nil {
return nil, err
}
c.mtx.Lock()
c.groupKey = pub
c.mtx.Unlock()
c.cache.setGroupKey(pub)
return pub, nil
}