Ekaterina Lebedeva
8a81af5a3b
All checks were successful
DCO action / DCO (pull_request) Successful in 1m38s
Build / Build Components (1.20) (pull_request) Successful in 4m22s
Build / Build Components (1.21) (pull_request) Successful in 4m25s
Vulncheck / Vulncheck (pull_request) Successful in 4m56s
Tests and linters / Lint (pull_request) Successful in 6m1s
Tests and linters / Tests (1.20) (pull_request) Successful in 7m43s
Tests and linters / Staticcheck (pull_request) Successful in 8m1s
Tests and linters / Tests (1.21) (pull_request) Successful in 8m14s
Tests and linters / Tests with -race (pull_request) Successful in 8m32s
Signed-off-by: Ekaterina Lebedeva <ekaterina.lebedeva@yadro.com>
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package shard
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
|
|
"github.com/mr-tron/base58"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// ID represents Shard identifier.
|
|
//
|
|
// Each shard should have the unique ID within
|
|
// a single instance of local storage.
|
|
type ID []byte
|
|
|
|
// NewIDFromBytes constructs ID from byte slice.
|
|
func NewIDFromBytes(v []byte) *ID {
|
|
return (*ID)(&v)
|
|
}
|
|
|
|
func (id ID) String() string {
|
|
return base58.Encode(id)
|
|
}
|
|
|
|
// ID returns Shard identifier.
|
|
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(ctx context.Context) (err error) {
|
|
if err = s.metaBase.Open(ctx, false); 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)
|
|
|
|
if s.cfg.metricsWriter != nil {
|
|
s.cfg.metricsWriter.SetShardID(s.info.ID.String())
|
|
}
|
|
}
|
|
|
|
s.log = &logger.Logger{Logger: s.log.With(zap.Stringer("shard_id", s.info.ID))}
|
|
s.metaBase.SetLogger(s.log)
|
|
s.blobStor.SetLogger(s.log)
|
|
if s.hasWriteCache() {
|
|
s.writeCache.SetLogger(s.log)
|
|
}
|
|
s.metaBase.SetParentID(s.info.ID.String())
|
|
s.blobStor.SetParentID(s.info.ID.String())
|
|
if s.pilorama != nil {
|
|
s.pilorama.SetParentID(s.info.ID.String())
|
|
}
|
|
|
|
if len(id) != 0 {
|
|
return nil
|
|
}
|
|
return s.metaBase.WriteShardID(*s.info.ID)
|
|
}
|