mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-22 19:19:09 +00:00
c79ffa967f
The minimum sufficient configuration is Addresses and ContainerID, example: ``` NeoFSBlockFetcher: Enabled: true Addresses: - st1.storage.fs.neo.org:8080 - st2.storage.fs.neo.org:8080 - st3.storage.fs.neo.org:8080 - st4.storage.fs.neo.org:8080 ContainerID: "87JRc7vyWcjW8uS32LMoLTAj4ckCzFZWfKbacjU3sAob" ``` Close #3718 Signed-off-by: Ekaterina Pavlova <ekt@morphbits.io>
48 lines
1.6 KiB
Go
48 lines
1.6 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
|
|
)
|
|
|
|
// NeoFSBlockFetcher represents the configuration for the NeoFS BlockFetcher service.
|
|
type NeoFSBlockFetcher struct {
|
|
InternalService `yaml:",inline"`
|
|
Timeout time.Duration `yaml:"Timeout"`
|
|
ContainerID string `yaml:"ContainerID"`
|
|
Addresses []string `yaml:"Addresses"`
|
|
OIDBatchSize int `yaml:"OIDBatchSize"`
|
|
BlockAttribute string `yaml:"BlockAttribute"`
|
|
IndexFileAttribute string `yaml:"IndexFileAttribute"`
|
|
DownloaderWorkersCount int `yaml:"DownloaderWorkersCount"`
|
|
BQueueSize int `yaml:"BQueueSize"`
|
|
SkipIndexFilesSearch bool `yaml:"SkipIndexFilesSearch"`
|
|
IndexFileSize uint32 `yaml:"IndexFileSize"`
|
|
}
|
|
|
|
// Validate checks NeoFSBlockFetcher for internal consistency and ensures
|
|
// that all required fields are properly set. It returns an error if the
|
|
// configuration is invalid or if the ContainerID cannot be properly decoded.
|
|
func (cfg *NeoFSBlockFetcher) Validate() error {
|
|
if !cfg.Enabled {
|
|
return nil
|
|
}
|
|
if cfg.ContainerID == "" {
|
|
return errors.New("container ID is not set")
|
|
}
|
|
var containerID cid.ID
|
|
err := containerID.DecodeString(cfg.ContainerID)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid container ID: %w", err)
|
|
}
|
|
if cfg.BQueueSize > 0 && cfg.BQueueSize < cfg.OIDBatchSize {
|
|
return fmt.Errorf("BQueueSize (%d) is lower than OIDBatchSize (%d)", cfg.BQueueSize, cfg.OIDBatchSize)
|
|
}
|
|
if len(cfg.Addresses) == 0 {
|
|
return errors.New("addresses are not set")
|
|
}
|
|
return nil
|
|
}
|