[#1204] shard: Save ID in the metabase

`AddShard` must return shard id, so we temporarily open metabase
there.

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2022-03-01 11:59:05 +03:00 committed by Alex Vanin
parent 1fe9cd4d36
commit 19ad349b27
6 changed files with 108 additions and 13 deletions

View file

@ -23,3 +23,25 @@ func (id ID) String() string {
func (s *Shard) ID() *ID {
return s.info.ID
}
// UpdateID reads shard ID saved in the metabase and updates it if it is missing.
func (s *Shard) UpdateID() (err error) {
if err = s.metaBase.Open(); err != nil {
return err
}
defer func() {
cErr := s.metaBase.Close()
if err == nil {
err = cErr
}
}()
id, err := s.metaBase.ReadShardID()
if err != nil {
return err
}
if len(id) != 0 {
s.info.ID = NewIDFromBytes(id)
return nil
}
return s.metaBase.WriteShardID(*s.info.ID)
}