indexheader

package
v0.26.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 9, 2022 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// BinaryFormatV1 represents first version of index-header file.
	BinaryFormatV1 = 1

	// MagicIndex are 4 bytes at the head of an index-header file.
	MagicIndex = 0xBAAAD792
)

Variables

View Source
var NotFoundRangeErr = errors.New("range not found")

NotFoundRangeErr is an error returned by PostingsOffset when there is no posting for given name and value pairs.

Functions

func WriteBinary

func WriteBinary(ctx context.Context, bkt objstore.BucketReader, id ulid.ULID, filename string) (err error)

WriteBinary build index-header file from the pieces of index in object storage.

Types

type BinaryReader

type BinaryReader struct {
	// contains filtered or unexported fields
}

func NewBinaryReader

func NewBinaryReader(ctx context.Context, logger log.Logger, bkt objstore.BucketReader, dir string, id ulid.ULID, postingOffsetsInMemSampling int) (*BinaryReader, error)

NewBinaryReader loads or builds new index-header if not present on disk.

func (*BinaryReader) Close

func (r *BinaryReader) Close() error

func (*BinaryReader) IndexVersion

func (r *BinaryReader) IndexVersion() (int, error)

func (*BinaryReader) LabelNames

func (r *BinaryReader) LabelNames() ([]string, error)

func (*BinaryReader) LabelValues

func (r *BinaryReader) LabelValues(name string) ([]string, error)

func (*BinaryReader) LookupSymbol

func (r *BinaryReader) LookupSymbol(o uint32) (string, error)

func (*BinaryReader) PostingsOffset

func (r *BinaryReader) PostingsOffset(name, value string) (index.Range, error)

TODO(bwplotka): Get advantage of multi value offset fetch.

type BinaryTOC

type BinaryTOC struct {
	// Symbols holds start to the same symbols section as index related to this index header.
	Symbols uint64
	// PostingsOffsetTable holds start to the same Postings Offset Table section as index related to this index header.
	PostingsOffsetTable uint64
}

BinaryTOC is a table of content for index-header file.

type FileWriter

type FileWriter struct {
	// contains filtered or unexported fields
}

func NewFileWriter

func NewFileWriter(name string, size int) (*FileWriter, error)

TODO(bwplotka): Added size to method, upstream this.

func (*FileWriter) AddPadding

func (fw *FileWriter) AddPadding(size int) error

AddPadding adds zero byte padding until the file size is a multiple size.

func (*FileWriter) Close

func (fw *FileWriter) Close() error

func (*FileWriter) Flush

func (fw *FileWriter) Flush() error

func (*FileWriter) Pos

func (fw *FileWriter) Pos() uint64

func (*FileWriter) Remove

func (fw *FileWriter) Remove() error

func (*FileWriter) Write

func (fw *FileWriter) Write(bufs ...[]byte) error

func (*FileWriter) WriteAt

func (fw *FileWriter) WriteAt(buf []byte, pos uint64) error

type LazyBinaryReader

type LazyBinaryReader struct {
	// contains filtered or unexported fields
}

LazyBinaryReader wraps BinaryReader and loads (mmap) the index-header only upon the first Reader function is called.

func NewLazyBinaryReader

func NewLazyBinaryReader(
	ctx context.Context,
	logger log.Logger,
	bkt objstore.BucketReader,
	dir string,
	id ulid.ULID,
	postingOffsetsInMemSampling int,
	metrics *LazyBinaryReaderMetrics,
	onClosed func(*LazyBinaryReader),
) (*LazyBinaryReader, error)

NewLazyBinaryReader makes a new LazyBinaryReader. If the index-header does not exist on the local disk at dir location, this function will build it downloading required sections from the full index stored in the bucket. However, this function doesn't load (mmap) the index-header; it will be loaded at first Reader function call.

func (*LazyBinaryReader) Close

func (r *LazyBinaryReader) Close() error

Close implements Reader. It unloads the index-header from memory (releasing the mmap area), but a subsequent call to any other Reader function will automatically reload it.

