common/config.go (69 lines of code) (raw):
// Copyright (c) 2017-2018 Uber Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package common
import (
"github.com/m3db/m3/src/cluster/client/etcd"
"net/http"
)
// TimezoneConfig is the static config for timezone column support
type TimezoneConfig struct {
// table to lookup timezone columns
TableName string `yaml:"table_name"`
}
// QueryConfig is the static configuration for query.
type QueryConfig struct {
// how much portion of the device memory we are allowed use
DeviceMemoryUtilization float32 `yaml:"device_memory_utilization"`
// timeout in seconds for choosing device
DeviceChoosingTimeout int `yaml:"device_choosing_timeout"`
TimezoneTable TimezoneConfig `yaml:"timezone_table"`
EnableHashReduction bool `yaml:"enable_hash_reduction"`
}
// DiskStoreConfig is the static configuration for disk store.
type DiskStoreConfig struct {
WriteSync bool `yaml:"write_sync"`
}
// HTTPConfig is the static configuration for main http server (query and schema).
type HTTPConfig struct {
MaxConnections int `yaml:"max_connections"`
MaxIngestionConnections int `yaml:"max_ingestion_connections"`
MaxQueryConnections int `yaml:"max_query_connections"`
ReadTimeOutInSeconds int `yaml:"read_time_out_in_seconds"`
WriteTimeOutInSeconds int `yaml:"write_time_out_in_seconds"`
}
// ControllerConfig is the config for ares-controller client
type ControllerConfig struct {
Address string `yaml:"address"`
Headers http.Header `yaml:"headers"`
TimeoutSec int `yaml:"timeout"`
}
// HeartbeatConfig is the config for timeout and check interval with etcd
type HeartbeatConfig struct {
// heartbeat timeout value
Timeout int `yaml:"timeout"`
// heartbeat interval value
Interval int `yaml:"interval"`
}
// ClusterConfig is the config for starting current instance with cluster mode
type ClusterConfig struct {
// Enable controls whether to start in cluster mode
Enable bool `yaml:"enable"`
// Enable distributed mode
Distributed bool `yaml:"distributed"`
// Namespace is the cluster namespace to join
Namespace string `yaml:"namespace"`
// InstanceID is the cluster wide unique name to identify current instance
// it can be static configured in yaml, or dynamically set on start up
InstanceID string `yaml:"instance_id"`
// controller config
Controller *ControllerConfig `yaml:"controller,omitempty"`
// etcd client required config
Etcd etcd.Configuration `yaml:"etcd"`
// heartbeat config
HeartbeatConfig HeartbeatConfig `yaml:"heartbeat"`
}
// local redolog config
type DiskRedoLogConfig struct {
// disable local disk redolog, default will be enabled
Disabled bool `yaml:"disabled"`
}
// Kafka source config
type KafkaRedoLogConfig struct {
// enable redolog from kafka, default will be disabled
Enabled bool `yaml:"enabled"`
// kafka brokers
Brokers []string `yaml:"brokers"`
// topic name suffix
TopicSuffix string `yaml:"suffix"`
}
// Configs related to data import and redolog option
type RedoLogConfig struct {
// Disk redolog config
DiskConfig DiskRedoLogConfig `yaml:"disk"`
// Kafka redolog config
KafkaConfig KafkaRedoLogConfig `yaml:"kafka"`
// Disk only redolog for unsharded tables
DiskOnlyForUnsharded bool `yaml:"diskOnlyForUnsharded"`
}
// AresServerConfig is config specific for ares server.
type AresServerConfig struct {
// HTTP port for serving.
Port int `yaml:"port"`
// HTTP port for debugging.
DebugPort int `yaml:"debug_port"`
// Directory path that stores the data and schema on local disk.
RootPath string `yaml:"root_path"`
// Total memory size ares can use.
TotalMemorySize int64 `yaml:"total_memory_size"`
// Whether to turn off scheduler.
SchedulerOff bool `yaml:"scheduler_off"`
// Build version of the server currently running
Version string `yaml:"version"`
// environment
Env string `yaml:"env"`
Query QueryConfig `yaml:"query"`
DiskStore DiskStoreConfig `yaml:"disk_store"`
HTTP HTTPConfig `yaml:"http"`
RedoLogConfig RedoLogConfig `yaml:"redolog"`
// Cluster determines the cluster mode configuration of aresdb
Cluster ClusterConfig `yaml:"cluster"`
}