package tsdb import ( "errors" "fmt" "time" "github.com/influxdata/influxdb/toml" ) const ( // DefaultEngine is the default engine for new shards DefaultEngine = "tsm1" // tsdb/engine/wal configuration options // Default settings for TSM // DefaultCacheMaxMemorySize is the maximum size a shard's cache can // reach before it starts rejecting writes. DefaultCacheMaxMemorySize = 500 * 1024 * 1024 // 500MB // DefaultCacheSnapshotMemorySize is the size at which the engine will // snapshot the cache and write it to a TSM file, freeing up memory DefaultCacheSnapshotMemorySize = 25 * 1024 * 1024 // 25MB // DefaultCacheSnapshotWriteColdDuration 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 DefaultCacheSnapshotWriteColdDuration = time.Duration(time.Hour) // DefaultCompactFullWriteColdDuration is the duration at which the engine // will compact all TSM files in a shard if it hasn't received a write or delete DefaultCompactFullWriteColdDuration = time.Duration(24 * time.Hour) // DefaultMaxPointsPerBlock is the maximum number of points in an encoded // block in a TSM file DefaultMaxPointsPerBlock = 1000 ) // Config holds the configuration for the tsbd package. type Config struct { Dir string `toml:"dir"` Engine string `toml:"engine"` // General WAL configuration options WALDir string `toml:"wal-dir"` WALLoggingEnabled bool `toml:"wal-logging-enabled"` // Query logging QueryLogEnabled bool `toml:"query-log-enabled"` // Compaction options for tsm1 (descriptions above with defaults) CacheMaxMemorySize uint64 `toml:"cache-max-memory-size"` CacheSnapshotMemorySize uint64 `toml:"cache-snapshot-memory-size"` CacheSnapshotWriteColdDuration toml.Duration `toml:"cache-snapshot-write-cold-duration"` CompactFullWriteColdDuration toml.Duration `toml:"compact-full-write-cold-duration"` MaxPointsPerBlock int `toml:"max-points-per-block"` DataLoggingEnabled bool `toml:"data-logging-enabled"` } // NewConfig returns the default configuration for tsdb. func NewConfig() Config { return Config{ Engine: DefaultEngine, WALLoggingEnabled: true, QueryLogEnabled: true, CacheMaxMemorySize: DefaultCacheMaxMemorySize, CacheSnapshotMemorySize: DefaultCacheSnapshotMemorySize, CacheSnapshotWriteColdDuration: toml.Duration(DefaultCacheSnapshotWriteColdDuration), CompactFullWriteColdDuration: toml.Duration(DefaultCompactFullWriteColdDuration), DataLoggingEnabled: true, } } // Validate validates the configuration hold by c. func (c *Config) Validate() error { if c.Dir == "" { return errors.New("Data.Dir must be specified") } else if c.WALDir == "" { return errors.New("Data.WALDir must be specified") } valid := false for _, e := range RegisteredEngines() { if e == c.Engine { valid = true break } } if !valid { return fmt.Errorf("unrecognized engine %s", c.Engine) } return nil }