cluster

package
v0.10.1-0...-af01984 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2016 License: MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultWriteTimeout is the default timeout for a complete write to succeed.
	DefaultWriteTimeout = 5 * time.Second

	// DefaultShardWriterTimeout is the default timeout set on shard writers.
	DefaultShardWriterTimeout = 5 * time.Second

	// DefaultShardMapperTimeout is the default timeout set on shard mappers.
	DefaultShardMapperTimeout = 5 * time.Second

	// DefaultMaxRemoteWriteConnections is the maximum number of open connections
	// that will be available for remote writes to another host.
	DefaultMaxRemoteWriteConnections = 3
)
View Source
const MaxMessageSize = 1024 * 1024 * 1024 // 1GB

MaxMessageSize defines how large a message can be before we reject it

View Source
const MuxHeader = 2

MuxHeader is the header byte used in the TCP mux.

Variables

View Source
var (
	// ErrTimeout is returned when a write times out.
	ErrTimeout = errors.New("timeout")

	// ErrPartialWrite is returned when a write partially succeeds but does
	// not meet the requested consistency level.
	ErrPartialWrite = errors.New("partial write")

	// ErrWriteFailed is returned when no writes succeeded.
	ErrWriteFailed = errors.New("write failed")

	// ErrInvalidConsistencyLevel is returned when parsing the string version
	// of a consistency level.
	ErrInvalidConsistencyLevel = errors.New("invalid consistency level")
)

Functions

func DecodeLV

func DecodeLV(r io.Reader, v encoding.BinaryUnmarshaler) error

DecodeLV reads the length-value record from r and unmarshals it into v.

func DecodeTLV

func DecodeTLV(r io.Reader, v encoding.BinaryUnmarshaler) (typ byte, err error)

DecodeTLV reads the type-length-value record from r and unmarshals it into v.

func EncodeLV

func EncodeLV(w io.Writer, v encoding.BinaryMarshaler) error

EncodeLV encodes v to a binary format and writes the length-value record to w.

func EncodeTLV

func EncodeTLV(w io.Writer, typ byte, v encoding.BinaryMarshaler) error

EncodeTLV encodes v to a binary format and writes the record-length-value record to w.

func NewBoundedPool

func NewBoundedPool(initialCap, maxCap int, timeout time.Duration, factory Factory) (pool.Pool, error)

NewBoundedPool returns a new pool based on buffered channels with an initial capacity, maximum capacity and timeout to wait for a connection from the pool. Factory is used when initial capacity is greater than zero to fill the pool. A zero initialCap doesn't fill the Pool until a new Get() is called. During a Get(), If there is no new connection available in the pool and total connections is less than the max, a new connection will be created via the Factory() method. Othewise, the call will block until a connection is available or the timeout is reached.

func ReadLV

func ReadLV(r io.Reader) ([]byte, error)

ReadLV reads the length-value from a TLV record.

func ReadTLV

func ReadTLV(r io.Reader) (byte, []byte, error)

ReadTLV reads a type-length-value record from r.

func ReadType

func ReadType(r io.Reader) (byte, error)

ReadType reads the type from a TLV record.

func WriteLV

func WriteLV(w io.Writer, buf []byte) error

WriteLV writes the length-value in a TLV record to w.

func WriteTLV

func WriteTLV(w io.Writer, typ byte, buf []byte) error

WriteTLV writes a type-length-value record to w.

func WriteType

func WriteType(w io.Writer, typ byte) error

WriteType writes the type in a TLV record to w.

Types

type Balancer

type Balancer interface {
	// Next returns the next Node according to the balancing method
	// or nil if there are no nodes available
	Next() *meta.NodeInfo
}

Balancer represents a load-balancing algorithm for a set of nodes

func NewNodeBalancer

func NewNodeBalancer(nodes []meta.NodeInfo) Balancer

NewNodeBalancer create a shuffled, round-robin balancer so that multiple instances will return nodes in randomized order and each each returned node will be repeated in a cycle

type Config

type Config struct {
	ForceRemoteShardMapping   bool          `toml:"force-remote-mapping"`
	WriteTimeout              toml.Duration `toml:"write-timeout"`
	ShardWriterTimeout        toml.Duration `toml:"shard-writer-timeout"`
	MaxRemoteWriteConnections int           `toml:"max-remote-write-connections"`
	ShardMapperTimeout        toml.Duration `toml:"shard-mapper-timeout"`
}

Config represents the configuration for the clustering service.

func NewConfig

func NewConfig() Config

NewConfig returns an instance of Config with defaults.

type ConsistencyLevel

type ConsistencyLevel int

