152 lines
5.7 KiB
Go
152 lines
5.7 KiB
Go
package tsm1
|
|
|
|
import (
|
|
"runtime"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/toml"
|
|
)
|
|
|
|
var DefaultMaxConcurrentOpens = runtime.GOMAXPROCS(0)
|
|
|
|
const (
|
|
DefaultMADVWillNeed = false
|
|
|
|
// DefaultLargeSeriesWriteThreshold is the number of series per write
|
|
// that requires the series index be pregrown before insert.
|
|
DefaultLargeSeriesWriteThreshold = 10000
|
|
)
|
|
|
|
// Config contains all of the configuration necessary to run a tsm1 engine.
|
|
type Config struct {
|
|
// MacConcurrentOpens controls the concurrency of opening tsm files during
|
|
// engine opening.
|
|
MaxConcurrentOpens int `toml:"max-concurrent-opens"`
|
|
|
|
// MADVWillNeed controls whether we hint to the kernel that we intend to page
|
|
// in mmap'd sections of TSM files. This setting defaults to off, as it has
|
|
// been found to be problematic in some cases. It may help users who have
|
|
// slow disks.
|
|
MADVWillNeed bool `toml:"use-madv-willneed"`
|
|
|
|
// LargeSeriesWriteThreshold is the threshold before a write requires
|
|
// preallocation to improve throughput. Currently used in the series file.
|
|
LargeSeriesWriteThreshold int `toml:"large-series-write-threshold"`
|
|
|
|
Compaction CompactionConfig `toml:"compaction"`
|
|
Cache CacheConfig `toml:"cache"`
|
|
}
|
|
|
|
// NewConfig constructs a Config with the default values.
|
|
func NewConfig() Config {
|
|
return Config{
|
|
MaxConcurrentOpens: DefaultMaxConcurrentOpens,
|
|
MADVWillNeed: DefaultMADVWillNeed,
|
|
LargeSeriesWriteThreshold: DefaultLargeSeriesWriteThreshold,
|
|
|
|
Cache: NewCacheConfig(),
|
|
Compaction: CompactionConfig{
|
|
FullWriteColdDuration: toml.Duration(DefaultCompactFullWriteColdDuration),
|
|
Throughput: toml.Size(DefaultCompactThroughput),
|
|
ThroughputBurst: toml.Size(DefaultCompactThroughputBurst),
|
|
MaxConcurrent: DefaultCompactMaxConcurrent,
|
|
},
|
|
}
|
|
}
|
|
|
|
const (
|
|
DefaultCompactFullWriteColdDuration = time.Duration(4 * time.Hour)
|
|
DefaultCompactThroughput = 48 * 1024 * 1024
|
|
DefaultCompactThroughputBurst = 48 * 1024 * 1024
|
|
DefaultCompactMaxConcurrent = 0
|
|
)
|
|
|
|
// CompactionConfing holds all of the configuration for compactions. Eventually we want
|
|
// to move this out of tsm1 so that it can be scheduled more intelligently.
|
|
type CompactionConfig struct {
|
|
// FullWriteColdDuration is the duration at which the engine will compact all TSM
|
|
// files in a shard if it hasn't received a write or delete
|
|
FullWriteColdDuration toml.Duration `toml:"full-write-cold-duration"`
|
|
|
|
// Throughput is the rate limit in bytes per second that we will allow TSM compactions
|
|
// to write to disk. Not that short bursts are allowed to happen at a possibly larger
|
|
// value, set by CompactThroughputBurst. A value of 0 here will disable compaction rate
|
|
// limiting
|
|
Throughput toml.Size `toml:"throughput"`
|
|
|
|
// ThroughputBurst is the rate limit in bytes per second that we will allow TSM compactions
|
|
// to write to disk. If this is not set, the burst value will be set to equal the normal
|
|
// throughput
|
|
ThroughputBurst toml.Size `toml:"throughput-burst"`
|
|
|
|
// MaxConcurrent is the maximum number of concurrent full and level compactions that can
|
|
// run at one time. A value of 0 results in 50% of runtime.GOMAXPROCS(0) used at runtime.
|
|
MaxConcurrent int `toml:"max-concurrent"`
|
|
}
|
|
|
|
// Default Cache configuration values.
|
|
const (
|
|
DefaultCacheMaxMemorySize = toml.Size(1024 << 20) // 1GB
|
|
DefaultCacheSnapshotMemorySize = toml.Size(25 << 20) // 25MB
|
|
DefaultCacheSnapshotAgeDuration = toml.Duration(0) // Defaults to off.
|
|
DefaultCacheSnapshotWriteColdDuration = toml.Duration(10 * time.Minute) // Ten minutes
|
|
)
|
|
|
|
// CacheConfig holds all of the configuration for the in memory cache of values that
|
|
// are waiting to be snapshot.
|
|
type CacheConfig struct {
|
|
// MaxMemorySize is the maximum size a shard's cache can reach before it starts
|
|
// rejecting writes.
|
|
MaxMemorySize toml.Size `toml:"max-memory-size"`
|
|
|
|
// SnapshotMemorySize is the size at which the engine will snapshot the cache and
|
|
// write it to a TSM file, freeing up memory
|
|
SnapshotMemorySize toml.Size `toml:"snapshot-memory-size"`
|
|
|
|
// SnapshotAgeDuration, when set, will ensure that the cache is always snapshotted
|
|
// if it's age is greater than this duration, regardless of the cache's size.
|
|
SnapshotAgeDuration toml.Duration `toml:"snapshot-age-duration"`
|
|
|
|
// SnapshotWriteColdDuration is the length of time at which the engine will snapshot
|
|
// the cache and write it to a new TSM file if the shard hasn't received writes or
|
|
// deletes.
|
|
//
|
|
// SnapshotWriteColdDuration should not be larger than SnapshotAgeDuration
|
|
SnapshotWriteColdDuration toml.Duration `toml:"snapshot-write-cold-duration"`
|
|
}
|
|
|
|
// NewCacheConfig initialises a new CacheConfig with default values.
|
|
func NewCacheConfig() CacheConfig {
|
|
return CacheConfig{
|
|
MaxMemorySize: DefaultCacheMaxMemorySize,
|
|
SnapshotMemorySize: DefaultCacheSnapshotMemorySize,
|
|
SnapshotAgeDuration: DefaultCacheSnapshotAgeDuration,
|
|
SnapshotWriteColdDuration: DefaultCacheSnapshotWriteColdDuration,
|
|
}
|
|
}
|
|
|
|
// Default WAL configuration values.
|
|
const (
|
|
DefaultWALEnabled = true
|
|
DefaultWALFsyncDelay = time.Duration(0)
|
|
)
|
|
|
|
// WALConfig holds all of the configuration about the WAL.
|
|
type WALConfig struct {
|
|
// Enabled controls if the WAL is enabled.
|
|
Enabled bool `toml:"enabled"`
|
|
|
|
// WALFsyncDelay is the amount of time that a write will wait before fsyncing. A
|
|
// duration greater than 0 can be used to batch up multiple fsync calls. This is
|
|
// useful for slower disks or when WAL write contention is seen. A value of 0 fsyncs
|
|
// every write to the WAL.
|
|
FsyncDelay toml.Duration `toml:"fsync-delay"`
|
|
}
|
|
|
|
func NewWALConfig() WALConfig {
|
|
return WALConfig{
|
|
Enabled: DefaultWALEnabled,
|
|
FsyncDelay: toml.Duration(DefaultWALFsyncDelay),
|
|
}
|
|
}
|