func (*LazyBinaryReader) IndexVersion

func (r *LazyBinaryReader) IndexVersion() (int, error)

IndexVersion implements Reader.

func (*LazyBinaryReader) LabelNames

func (r *LazyBinaryReader) LabelNames() ([]string, error)

LabelNames implements Reader.

func (*LazyBinaryReader) LabelValues

func (r *LazyBinaryReader) LabelValues(name string) ([]string, error)

LabelValues implements Reader.

func (*LazyBinaryReader) LookupSymbol

func (r *LazyBinaryReader) LookupSymbol(o uint32) (string, error)

LookupSymbol implements Reader.

func (*LazyBinaryReader) PostingsOffset

func (r *LazyBinaryReader) PostingsOffset(name, value string) (index.Range, error)

PostingsOffset implements Reader.

type LazyBinaryReaderMetrics

type LazyBinaryReaderMetrics struct {
	// contains filtered or unexported fields
}

LazyBinaryReaderMetrics holds metrics tracked by LazyBinaryReader.

func NewLazyBinaryReaderMetrics

func NewLazyBinaryReaderMetrics(reg prometheus.Registerer) *LazyBinaryReaderMetrics

NewLazyBinaryReaderMetrics makes new LazyBinaryReaderMetrics.

type Reader

type Reader interface {
	io.Closer

	// IndexVersion returns version of index.
	IndexVersion() (int, error)

	// PostingsOffset returns start and end offsets of postings for given name and value.
	// The end offset might be bigger than the actual posting ending, but not larger than the whole index file.
	// NotFoundRangeErr is returned when no index can be found for given name and value.
	// TODO(bwplotka): Move to PostingsOffsets(name string, value ...string) []index.Range and benchmark.
	PostingsOffset(name string, value string) (index.Range, error)

	// LookupSymbol returns string based on given reference.
	// Error is return if the symbol can't be found.
	LookupSymbol(o uint32) (string, error)

	// LabelValues returns all label values for given label name or error.
	// If no values are found for label name, or label name does not exists,
	// then empty string is returned and no error.
	LabelValues(name string) ([]string, error)

	// LabelNames returns all label names in sorted order.
	LabelNames() ([]string, error)
}

Reader is an interface allowing to read essential, minimal number of index fields from the small portion of index file called header.

type ReaderPool

type ReaderPool struct {
	// contains filtered or unexported fields
}

ReaderPool is used to istantiate new index-header readers and keep track of them. When the lazy reader is enabled, the pool keeps track of all instantiated readers and automatically close them once the idle timeout is reached. A closed lazy reader will be automatically re-opened upon next usage.

func NewReaderPool

func NewReaderPool(logger log.Logger, lazyReaderEnabled bool, lazyReaderIdleTimeout time.Duration, metrics *ReaderPoolMetrics) *ReaderPool

NewReaderPool makes a new ReaderPool.

func (*ReaderPool) Close

func (p *ReaderPool) Close()

Close the pool and stop checking for idle readers. No reader tracked by this pool will be closed. It's the caller responsibility to close readers.

func (*ReaderPool) NewBinaryReader

func (p *ReaderPool) NewBinaryReader(ctx context.Context, logger log.Logger, bkt objstore.BucketReader, dir string, id ulid.ULID, postingOffsetsInMemSampling int) (Reader, error)

NewBinaryReader creates and returns a new binary reader. If the pool has been configured with lazy reader enabled, this function will return a lazy reader. The returned lazy reader is tracked by the pool and automatically closed once the idle timeout expires.

type ReaderPoolMetrics

type ReaderPoolMetrics struct {
	// contains filtered or unexported fields
}

ReaderPoolMetrics holds metrics tracked by ReaderPool.

func NewReaderPoolMetrics

func NewReaderPoolMetrics(reg prometheus.Registerer) *ReaderPoolMetrics

NewReaderPoolMetrics makes new ReaderPoolMetrics.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL