Upgrade versions of vendored libs
This commit is contained in:
210
vendor/github.com/cockroachdb/pebble/options.go
generated
vendored
210
vendor/github.com/cockroachdb/pebble/options.go
generated
vendored
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/cockroachdb/pebble/internal/cache"
|
||||
"github.com/cockroachdb/pebble/internal/humanize"
|
||||
"github.com/cockroachdb/pebble/internal/manifest"
|
||||
"github.com/cockroachdb/pebble/objstorage/shared"
|
||||
"github.com/cockroachdb/pebble/sstable"
|
||||
"github.com/cockroachdb/pebble/vfs"
|
||||
)
|
||||
@@ -61,6 +62,12 @@ type BlockPropertyCollector = sstable.BlockPropertyCollector
|
||||
// BlockPropertyFilter exports the sstable.BlockPropertyFilter type.
|
||||
type BlockPropertyFilter = base.BlockPropertyFilter
|
||||
|
||||
// ShortAttributeExtractor exports the base.ShortAttributeExtractor type.
|
||||
type ShortAttributeExtractor = base.ShortAttributeExtractor
|
||||
|
||||
// UserKeyPrefixBound exports the sstable.UserKeyPrefixBound type.
|
||||
type UserKeyPrefixBound = sstable.UserKeyPrefixBound
|
||||
|
||||
// IterKeyType configures which types of keys an iterator should surface.
|
||||
type IterKeyType int8
|
||||
|
||||
@@ -215,6 +222,16 @@ func (o *IterOptions) getLogger() Logger {
|
||||
return o.logger
|
||||
}
|
||||
|
||||
// scanInternalOptions is similar to IterOptions, meant for use with
|
||||
// scanInternalIterator.
|
||||
type scanInternalOptions struct {
|
||||
IterOptions
|
||||
|
||||
// skipSharedLevels skips levels that are shareable (level >=
|
||||
// sharedLevelStart).
|
||||
skipSharedLevels bool
|
||||
}
|
||||
|
||||
// RangeKeyMasking configures automatic hiding of point keys by range keys. A
|
||||
// non-nil Suffix enables range-key masking. When enabled, range keys with
|
||||
// suffixes ≥ Suffix behave as masks. All point keys that are contained within a
|
||||
@@ -224,7 +241,7 @@ func (o *IterOptions) getLogger() Logger {
|
||||
// Specifically, when configured with a RangeKeyMasking.Suffix _s_, and there
|
||||
// exists a range key with suffix _r_ covering a point key with suffix _p_, and
|
||||
//
|
||||
// _s_ ≤ _r_ < _p_
|
||||
// _s_ ≤ _r_ < _p_
|
||||
//
|
||||
// then the point key is elided.
|
||||
//
|
||||
@@ -387,6 +404,8 @@ func (o *LevelOptions) EnsureDefaults() *LevelOptions {
|
||||
}
|
||||
if o.BlockSize <= 0 {
|
||||
o.BlockSize = base.DefaultBlockSize
|
||||
} else if o.BlockSize > sstable.MaximumBlockSize {
|
||||
panic(errors.Errorf("BlockSize %d exceeds MaximumBlockSize", o.BlockSize))
|
||||
}
|
||||
if o.BlockSizeThreshold <= 0 {
|
||||
o.BlockSizeThreshold = base.DefaultBlockSizeThreshold
|
||||
@@ -445,21 +464,31 @@ type Options struct {
|
||||
// TODO(peter): untested
|
||||
DisableWAL bool
|
||||
|
||||
// ErrorIfExists is whether it is an error if the database already exists.
|
||||
// ErrorIfExists causes an error on Open if the database already exists.
|
||||
// The error can be checked with errors.Is(err, ErrDBAlreadyExists).
|
||||
//
|
||||
// The default value is false.
|
||||
ErrorIfExists bool
|
||||
|
||||
// ErrorIfNotExists is whether it is an error if the database does not
|
||||
// already exist.
|
||||
// ErrorIfNotExists causes an error on Open if the database does not already
|
||||
// exist. The error can be checked with errors.Is(err, ErrDBDoesNotExist).
|
||||
//
|
||||
// The default value is false which will cause a database to be created if it
|
||||
// does not already exist.
|
||||
ErrorIfNotExists bool
|
||||
|
||||
// ErrorIfNotPristine causes an error on Open if the database already exists
|
||||
// and any operations have been performed on the database. The error can be
|
||||
// checked with errors.Is(err, ErrDBNotPristine).
|
||||
//
|
||||
// Note that a database that contained keys that were all subsequently deleted
|
||||
// may or may not trigger the error. Currently, we check if there are any live
|
||||
// SSTs or log records to replay.
|
||||
ErrorIfNotPristine bool
|
||||
|
||||
// EventListener provides hooks to listening to significant DB events such as
|
||||
// flushes, compactions, and table deletion.
|
||||
EventListener EventListener
|
||||
EventListener *EventListener
|
||||
|
||||
// Experimental contains experimental options which are off by default.
|
||||
// These options are temporary and will eventually either be deleted, moved
|
||||
@@ -554,10 +583,10 @@ type Options struct {
|
||||
// desired size of each level of the LSM. Defaults to 10.
|
||||
LevelMultiplier int
|
||||
|
||||
// MultiLevelCompaction allows the compaction of SSTs from more than two
|
||||
// levels iff a conventional two level compaction will quickly trigger a
|
||||
// compaction in the output level.
|
||||
MultiLevelCompaction bool
|
||||
// MultiLevelCompactionHueristic determines whether to add an additional
|
||||
// level to a conventional two level compaction. If nil, a multilevel
|
||||
// compaction will never get triggered.
|
||||
MultiLevelCompactionHueristic MultiLevelHeuristic
|
||||
|
||||
// MaxWriterConcurrency is used to indicate the maximum number of
|
||||
// compression workers the compression queue is allowed to use. If
|
||||
@@ -582,6 +611,49 @@ type Options struct {
|
||||
//
|
||||
// The default value is 1, which results in no scaling of point tombstones.
|
||||
PointTombstoneWeight float64
|
||||
|
||||
// EnableValueBlocks is used to decide whether to enable writing
|
||||
// TableFormatPebblev3 sstables. This setting is only respected by a
|
||||
// specific subset of format major versions: FormatSSTableValueBlocks,
|
||||
// FormatFlushableIngest and FormatPrePebblev1MarkedCompacted. In lower
|
||||
// format major versions, value blocks are never enabled. In higher
|
||||
// format major versions, value blocks are always enabled.
|
||||
EnableValueBlocks func() bool
|
||||
|
||||
// ShortAttributeExtractor is used iff EnableValueBlocks() returns true
|
||||
// (else ignored). If non-nil, a ShortAttribute can be extracted from the
|
||||
// value and stored with the key, when the value is stored elsewhere.
|
||||
ShortAttributeExtractor ShortAttributeExtractor
|
||||
|
||||
// RequiredInPlaceValueBound specifies an optional span of user key
|
||||
// prefixes for which the values must be stored with the key. This is
|
||||
// useful for statically known exclusions to value separation. In
|
||||
// CockroachDB, this will be used for the lock table key space that has
|
||||
// non-empty suffixes, but those locks don't represent actual MVCC
|
||||
// versions (the suffix ordering is arbitrary). We will also need to add
|
||||
// support for dynamically configured exclusions (we want the default to
|
||||
// be to allow Pebble to decide whether to separate the value or not,
|
||||
// hence this is structured as exclusions), for example, for users of
|
||||
// CockroachDB to dynamically exclude certain tables.
|
||||
//
|
||||
// Any change in exclusion behavior takes effect only on future written
|
||||
// sstables, and does not start rewriting existing sstables.
|
||||
RequiredInPlaceValueBound UserKeyPrefixBound
|
||||
|
||||
// DisableIngestAsFlushable disables lazy ingestion of sstables through
|
||||
// a WAL write and memtable rotation. Only effectual if the the format
|
||||
// major version is at least `FormatFlushableIngest`.
|
||||
DisableIngestAsFlushable func() bool
|
||||
|
||||
// SharedStorage is a second FS-like storage medium that can be shared
|
||||
// between multiple Pebble instances. It is used to store sstables only, and
|
||||
// is managed by objstorage.Provider. Each sstable might only be written to
|
||||
// by one Pebble instance, but other Pebble instances can possibly read the
|
||||
// same files if they have the path to get to them. The pebble instance that
|
||||
// wrote a file should not delete it if other Pebble instances are known to
|
||||
// be reading this file. This FS is expected to have slower read/write
|
||||
// performance than the default FS above.
|
||||
SharedStorage shared.Storage
|
||||
}
|
||||
|
||||
// Filters is a map from filter policy name to filter policy. It is used for
|
||||
@@ -635,6 +707,17 @@ type Options struct {
|
||||
// The default value uses the underlying operating system's file system.
|
||||
FS vfs.FS
|
||||
|
||||
// Lock, if set, must be a database lock acquired through LockDirectory for
|
||||
// the same directory passed to Open. If provided, Open will skip locking
|
||||
// the directory. Closing the database will not release the lock, and it's
|
||||
// the responsibility of the caller to release the lock after closing the
|
||||
// database.
|
||||
//
|
||||
// Open will enforce that the Lock passed locks the same directory passed to
|
||||
// Open. Concurrent calls to Open using the same Lock are detected and
|
||||
// prohibited.
|
||||
Lock *Lock
|
||||
|
||||
// The count of L0 files necessary to trigger an L0 compaction.
|
||||
L0CompactionFileThreshold int
|
||||
|
||||
@@ -656,10 +739,15 @@ type Options struct {
|
||||
// options for the last level are used for all subsequent levels.
|
||||
Levels []LevelOptions
|
||||
|
||||
// LoggerAndTracer will be used, if non-nil, else Logger will be used and
|
||||
// tracing will be a noop.
|
||||
|
||||
// Logger used to write log messages.
|
||||
//
|
||||
// The default logger uses the Go standard library log package.
|
||||
Logger Logger
|
||||
// LoggerAndTracer is used for writing log messages and traces.
|
||||
LoggerAndTracer LoggerAndTracer
|
||||
|
||||
// MaxManifestFileSize is the maximum size the MANIFEST file is allowed to
|
||||
// become. When the MANIFEST exceeds this size it is rolled over and a new
|
||||
@@ -783,6 +871,23 @@ type Options struct {
|
||||
// RocksDB 6.2.1.
|
||||
strictWALTail bool
|
||||
|
||||
// disableDeleteOnlyCompactions prevents the scheduling of delete-only
|
||||
// compactions that drop sstables wholy covered by range tombstones or
|
||||
// range key tombstones.
|
||||
disableDeleteOnlyCompactions bool
|
||||
|
||||
// disableElisionOnlyCompactions prevents the scheduling of elision-only
|
||||
// compactions that rewrite sstables in place in order to elide obsolete
|
||||
// keys.
|
||||
disableElisionOnlyCompactions bool
|
||||
|
||||
// disableLazyCombinedIteration is a private option used by the
|
||||
// metamorphic tests to test equivalence between lazy-combined iteration
|
||||
// and constructing the range-key iterator upfront. It's a private
|
||||
// option to avoid littering the public interface with options that we
|
||||
// do not want to allow users to actually configure.
|
||||
disableLazyCombinedIteration bool
|
||||
|
||||
// A private option to disable stats collection.
|
||||
disableTableStats bool
|
||||
|
||||
@@ -795,13 +900,6 @@ type Options struct {
|
||||
// against the FS are made after the DB is closed, the FS may leak a
|
||||
// goroutine indefinitely.
|
||||
fsCloser io.Closer
|
||||
|
||||
// disableLazyCombinedIteration is a private option used by the
|
||||
// metamorphic tests to test equivalence between lazy-combined iteration
|
||||
// and constructing the range-key iterator upfront. It's a private
|
||||
// option to avoid littering the public interface with options that we
|
||||
// do not want to allow users to actually configure.
|
||||
disableLazyCombinedIteration bool
|
||||
}
|
||||
}
|
||||
|
||||
@@ -827,6 +925,9 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
if o.Comparer == nil {
|
||||
o.Comparer = DefaultComparer
|
||||
}
|
||||
if o.Experimental.DisableIngestAsFlushable == nil {
|
||||
o.Experimental.DisableIngestAsFlushable = func() bool { return false }
|
||||
}
|
||||
if o.Experimental.L0CompactionConcurrency <= 0 {
|
||||
o.Experimental.L0CompactionConcurrency = 10
|
||||
}
|
||||
@@ -890,6 +991,9 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
if o.Logger == nil {
|
||||
o.Logger = DefaultLogger
|
||||
}
|
||||
if o.EventListener == nil {
|
||||
o.EventListener = &EventListener{}
|
||||
}
|
||||
o.EventListener.EnsureDefaults(o.Logger)
|
||||
if o.MaxManifestFileSize == 0 {
|
||||
o.MaxManifestFileSize = 128 << 20 // 128 MB
|
||||
@@ -919,13 +1023,7 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
}
|
||||
|
||||
if o.FS == nil {
|
||||
o.FS, o.private.fsCloser = vfs.WithDiskHealthChecks(vfs.Default, 5*time.Second,
|
||||
func(name string, duration time.Duration) {
|
||||
o.EventListener.DiskSlow(DiskSlowInfo{
|
||||
Path: name,
|
||||
Duration: duration,
|
||||
})
|
||||
})
|
||||
o.WithFSDefaults()
|
||||
}
|
||||
if o.FlushSplitBytes <= 0 {
|
||||
o.FlushSplitBytes = 2 * o.Levels[0].TargetFileSize
|
||||
@@ -949,10 +1047,36 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
o.Experimental.PointTombstoneWeight = 1
|
||||
}
|
||||
|
||||
if o.Experimental.MultiLevelCompactionHueristic == nil {
|
||||
o.Experimental.MultiLevelCompactionHueristic = NoMultiLevel{}
|
||||
}
|
||||
|
||||
o.initMaps()
|
||||
return o
|
||||
}
|
||||
|
||||
// WithFSDefaults configures the Options to wrap the configured filesystem with
|
||||
// the default virtual file system middleware, like disk-health checking.
|
||||
func (o *Options) WithFSDefaults() *Options {
|
||||
if o.FS == nil {
|
||||
o.FS = vfs.Default
|
||||
}
|
||||
o.FS, o.private.fsCloser = vfs.WithDiskHealthChecks(o.FS, 5*time.Second,
|
||||
func(info vfs.DiskSlowInfo) {
|
||||
o.EventListener.DiskSlow(info)
|
||||
})
|
||||
return o
|
||||
}
|
||||
|
||||
// AddEventListener adds the provided event listener to the Options, in addition
|
||||
// to any existing event listener.
|
||||
func (o *Options) AddEventListener(l EventListener) {
|
||||
if o.EventListener != nil {
|
||||
l = TeeEventListener(l, *o.EventListener)
|
||||
}
|
||||
o.EventListener = &l
|
||||
}
|
||||
|
||||
func (o *Options) equal() Equal {
|
||||
if o.Comparer.Equal == nil {
|
||||
return bytes.Equal
|
||||
@@ -1023,6 +1147,9 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, " compaction_debt_concurrency=%d\n", o.Experimental.CompactionDebtConcurrency)
|
||||
fmt.Fprintf(&buf, " comparer=%s\n", o.Comparer.Name)
|
||||
fmt.Fprintf(&buf, " disable_wal=%t\n", o.DisableWAL)
|
||||
if o.Experimental.DisableIngestAsFlushable != nil && o.Experimental.DisableIngestAsFlushable() {
|
||||
fmt.Fprintf(&buf, " disable_ingest_as_flushable=%t\n", true)
|
||||
}
|
||||
fmt.Fprintf(&buf, " flush_delay_delete_range=%s\n", o.FlushDelayDeleteRange)
|
||||
fmt.Fprintf(&buf, " flush_delay_range_key=%s\n", o.FlushDelayRangeKey)
|
||||
fmt.Fprintf(&buf, " flush_split_bytes=%d\n", o.FlushSplitBytes)
|
||||
@@ -1064,11 +1191,18 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, " force_writer_parallelism=%t\n", o.Experimental.ForceWriterParallelism)
|
||||
|
||||
// Private options.
|
||||
//
|
||||
// These options are only encoded if true, because we do not want them to
|
||||
// appear in production serialized Options files, since they're testing-only
|
||||
// options. They're only serialized when true, which still ensures that the
|
||||
// metamorphic tests may propagate them to subprocesses.
|
||||
if o.private.disableDeleteOnlyCompactions {
|
||||
fmt.Fprintln(&buf, " disable_delete_only_compactions=true")
|
||||
}
|
||||
if o.private.disableElisionOnlyCompactions {
|
||||
fmt.Fprintln(&buf, " disable_elision_only_compactions=true")
|
||||
}
|
||||
if o.private.disableLazyCombinedIteration {
|
||||
// This option is only encoded if true, because we do not want it to
|
||||
// appear in production serialized Options files, since it's a
|
||||
// testing-only option. It's only serialized when true, which still
|
||||
// ensures that the metamorphic tests may propagate it to subprocesses.
|
||||
fmt.Fprintln(&buf, " disable_lazy_combined_iteration=true")
|
||||
}
|
||||
|
||||
@@ -1078,6 +1212,7 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, "[Level \"%d\"]\n", i)
|
||||
fmt.Fprintf(&buf, " block_restart_interval=%d\n", l.BlockRestartInterval)
|
||||
fmt.Fprintf(&buf, " block_size=%d\n", l.BlockSize)
|
||||
fmt.Fprintf(&buf, " block_size_threshold=%d\n", l.BlockSizeThreshold)
|
||||
fmt.Fprintf(&buf, " compression=%s\n", l.Compression)
|
||||
fmt.Fprintf(&buf, " filter_policy=%s\n", filterPolicyName(l.FilterPolicy))
|
||||
fmt.Fprintf(&buf, " filter_type=%s\n", l.FilterType)
|
||||
@@ -1212,10 +1347,20 @@ func (o *Options) Parse(s string, hooks *ParseHooks) error {
|
||||
// NB: This is a deprecated serialization of the
|
||||
// `flush_delay_delete_range`.
|
||||
o.FlushDelayDeleteRange, err = time.ParseDuration(value)
|
||||
case "disable_wal":
|
||||
o.DisableWAL, err = strconv.ParseBool(value)
|
||||
case "disable_delete_only_compactions":
|
||||
o.private.disableDeleteOnlyCompactions, err = strconv.ParseBool(value)
|
||||
case "disable_elision_only_compactions":
|
||||
o.private.disableElisionOnlyCompactions, err = strconv.ParseBool(value)
|
||||
case "disable_ingest_as_flushable":
|
||||
var v bool
|
||||
v, err = strconv.ParseBool(value)
|
||||
if err == nil {
|
||||
o.Experimental.DisableIngestAsFlushable = func() bool { return v }
|
||||
}
|
||||
case "disable_lazy_combined_iteration":
|
||||
o.private.disableLazyCombinedIteration, err = strconv.ParseBool(value)
|
||||
case "disable_wal":
|
||||
o.DisableWAL, err = strconv.ParseBool(value)
|
||||
case "flush_delay_delete_range":
|
||||
o.FlushDelayDeleteRange, err = time.ParseDuration(value)
|
||||
case "flush_delay_range_key":
|
||||
@@ -1346,6 +1491,8 @@ func (o *Options) Parse(s string, hooks *ParseHooks) error {
|
||||
l.BlockRestartInterval, err = strconv.Atoi(value)
|
||||
case "block_size":
|
||||
l.BlockSize, err = strconv.Atoi(value)
|
||||
case "block_size_threshold":
|
||||
l.BlockSizeThreshold, err = strconv.Atoi(value)
|
||||
case "compression":
|
||||
switch value {
|
||||
case "Default":
|
||||
@@ -1471,6 +1618,7 @@ func (o *Options) MakeReaderOptions() sstable.ReaderOptions {
|
||||
if o.Merger != nil {
|
||||
readerOpts.MergerName = o.Merger.Name
|
||||
}
|
||||
readerOpts.LoggerAndTracer = o.LoggerAndTracer
|
||||
}
|
||||
return readerOpts
|
||||
}
|
||||
@@ -1489,6 +1637,10 @@ func (o *Options) MakeWriterOptions(level int, format sstable.TableFormat) sstab
|
||||
writerOpts.TablePropertyCollectors = o.TablePropertyCollectors
|
||||
writerOpts.BlockPropertyCollectors = o.BlockPropertyCollectors
|
||||
}
|
||||
if format >= sstable.TableFormatPebblev3 {
|
||||
writerOpts.ShortAttributeExtractor = o.Experimental.ShortAttributeExtractor
|
||||
writerOpts.RequiredInPlaceValueBound = o.Experimental.RequiredInPlaceValueBound
|
||||
}
|
||||
levelOpts := o.Level(level)
|
||||
writerOpts.BlockRestartInterval = levelOpts.BlockRestartInterval
|
||||
writerOpts.BlockSize = levelOpts.BlockSize
|
||||
|
||||
Reference in New Issue
Block a user