forked from TrueCloudLab/frostfs-node
[#1006] neofs-adm: skip missing entries in dump-hashes
We have `subnet` contract in list, but it isn't currently deployed. This commit skips missing NNS entries to handle such situation. In future we may optimize this to be done in 1 round-trip. As a nice side-effect, dump-hashes for notary-enabled environment works even if notary is disabled -- it just prints zero hash for proxy contract. Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
4ad2961c51
commit
a5e952cc72
1 changed files with 17 additions and 20 deletions
|
@ -42,21 +42,6 @@ func dumpContractHashes(cmd *cobra.Command, _ []string) error {
|
||||||
|
|
||||||
infos := []contractDumpInfo{{name: nnsContract, hash: cs.Hash}}
|
infos := []contractDumpInfo{{name: nnsContract, hash: cs.Hash}}
|
||||||
|
|
||||||
bw := io.NewBufBinWriter()
|
|
||||||
for _, ctrName := range contractList {
|
|
||||||
emit.AppCall(bw.BinWriter, cs.Hash, "resolve", callflag.ReadOnly,
|
|
||||||
ctrName+".neofs", int64(nns.TXT))
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := c.InvokeScript(bw.Bytes(), nil)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("can't fetch info from NNS: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(res.Stack) != len(contractList) {
|
|
||||||
return errors.New("invalid response from NNS contract: length mismatch")
|
|
||||||
}
|
|
||||||
|
|
||||||
irSize := 0
|
irSize := 0
|
||||||
for ; irSize < lastGlagoliticLetter; irSize++ {
|
for ; irSize < lastGlagoliticLetter; irSize++ {
|
||||||
ok, err := c.NNSIsAvailable(cs.Hash, getAlphabetNNSDomain(irSize))
|
ok, err := c.NNSIsAvailable(cs.Hash, getAlphabetNNSDomain(irSize))
|
||||||
|
@ -68,6 +53,7 @@ func dumpContractHashes(cmd *cobra.Command, _ []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := bytes.NewBuffer(nil)
|
buf := bytes.NewBuffer(nil)
|
||||||
|
bw := io.NewBufBinWriter()
|
||||||
|
|
||||||
if irSize != 0 {
|
if irSize != 0 {
|
||||||
bw.Reset()
|
bw.Reset()
|
||||||
|
@ -91,11 +77,22 @@ func dumpContractHashes(cmd *cobra.Command, _ []string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range contractList {
|
for _, ctrName := range contractList {
|
||||||
info := contractDumpInfo{name: contractList[i]}
|
bw.Reset()
|
||||||
if h, err := parseNNSResolveResult(res.Stack[i]); err == nil {
|
emit.AppCall(bw.BinWriter, cs.Hash, "resolve", callflag.ReadOnly,
|
||||||
|
ctrName+".neofs", int64(nns.TXT))
|
||||||
|
|
||||||
|
res, err := c.InvokeScript(bw.Bytes(), nil)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't fetch info from NNS: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
info := contractDumpInfo{name: ctrName}
|
||||||
|
if len(res.Stack) != 0 {
|
||||||
|
if h, err := parseNNSResolveResult(res.Stack[0]); err == nil {
|
||||||
info.hash = h
|
info.hash = h
|
||||||
}
|
}
|
||||||
|
}
|
||||||
infos = append(infos, info)
|
infos = append(infos, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +105,7 @@ func dumpContractHashes(cmd *cobra.Command, _ []string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err = c.InvokeScript(bw.Bytes(), nil)
|
res, err := c.InvokeScript(bw.Bytes(), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("can't fetch info from NNS: %w", err)
|
return fmt.Errorf("can't fetch info from NNS: %w", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue