Upgrade versions of vendored libs
This commit is contained in:
158
vendor/github.com/cockroachdb/pebble/options.go
generated
vendored
158
vendor/github.com/cockroachdb/pebble/options.go
generated
vendored
@@ -23,7 +23,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
cacheDefaultSize = 8 << 20 // 8 MB
|
||||
cacheDefaultSize = 8 << 20 // 8 MB
|
||||
defaultLevelMultiplier = 10
|
||||
)
|
||||
|
||||
// Compression exports the base.Compression type.
|
||||
@@ -163,11 +164,15 @@ type IterOptions struct {
|
||||
// existing is not low or if we just expect a one-time Seek (where loading the
|
||||
// data block directly is better).
|
||||
UseL6Filters bool
|
||||
|
||||
// Internal options.
|
||||
|
||||
logger Logger
|
||||
// Level corresponding to this file. Only passed in if constructed by a
|
||||
// levelIter.
|
||||
level manifest.Level
|
||||
// disableLazyCombinedIteration is an internal testing option.
|
||||
disableLazyCombinedIteration bool
|
||||
|
||||
// NB: If adding new Options, you must account for them in iterator
|
||||
// construction and Iterator.SetOptions.
|
||||
@@ -212,9 +217,9 @@ func (o *IterOptions) getLogger() Logger {
|
||||
|
||||
// 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
|
||||
// masking range key's bounds and have suffixes less than the range key's suffix
|
||||
// are automatically skipped.
|
||||
// suffixes ≥ Suffix behave as masks. All point keys that are contained within a
|
||||
// masking range key's bounds and have suffixes greater than the range key's
|
||||
// suffix are automatically skipped.
|
||||
//
|
||||
// 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
|
||||
@@ -227,12 +232,58 @@ func (o *IterOptions) getLogger() Logger {
|
||||
// range keys with IterKeyTypePointsAndRanges.
|
||||
type RangeKeyMasking struct {
|
||||
// Suffix configures which range keys may mask point keys. Only range keys
|
||||
// that are defined at suffixes less than or equal to Suffix will mask point
|
||||
// keys.
|
||||
// that are defined at suffixes greater than or equal to Suffix will mask
|
||||
// point keys.
|
||||
Suffix []byte
|
||||
// Filter is an optional field that may be used to improve performance of
|
||||
// range-key masking through a block-property filter defined over key
|
||||
// suffixes. If non-nil, Filter is called by Pebble to construct a
|
||||
// block-property filter mask at iterator creation. The filter is used to
|
||||
// skip whole point-key blocks containing point keys with suffixes greater
|
||||
// than a covering range-key's suffix.
|
||||
//
|
||||
// To use this functionality, the caller must create and configure (through
|
||||
// Options.BlockPropertyCollectors) a block-property collector that records
|
||||
// the maxmimum suffix contained within a block. The caller then must write
|
||||
// and provide a BlockPropertyFilterMask implementation on that same
|
||||
// property. See the BlockPropertyFilterMask type for more information.
|
||||
Filter func() BlockPropertyFilterMask
|
||||
}
|
||||
|
||||
// TODO(jackson): Add fields necessary for constructing and updating block
|
||||
// property collectors.
|
||||
// BlockPropertyFilterMask extends the BlockPropertyFilter interface for use
|
||||
// with range-key masking. Unlike an ordinary block property filter, a
|
||||
// BlockPropertyFilterMask's filtering criteria is allowed to change when Pebble
|
||||
// invokes its SetSuffix method.
|
||||
//
|
||||
// When a Pebble iterator steps into a range key's bounds and the range key has
|
||||
// a suffix greater than or equal to RangeKeyMasking.Suffix, the range key acts
|
||||
// as a mask. The masking range key hides all point keys that fall within the
|
||||
// range key's bounds and have suffixes > the range key's suffix. Without a
|
||||
// filter mask configured, Pebble performs this hiding by stepping through point
|
||||
// keys and comparing suffixes. If large numbers of point keys are masked, this
|
||||
// requires Pebble to load, iterate through and discard a large number of
|
||||
// sstable blocks containing masked point keys.
|
||||
//
|
||||
// If a block-property collector and a filter mask are configured, Pebble may
|
||||
// skip loading some point-key blocks altogether. If a block's keys are known to
|
||||
// all fall within the bounds of the masking range key and the block was
|
||||
// annotated by a block-property collector with the maximal suffix, Pebble can
|
||||
// ask the filter mask to compare the property to the current masking range
|
||||
// key's suffix. If the mask reports no intersection, the block may be skipped.
|
||||
//
|
||||
// If unsuffixed and suffixed keys are written to the database, care must be
|
||||
// taken to avoid unintentionally masking un-suffixed keys located in the same
|
||||
// block as suffixed keys. One solution is to interpret unsuffixed keys as
|
||||
// containing the maximal suffix value, ensuring that blocks containing
|
||||
// unsuffixed keys are always loaded.
|
||||
type BlockPropertyFilterMask interface {
|
||||
BlockPropertyFilter
|
||||
|
||||
// SetSuffix configures the mask with the suffix of a range key. The filter
|
||||
// should return false from Intersects whenever it's provided with a
|
||||
// property encoding a block's minimum suffix that's greater (according to
|
||||
// Compare) than the provided suffix.
|
||||
SetSuffix(suffix []byte) error
|
||||
}
|
||||
|
||||
// WriteOptions hold the optional per-query parameters for Set and Delete
|
||||
@@ -429,12 +480,6 @@ type Options struct {
|
||||
// concurrency slots as determined by the two options is chosen.
|
||||
CompactionDebtConcurrency int
|
||||
|
||||
// DeleteRangeFlushDelay configures how long the database should wait
|
||||
// before forcing a flush of a memtable that contains a range
|
||||
// deletion. Disk space cannot be reclaimed until the range deletion
|
||||
// is flushed. No automatic flush occurs if zero.
|
||||
DeleteRangeFlushDelay time.Duration
|
||||
|
||||
// MinDeletionRate is the minimum number of bytes per second that would
|
||||
// be deleted. Deletion pacing is used to slow down deletions when
|
||||
// compactions finish up or readers close, and newly-obsolete files need
|
||||
@@ -505,6 +550,10 @@ type Options struct {
|
||||
// By default, this value is false.
|
||||
ValidateOnIngest bool
|
||||
|
||||
// LevelMultiplier configures the size multiplier used to determine the
|
||||
// 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.
|
||||
@@ -527,6 +576,12 @@ type Options struct {
|
||||
// ability to optionally schedule additional CPU. See the documentation
|
||||
// for CPUWorkPermissionGranter for more details.
|
||||
CPUWorkPermissionGranter CPUWorkPermissionGranter
|
||||
|
||||
// PointTombstoneWeight is a float in the range [0, +inf) used to weight the
|
||||
// point tombstone heuristics during compaction picking.
|
||||
//
|
||||
// The default value is 1, which results in no scaling of point tombstones.
|
||||
PointTombstoneWeight float64
|
||||
}
|
||||
|
||||
// Filters is a map from filter policy name to filter policy. It is used for
|
||||
@@ -535,6 +590,18 @@ type Options struct {
|
||||
// map during normal usage of a DB.
|
||||
Filters map[string]FilterPolicy
|
||||
|
||||
// FlushDelayDeleteRange configures how long the database should wait before
|
||||
// forcing a flush of a memtable that contains a range deletion. Disk space
|
||||
// cannot be reclaimed until the range deletion is flushed. No automatic
|
||||
// flush occurs if zero.
|
||||
FlushDelayDeleteRange time.Duration
|
||||
|
||||
// FlushDelayRangeKey configures how long the database should wait before
|
||||
// forcing a flush of a memtable that contains a range key. Range keys in
|
||||
// the memtable prevent lazy combined iteration, so it's desirable to flush
|
||||
// range keys promptly. No automatic flush occurs if zero.
|
||||
FlushDelayRangeKey time.Duration
|
||||
|
||||
// FlushSplitBytes denotes the target number of bytes per sublevel in
|
||||
// each flush split interval (i.e. range between two flush split keys)
|
||||
// in L0 sstables. When set to zero, only a single sstable is generated
|
||||
@@ -632,7 +699,8 @@ type Options struct {
|
||||
// - when L0 read-amplification passes the L0CompactionConcurrency threshold
|
||||
// - for automatic background compactions
|
||||
// - when a manual compaction for a level is split and parallelized
|
||||
MaxConcurrentCompactions int
|
||||
// MaxConcurrentCompactions must be greater than 0.
|
||||
MaxConcurrentCompactions func() int
|
||||
|
||||
// DisableAutomaticCompactions dictates whether automatic compactions are
|
||||
// scheduled or not. The default is false (enabled). This option is only used
|
||||
@@ -727,6 +795,13 @@ 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,8 +907,8 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
o.Merger = DefaultMerger
|
||||
}
|
||||
o.private.strictWALTail = true
|
||||
if o.MaxConcurrentCompactions <= 0 {
|
||||
o.MaxConcurrentCompactions = 1
|
||||
if o.MaxConcurrentCompactions == nil {
|
||||
o.MaxConcurrentCompactions = func() int { return 1 }
|
||||
}
|
||||
if o.NumPrevManifest <= 0 {
|
||||
o.NumPrevManifest = 1
|
||||
@@ -855,6 +930,9 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
if o.FlushSplitBytes <= 0 {
|
||||
o.FlushSplitBytes = 2 * o.Levels[0].TargetFileSize
|
||||
}
|
||||
if o.Experimental.LevelMultiplier <= 0 {
|
||||
o.Experimental.LevelMultiplier = defaultLevelMultiplier
|
||||
}
|
||||
if o.Experimental.ReadCompactionRate == 0 {
|
||||
o.Experimental.ReadCompactionRate = 16000
|
||||
}
|
||||
@@ -864,6 +942,12 @@ func (o *Options) EnsureDefaults() *Options {
|
||||
if o.Experimental.TableCacheShards <= 0 {
|
||||
o.Experimental.TableCacheShards = runtime.GOMAXPROCS(0)
|
||||
}
|
||||
if o.Experimental.CPUWorkPermissionGranter == nil {
|
||||
o.Experimental.CPUWorkPermissionGranter = defaultCPUWorkGranter{}
|
||||
}
|
||||
if o.Experimental.PointTombstoneWeight == 0 {
|
||||
o.Experimental.PointTombstoneWeight = 1
|
||||
}
|
||||
|
||||
o.initMaps()
|
||||
return o
|
||||
@@ -938,8 +1022,9 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, " cleaner=%s\n", o.Cleaner)
|
||||
fmt.Fprintf(&buf, " compaction_debt_concurrency=%d\n", o.Experimental.CompactionDebtConcurrency)
|
||||
fmt.Fprintf(&buf, " comparer=%s\n", o.Comparer.Name)
|
||||
fmt.Fprintf(&buf, " delete_range_flush_delay=%s\n", o.Experimental.DeleteRangeFlushDelay)
|
||||
fmt.Fprintf(&buf, " disable_wal=%t\n", o.DisableWAL)
|
||||
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)
|
||||
fmt.Fprintf(&buf, " format_major_version=%d\n", o.FormatMajorVersion)
|
||||
fmt.Fprintf(&buf, " l0_compaction_concurrency=%d\n", o.Experimental.L0CompactionConcurrency)
|
||||
@@ -947,13 +1032,17 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, " l0_compaction_threshold=%d\n", o.L0CompactionThreshold)
|
||||
fmt.Fprintf(&buf, " l0_stop_writes_threshold=%d\n", o.L0StopWritesThreshold)
|
||||
fmt.Fprintf(&buf, " lbase_max_bytes=%d\n", o.LBaseMaxBytes)
|
||||
fmt.Fprintf(&buf, " max_concurrent_compactions=%d\n", o.MaxConcurrentCompactions)
|
||||
if o.Experimental.LevelMultiplier != defaultLevelMultiplier {
|
||||
fmt.Fprintf(&buf, " level_multiplier=%d\n", o.Experimental.LevelMultiplier)
|
||||
}
|
||||
fmt.Fprintf(&buf, " max_concurrent_compactions=%d\n", o.MaxConcurrentCompactions())
|
||||
fmt.Fprintf(&buf, " max_manifest_file_size=%d\n", o.MaxManifestFileSize)
|
||||
fmt.Fprintf(&buf, " max_open_files=%d\n", o.MaxOpenFiles)
|
||||
fmt.Fprintf(&buf, " mem_table_size=%d\n", o.MemTableSize)
|
||||
fmt.Fprintf(&buf, " mem_table_stop_writes_threshold=%d\n", o.MemTableStopWritesThreshold)
|
||||
fmt.Fprintf(&buf, " min_deletion_rate=%d\n", o.Experimental.MinDeletionRate)
|
||||
fmt.Fprintf(&buf, " merger=%s\n", o.Merger.Name)
|
||||
fmt.Fprintf(&buf, " point_tombstone_weight=%f\n", o.Experimental.PointTombstoneWeight)
|
||||
fmt.Fprintf(&buf, " read_compaction_rate=%d\n", o.Experimental.ReadCompactionRate)
|
||||
fmt.Fprintf(&buf, " read_sampling_multiplier=%d\n", o.Experimental.ReadSamplingMultiplier)
|
||||
fmt.Fprintf(&buf, " strict_wal_tail=%t\n", o.private.strictWALTail)
|
||||
@@ -974,6 +1063,15 @@ func (o *Options) String() string {
|
||||
fmt.Fprintf(&buf, " max_writer_concurrency=%d\n", o.Experimental.MaxWriterConcurrency)
|
||||
fmt.Fprintf(&buf, " force_writer_parallelism=%t\n", o.Experimental.ForceWriterParallelism)
|
||||
|
||||
// Private options.
|
||||
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")
|
||||
}
|
||||
|
||||
for i := range o.Levels {
|
||||
l := &o.Levels[i]
|
||||
fmt.Fprintf(&buf, "\n")
|
||||
@@ -1111,9 +1209,17 @@ func (o *Options) Parse(s string, hooks *ParseHooks) error {
|
||||
case "compaction_debt_concurrency":
|
||||
o.Experimental.CompactionDebtConcurrency, err = strconv.Atoi(value)
|
||||
case "delete_range_flush_delay":
|
||||
o.Experimental.DeleteRangeFlushDelay, err = time.ParseDuration(value)
|
||||
// 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_lazy_combined_iteration":
|
||||
o.private.disableLazyCombinedIteration, err = strconv.ParseBool(value)
|
||||
case "flush_delay_delete_range":
|
||||
o.FlushDelayDeleteRange, err = time.ParseDuration(value)
|
||||
case "flush_delay_range_key":
|
||||
o.FlushDelayRangeKey, err = time.ParseDuration(value)
|
||||
case "flush_split_bytes":
|
||||
o.FlushSplitBytes, err = strconv.ParseInt(value, 10, 64)
|
||||
case "format_major_version":
|
||||
@@ -1141,8 +1247,16 @@ func (o *Options) Parse(s string, hooks *ParseHooks) error {
|
||||
// Do nothing; option existed in older versions of pebble.
|
||||
case "lbase_max_bytes":
|
||||
o.LBaseMaxBytes, err = strconv.ParseInt(value, 10, 64)
|
||||
case "level_multiplier":
|
||||
o.Experimental.LevelMultiplier, err = strconv.Atoi(value)
|
||||
case "max_concurrent_compactions":
|
||||
o.MaxConcurrentCompactions, err = strconv.Atoi(value)
|
||||
var concurrentCompactions int
|
||||
concurrentCompactions, err = strconv.Atoi(value)
|
||||
if concurrentCompactions <= 0 {
|
||||
err = errors.New("max_concurrent_compactions cannot be <= 0")
|
||||
} else {
|
||||
o.MaxConcurrentCompactions = func() int { return concurrentCompactions }
|
||||
}
|
||||
case "max_manifest_file_size":
|
||||
o.MaxManifestFileSize, err = strconv.ParseInt(value, 10, 64)
|
||||
case "max_open_files":
|
||||
@@ -1159,6 +1273,8 @@ func (o *Options) Parse(s string, hooks *ParseHooks) error {
|
||||
case "min_flush_rate":
|
||||
// Do nothing; option existed in older versions of pebble, and
|
||||
// may be meaningful again eventually.
|
||||
case "point_tombstone_weight":
|
||||
o.Experimental.PointTombstoneWeight, err = strconv.ParseFloat(value, 64)
|
||||
case "strict_wal_tail":
|
||||
o.private.strictWALTail, err = strconv.ParseBool(value)
|
||||
case "merger":
|
||||
|
||||
Reference in New Issue
Block a user