ConsistencyLevel represent a required replication criteria before a write can be returned as successful

const (
	// ConsistencyLevelAny allows for hinted hand off, potentially no write happened yet
	ConsistencyLevelAny ConsistencyLevel = iota

	// ConsistencyLevelOne requires at least one data node acknowledged a write
	ConsistencyLevelOne

	// ConsistencyLevelQuorum requires a quorum of data nodes to acknowledge a write
	ConsistencyLevelQuorum

	// ConsistencyLevelAll requires all data nodes to acknowledge a write
	ConsistencyLevelAll
)

func ParseConsistencyLevel

func ParseConsistencyLevel(level string) (ConsistencyLevel, error)

ParseConsistencyLevel converts a consistency level string to the corresponding ConsistencyLevel const

type CreateIteratorRequest

type CreateIteratorRequest struct {
	ShardIDs []uint64
	Opt      influxql.IteratorOptions
}

CreateIteratorRequest represents a request to create a remote iterator.

func (*CreateIteratorRequest) MarshalBinary

func (r *CreateIteratorRequest) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*CreateIteratorRequest) UnmarshalBinary

func (r *CreateIteratorRequest) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type CreateIteratorResponse

type CreateIteratorResponse struct {
	Err error
}

CreateIteratorResponse represents a response from remote iterator creation.

func (*CreateIteratorResponse) MarshalBinary

func (r *CreateIteratorResponse) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*CreateIteratorResponse) UnmarshalBinary

func (r *CreateIteratorResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type ExecuteStatementRequest

type ExecuteStatementRequest struct {
	// contains filtered or unexported fields
}

ExecuteStatementRequest represents the a request to execute a statement on a node.

func (*ExecuteStatementRequest) Database

func (r *ExecuteStatementRequest) Database() string

Database returns the database name.

func (*ExecuteStatementRequest) MarshalBinary

func (r *ExecuteStatementRequest) MarshalBinary() ([]byte, error)

MarshalBinary encodes the object to a binary format.

func (*ExecuteStatementRequest) SetDatabase

func (r *ExecuteStatementRequest) SetDatabase(database string)

SetDatabase sets the database name.

func (*ExecuteStatementRequest) SetStatement

func (r *ExecuteStatementRequest) SetStatement(statement string)

SetStatement sets the InfluxQL statement.

func (*ExecuteStatementRequest) Statement

func (r *ExecuteStatementRequest) Statement() string

Statement returns the InfluxQL statement.

func (*ExecuteStatementRequest) UnmarshalBinary

func (r *ExecuteStatementRequest) UnmarshalBinary(buf []byte) error

UnmarshalBinary populates ExecuteStatementRequest from a binary format.

type ExecuteStatementResponse

type ExecuteStatementResponse struct {
	// contains filtered or unexported fields
}

ExecuteStatementResponse represents the response returned from a remote ExecuteStatementRequest call.

func (*ExecuteStatementResponse) Code

func (w *ExecuteStatementResponse) Code() int

Code returns the response code.

func (*ExecuteStatementResponse) MarshalBinary

func (w *ExecuteStatementResponse) MarshalBinary() ([]byte, error)

MarshalBinary encodes the object to a binary format.

func (*ExecuteStatementResponse) Message

func (w *ExecuteStatementResponse) Message() string

Message returns the repsonse message.

func (*ExecuteStatementResponse) SetCode

func (w *ExecuteStatementResponse) SetCode(code int)

SetCode sets the Code

func (*ExecuteStatementResponse) SetMessage

func (w *ExecuteStatementResponse) SetMessage(message string)

SetMessage sets the Message

func (*ExecuteStatementResponse) UnmarshalBinary

func (w *ExecuteStatementResponse) UnmarshalBinary(buf []byte) error

UnmarshalBinary populates ExecuteStatementResponse from a binary format.

type Factory

type Factory func() (net.Conn, error)

Factory is a function to create new connections.

type FieldDimensionsRequest

type FieldDimensionsRequest struct {
	ShardIDs []uint64
	Sources  influxql.Sources
}

FieldDimensionsRequest represents a request to retrieve unique fields & dimensions.

func (*FieldDimensionsRequest) MarshalBinary

func (r *FieldDimensionsRequest) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*FieldDimensionsRequest) UnmarshalBinary

func (r *FieldDimensionsRequest) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type FieldDimensionsResponse

type FieldDimensionsResponse struct {
	Fields     map[string]struct{}
	Dimensions map[string]struct{}
	Err        error
}

FieldDimensionsResponse represents a response from remote iterator creation.

func (*FieldDimensionsResponse) MarshalBinary

