feat(dataobj): add support for loading config via flags (#15791)

pull/15789/head^2
Cyril Tovena 4 months ago committed by GitHub
parent 7be37ad8f2
commit a9c0015f3c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 21
      pkg/dataobj/dataobj.go

@ -7,6 +7,7 @@ import (
"crypto/sha256"
"encoding/hex"
"errors"
"flag"
"fmt"
"github.com/grafana/dskit/flagext"
@ -28,11 +29,11 @@ var ErrBufferFull = errors.New("buffer full")
type BuilderConfig struct {
// SHAPrefixSize sets the number of bytes of the SHA filename to use as a
// folder path.
SHAPrefixSize int
SHAPrefixSize int `yaml:"sha_prefix_size"`
// TargetPageSize configures a target size for encoded pages within the data
// object. TargetPageSize accounts for encoding, but not for compression.
TargetPageSize flagext.Bytes
TargetPageSize flagext.Bytes `yaml:"target_page_size"`
// TODO(rfratto): We need an additional parameter for TargetMetadataSize, as
// metadata payloads can't be split and must be downloaded in a single
@ -43,10 +44,20 @@ type BuilderConfig struct {
// combinations), so the option is omitted for now.
// TargetObjectSize configures a target size for data objects.
TargetObjectSize flagext.Bytes
TargetObjectSize flagext.Bytes `yaml:"target_object_size"`
}
func (cfg *BuilderConfig) validate() error {
// RegisterFlagsWithPrefix registers flags with the given prefix.
func (cfg *BuilderConfig) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) {
f.IntVar(&cfg.SHAPrefixSize, prefix+"sha-prefix-size", 2, "The size of the SHA prefix to use for the data object builder.")
_ = cfg.TargetPageSize.Set("2MB")
f.Var(&cfg.TargetPageSize, prefix+"target-page-size", "The size of the target page to use for the data object builder.")
_ = cfg.TargetObjectSize.Set("1GB")
f.Var(&cfg.TargetObjectSize, prefix+"target-object-size", "The size of the target object to use for the data object builder.")
}
// Validate validates the BuilderConfig.
func (cfg *BuilderConfig) Validate() error {
var errs []error
if cfg.SHAPrefixSize <= 0 {
@ -88,7 +99,7 @@ type Builder struct {
//
// NewBuilder returns an error if BuilderConfig is invalid.
func NewBuilder(cfg BuilderConfig, bucket objstore.Bucket, tenantID string) (*Builder, error) {
if err := cfg.validate(); err != nil {
if err := cfg.Validate(); err != nil {
return nil, err
}

Loading…
Cancel
Save