func (r *FieldDimensionsResponse) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*FieldDimensionsResponse) UnmarshalBinary

func (r *FieldDimensionsResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type IntoWriteRequest

type IntoWriteRequest struct {
	Database        string
	RetentionPolicy string
	Points          []models.Point
}

IntoWriteRequest is a partial copy of cluster.WriteRequest

type MetaClient

type MetaClient interface {
	CreateContinuousQuery(database, name, query string) error
	CreateDatabase(name string) (*meta.DatabaseInfo, error)
	CreateDatabaseWithRetentionPolicy(name string, rpi *meta.RetentionPolicyInfo) (*meta.DatabaseInfo, error)
	CreateRetentionPolicy(database string, rpi *meta.RetentionPolicyInfo) (*meta.RetentionPolicyInfo, error)
	CreateSubscription(database, rp, name, mode string, destinations []string) error
	CreateUser(name, password string, admin bool) (*meta.UserInfo, error)
	Database(name string) (*meta.DatabaseInfo, error)
	Databases() ([]meta.DatabaseInfo, error)
	DataNode(id uint64) (*meta.NodeInfo, error)
	DataNodes() ([]meta.NodeInfo, error)
	DeleteDataNode(id uint64) error
	DeleteMetaNode(id uint64) error
	DropContinuousQuery(database, name string) error
	DropDatabase(name string) error
	DropRetentionPolicy(database, name string) error
	DropSubscription(database, rp, name string) error
	DropUser(name string) error
	MetaNodes() ([]meta.NodeInfo, error)
	RetentionPolicy(database, name string) (rpi *meta.RetentionPolicyInfo, err error)
	SetAdminPrivilege(username string, admin bool) error
	SetDefaultRetentionPolicy(database, name string) error
	SetPrivilege(username, database string, p influxql.Privilege) error
	ShardsByTimeRange(sources influxql.Sources, tmin, tmax time.Time) (a []meta.ShardInfo, err error)
	UpdateRetentionPolicy(database, name string, rpu *meta.RetentionPolicyUpdate) error
	UpdateUser(name, password string) error
	UserPrivilege(username, database string) (*influxql.Privilege, error)
	UserPrivileges(username string) (map[string]influxql.Privilege, error)
	Users() []meta.UserInfo
}

MetaClient is an interface for accessing meta data.

type MetaExecutor

type MetaExecutor struct {
	Logger *log.Logger
	Node   *influxdb.Node

	MetaClient interface {
		DataNode(id uint64) (ni *meta.NodeInfo, err error)
		DataNodes() ([]meta.NodeInfo, error)
	}
	// contains filtered or unexported fields
}

MetaExecutor executes meta queries on all data nodes.

func NewMetaExecutor

func NewMetaExecutor() *MetaExecutor

NewMetaExecutor returns a new initialized *MetaExecutor.

func (*MetaExecutor) ExecuteStatement

func (m *MetaExecutor) ExecuteStatement(stmt influxql.Statement, database string) error

ExecuteStatement executes a single InfluxQL statement on all nodes in the cluster concurrently.

type NodeDialer

type NodeDialer struct {
	MetaClient MetaClient
	Timeout    time.Duration
}

NodeDialer dials connections to a given node.

func (*NodeDialer) DialNode

func (d *NodeDialer) DialNode(nodeID uint64) (net.Conn, error)

DialNode returns a connection to a node.

type PointsWriter

type PointsWriter struct {
	WriteTimeout time.Duration
	Logger       *log.Logger

	Node *influxdb.Node

	MetaClient interface {
		Database(name string) (di *meta.DatabaseInfo, err error)
		RetentionPolicy(database, policy string) (*meta.RetentionPolicyInfo, error)
		CreateShardGroup(database, policy string, timestamp time.Time) (*meta.ShardGroupInfo, error)
		ShardOwner(shardID uint64) (string, string, *meta.ShardGroupInfo)
	}

	TSDBStore interface {
		CreateShard(database, retentionPolicy string, shardID uint64) error
		WriteToShard(shardID uint64, points []models.Point) error
	}

	ShardWriter interface {
		WriteShard(shardID, ownerID uint64, points []models.Point) error
	}

	HintedHandoff interface {
		WriteShard(shardID, ownerID uint64, points []models.Point) error
	}

	Subscriber interface {
		Points() chan<- *WritePointsRequest
	}
	// contains filtered or unexported fields
}

PointsWriter handles writes across multiple local and remote data nodes.

func NewPointsWriter

func NewPointsWriter() *PointsWriter

NewPointsWriter returns a new instance of PointsWriter for a node.

func (*PointsWriter) Close

func (w *PointsWriter) Close() error

Close closes the communication channel with the point writer

func (*PointsWriter) MapShards

func (w *PointsWriter) MapShards(wp *WritePointsRequest) (*ShardMapping, error)

MapShards maps the points contained in wp to a ShardMapping. If a point maps to a shard group or shard that does not currently exist, it will be created before returning the mapping.

func (*PointsWriter) Open

func (w *PointsWriter) Open() error

Open opens the communication channel with the point writer

func (*PointsWriter) WritePoints

func (w *PointsWriter) WritePoints(p *WritePointsRequest) error

WritePoints writes across multiple local and remote data nodes according the consistency level.

func (*PointsWriter) WritePointsInto

func (w *PointsWriter) WritePointsInto(p *IntoWriteRequest) error

WritePointsInto is a copy of WritePoints that uses a tsdb structure instead of a cluster structure for information. This is to avoid a circular dependency

type QueryExecutor

type QueryExecutor struct {
	// Reference to local node.
	Node *influxdb.Node

	MetaClient MetaClient

	// TSDB storage for local node.
	TSDBStore TSDBStore

	// Holds monitoring data for SHOW STATS and SHOW DIAGNOSTICS.
	Monitor *monitor.Monitor

	// Used for rewriting points back into system for SELECT INTO statements.
	PointsWriter *PointsWriter

	// Used for executing meta statements on all data nodes.
	MetaExecutor *MetaExecutor

	// Remote execution timeout
	Timeout time.Duration

	// Output of all logging.
	// Defaults to discarding all log output.
	LogOutput io.Writer
	// contains filtered or unexported fields
}

A QueryExecutor is responsible for processing a influxql.Query and executing all of the statements within, on nodes in a cluster.

func NewQueryExecutor

func NewQueryExecutor() *QueryExecutor

NewQueryExecutor returns a new instance of QueryExecutor.

func (*QueryExecutor) ExecuteQuery

func (e *QueryExecutor) ExecuteQuery(query *influxql.Query, database string, chunkSize int, closing chan struct{}) <-chan *influxql.Result

ExecuteQuery executes each statement within a query.

type SeriesKeysRequest

type SeriesKeysRequest struct {
	ShardIDs []uint64
	Opt      influxql.IteratorOptions
}

SeriesKeysRequest represents a request to retrieve a list of series keys.

func (*SeriesKeysRequest) MarshalBinary

func (r *SeriesKeysRequest) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*SeriesKeysRequest) UnmarshalBinary

func (r *SeriesKeysRequest) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type SeriesKeysResponse

type SeriesKeysResponse struct {
	SeriesList influxql.SeriesList
	Err        error
}

SeriesKeysResponse represents a response from retrieving series keys.

func (*SeriesKeysResponse) MarshalBinary

func (r *SeriesKeysResponse) MarshalBinary() ([]byte, error)

MarshalBinary encodes r to a binary format.

func (*SeriesKeysResponse) UnmarshalBinary

func (r *SeriesKeysResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary decodes data into r.

type Service

type Service struct {
	Listener net.Listener

	MetaClient interface {
		ShardOwner(shardID uint64) (string, string, *meta.ShardGroupInfo)
	}

	TSDBStore TSDBStore

	Logger *log.Logger
	// contains filtered or unexported fields
}

Service processes data received over raw TCP connections.

func NewService

func NewService(c Config) *Service

NewService returns a new instance of Service.

func (*Service) Close

func (s *Service) Close() error

Close shuts down the listener and waits for all connections to finish.

func (*Service) Open

func (s *Service) Open() error

Open opens the network listener and begins serving requests.

func (*Service) SetLogger

func (s *Service) SetLogger(l *log.Logger)

SetLogger sets the internal logger to the logger passed in.

type ShardMapping

type ShardMapping struct {
	Points map[uint64][]models.Point  // The points associated with a shard ID
	Shards map[uint64]*meta.ShardInfo // The shards that have been mapped, keyed by shard ID
}

ShardMapping contains a mapping of a shards to a points.

func NewShardMapping

func NewShardMapping() *ShardMapping

NewShardMapping creates an empty ShardMapping

func (*ShardMapping) MapPoint

func (s *ShardMapping) MapPoint(shardInfo *meta.ShardInfo, p models.Point)

MapPoint maps a point to shard

type ShardWriter

type ShardWriter struct {
	MetaClient interface {
		DataNode(id uint64) (ni *meta.NodeInfo, err error)
		ShardOwner(shardID uint64) (database, policy string, sgi *meta.ShardGroupInfo)
	}
	// contains filtered or unexported fields
}

ShardWriter writes a set of points to a shard.

func NewShardWriter

func NewShardWriter(timeout time.Duration, maxConnections int) *ShardWriter

NewShardWriter returns a new instance of ShardWriter.

func (*ShardWriter) Close

func (w *ShardWriter) Close() error

Close closes ShardWriter's pool

func (*ShardWriter) WriteShard

func (w *ShardWriter) WriteShard(shardID, ownerID uint64, points []models.Point) error

WriteShard writes time series points to a shard

type TSDBStore

type TSDBStore interface {
	CreateShard(database, policy string, shardID uint64) error
	WriteToShard(shardID uint64, points []models.Point) error

	DeleteDatabase(name string) error
	DeleteMeasurement(database, name string) error
	DeleteRetentionPolicy(database, name string) error
	DeleteSeries(database string, sources []influxql.Source, condition influxql.Expr) error
	ExecuteShowFieldKeysStatement(stmt *influxql.ShowFieldKeysStatement, database string) (models.Rows, error)
	ExecuteShowSeriesStatement(stmt *influxql.ShowSeriesStatement, database string) (models.Rows, error)
	ExecuteShowTagValuesStatement(stmt *influxql.ShowTagValuesStatement, database string) (models.Rows, error)
	ExpandSources(sources influxql.Sources) (influxql.Sources, error)
	ShardIteratorCreator(id uint64) influxql.IteratorCreator
}

TSDBStore is an interface for accessing the time series data store.

type WritePointsRequest

type WritePointsRequest struct {
	Database         string
	RetentionPolicy  string
	ConsistencyLevel ConsistencyLevel
	Points           []models.Point
}

WritePointsRequest represents a request to write point data to the cluster

func (*WritePointsRequest) AddPoint

func (w *WritePointsRequest) AddPoint(name string, value interface{}, timestamp time.Time, tags map[string]string)

AddPoint adds a point to the WritePointRequest with field key 'value'

type WriteShardRequest

type WriteShardRequest struct {
	// contains filtered or unexported fields
}

WriteShardRequest represents the a request to write a slice of points to a shard

func (*WriteShardRequest) AddPoint

func (w *WriteShardRequest) AddPoint(name string, value interface{}, timestamp time.Time, tags map[string]string)

AddPoint adds a new time series point

func (*WriteShardRequest) AddPoints

func (w *WriteShardRequest) AddPoints(points []models.Point)

AddPoints adds a new time series point

func (*WriteShardRequest) Database

func (w *WriteShardRequest) Database() string

func (*WriteShardRequest) MarshalBinary

func (w *WriteShardRequest) MarshalBinary() ([]byte, error)

MarshalBinary encodes the object to a binary format.

func (*WriteShardRequest) Points

func (w *WriteShardRequest) Points() []models.Point

Points returns the time series Points

func (*WriteShardRequest) RetentionPolicy

func (w *WriteShardRequest) RetentionPolicy() string

func (*WriteShardRequest) SetDatabase

func (w *WriteShardRequest) SetDatabase(db string)

func (*WriteShardRequest) SetRetentionPolicy

func (w *WriteShardRequest) SetRetentionPolicy(rp string)

func (*WriteShardRequest) SetShardID

func (w *WriteShardRequest) SetShardID(id uint64)

SetShardID sets the ShardID

func (*WriteShardRequest) ShardID

func (w *WriteShardRequest) ShardID() uint64

ShardID gets the ShardID

func (*WriteShardRequest) UnmarshalBinary

func (w *WriteShardRequest) UnmarshalBinary(buf []byte) error

UnmarshalBinary populates WritePointRequest from a binary format.

type WriteShardResponse

type WriteShardResponse struct {
	// contains filtered or unexported fields
}

WriteShardResponse represents the response returned from a remote WriteShardRequest call

func (*WriteShardResponse) Code

func (w *WriteShardResponse) Code() int

Code returns the Code

func (*WriteShardResponse) MarshalBinary

func (w *WriteShardResponse) MarshalBinary() ([]byte, error)

MarshalBinary encodes the object to a binary format.

func (*WriteShardResponse) Message

func (w *WriteShardResponse) Message() string

Message returns the Message

func (*WriteShardResponse) SetCode

func (w *WriteShardResponse) SetCode(code int)

SetCode sets the Code

func (*WriteShardResponse) SetMessage

func (w *WriteShardResponse) SetMessage(message string)

SetMessage sets the Message

func (*WriteShardResponse) UnmarshalBinary

func (w *WriteShardResponse) UnmarshalBinary(buf []byte) error

UnmarshalBinary populates WritePointRequest from a binary format.

Directories

Path Synopsis
Package internal is a generated protocol buffer package.
Package internal is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL