server

package
v0.0.0-...-9f1ceed Latest Latest
Warning

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

Go to latest
Published: Sep 21, 2016 License: Apache-2.0 Imports: 77 Imported by: 0

Documentation

Overview

Package server implements the Cockroach storage node. A node corresponds to a single instance of the cockroach binary, running on a single physical machine, which exports the "Node" Go RPC service. Each node multiplexes RPC requests to one or more stores, associated with physical storage devices.

Package server also provides access to administrative tools via the command line and also through a REST API.

Index

Constants

View Source
const (

	// FirstNodeID is the node ID of the first node in a new cluster.
	FirstNodeID = 1
)
View Source
const (
	// TestUser is a fixed user used in unittests.
	// It has valid embedded client certs.
	TestUser = "testuser"
)

Variables

View Source
var (

	// GracefulDrainModes is the standard succession of drain modes entered
	// for a graceful shutdown.
	GracefulDrainModes = []serverpb.DrainMode{serverpb.DrainMode_CLIENT, serverpb.DrainMode_LEASES}
)
View Source
var TestServerFactory = testServerFactoryImpl{}

TestServerFactory can be passed to serverutils.InitTestServerFactory

Functions

func ExpectedInitialRangeCount

func ExpectedInitialRangeCount() int

ExpectedInitialRangeCount returns the expected number of ranges that should be on the server after initial (asynchronous) splits have been completed, assuming no additional information is added outside of the normal bootstrap process.

func GetBootstrapSchema

func GetBootstrapSchema() sqlbase.MetadataSchema

GetBootstrapSchema returns the schema which will be used to bootstrap a new server.

func GetTotalMemory

func GetTotalMemory() (int64, error)

GetTotalMemory returns either the total system memory or if possible the cgroups available memory.

func SetOpenFileLimitForOneStore

func SetOpenFileLimitForOneStore() (int, error)

SetOpenFileLimitForOneStore sets the soft limit for open file descriptors when there is only one store.

func WaitForInitialSplits

func WaitForInitialSplits(db *client.DB) error

WaitForInitialSplits waits for the expected number of initial ranges to be populated in the meta2 table. If the expected range count is not reached within a configured timeout, an error is returned.

Types

type Context

type Context struct {
	// Embed the base context.
	*base.Context

	// Unix socket: for postgres only.
	SocketFile string

	// Stores is specified to enable durable key-value storage.
	Stores base.StoreSpecList

	// Attrs specifies a colon-separated list of node topography or machine
	// capabilities, used to match capabilities or location preferences specified
	// in zone configs.
	Attrs string

	// JoinList is a list of node addresses that act as bootstrap hosts for
	// connecting to the gossip network. Each item in the list can actually be
	// multiple comma-separated addresses, kept for backward-compatibility.
	JoinList base.JoinListType

	// CacheSize is the amount of memory in bytes to use for caching data.
	// The value is split evenly between the stores if there are more than one.
	CacheSize int64

	// MemtableBudget is the amount of memory, per store, in bytes to use for
	// the memory table.
	// This value is no longer settable by the end user.
	MemtableBudget int64

	// Engines is the storage instances specified by Stores.
	Engines []engine.Engine

	// NodeAttributes is the parsed representation of Attrs.
	NodeAttributes roachpb.Attributes

	// GossipBootstrapResolvers is a list of gossip resolvers used
	// to find bootstrap nodes for connecting to the gossip network.
	GossipBootstrapResolvers []resolver.Resolver

	// Enables linearizable behaviour of operations on this node by making sure
	// that no commit timestamp is reported back to the client until all other
	// node clocks have necessarily passed it.
	// Environment Variable: COCKROACH_LINEARIZABLE
	Linearizable bool

	// Maximum clock offset for the cluster.
	// Environment Variable: COCKROACH_MAX_OFFSET
	MaxOffset time.Duration

	// RaftTickInterval is the resolution of the Raft timer.
	RaftTickInterval time.Duration

	// MetricsSamplePeriod determines the time between records of
	// server internal metrics.
	// Environment Variable: COCKROACH_METRICS_SAMPLE_INTERVAL
	MetricsSampleInterval time.Duration

	// ScanInterval determines a duration during which each range should be
	// visited approximately once by the range scanner. Set to 0 to disable.
	// Environment Variable: COCKROACH_SCAN_INTERVAL
	ScanInterval time.Duration

	// ScanMaxIdleTime is the maximum time the scanner will be idle between ranges.
	// If enabled (> 0), the scanner may complete in less than ScanInterval for small
	// stores.
	// Environment Variable: COCKROACH_SCAN_MAX_IDLE_TIME
	ScanMaxIdleTime time.Duration

	// ConsistencyCheckInterval determines the time between range consistency checks.
	// Set to 0 to disable.
	// Environment Variable: COCKROACH_CONSISTENCY_CHECK_INTERVAL
	ConsistencyCheckInterval time.Duration

	// ConsistencyCheckPanicOnFailure causes the node to panic when it detects a
	// replication consistency check failure.
	ConsistencyCheckPanicOnFailure bool

	// TimeUntilStoreDead is the time after which if there is no new gossiped
	// information about a store, it is considered dead.
	// Environment Variable: COCKROACH_TIME_UNTIL_STORE_DEAD
	TimeUntilStoreDead time.Duration

	// ReservationsEnabled is a switch used to enable the add replica
	// reservation system.
	ReservationsEnabled bool

	// TestingKnobs is used for internal test controls only.
	TestingKnobs base.TestingKnobs

	// Ctx is the base context.Context for the server. If nil,
	// context.Background() will be used.
	Ctx context.Context

	// Locality is a description of the topography of the server.
	Locality roachpb.Locality

	// EventLogEnabled is a switch which enables recording into cockroach's SQL
	// event log tables. These tables record transactional events about changes
	// to cluster metadata, such as DDL statements and range rebalancing
	// actions.
	EventLogEnabled bool
}

Context holds parameters needed to setup a server.

func MakeContext

func MakeContext() Context

MakeContext returns a Context with default values.

func (*Context) InitNode

func (ctx *Context) InitNode() error

InitNode parses node attributes and initializes the gossip bootstrap resolvers.

func (*Context) InitStores

func (ctx *Context) InitStores(stopper *stop.Stopper) error

InitStores initializes ctx.Engines based on ctx.Stores.

type Node

type Node struct {
	ClusterID  uuid.UUID              // UUID for Cockroach cluster
	Descriptor roachpb.NodeDescriptor // Node ID, network/physical topology
	// contains filtered or unexported fields
}

A Node manages a map of stores (by store ID) for which it serves traffic. A node is the top-level data structure. There is one node instance per process. A node accepts incoming RPCs and services them by directing the commands contained within RPCs to local stores, which in turn direct the commands to specific ranges. Each node has access to the global, monolithic Key-Value abstraction via its kv.DB reference. Nodes use this to allocate node and store IDs for bootstrapping the node itself or new stores as they're added on subsequent instantiations.

func NewNode

func NewNode(
	ctx storage.StoreContext,
	recorder *status.MetricsRecorder,
	reg *metric.Registry,
	stopper *stop.Stopper,
	txnMetrics kv.TxnMetrics,
	eventLogger sql.EventLogger,
) *Node

NewNode returns a new instance of Node.

func (*Node) Batch

func (n *Node) Batch(
	ctx context.Context, args *roachpb.BatchRequest,
) (br *roachpb.BatchResponse, err error)

Batch implements the roachpb.InternalServer interface.

func (*Node) Ctx

func (n *Node) Ctx() context.Context

Ctx returns the base context for the node.

func (*Node) IsDraining

func (n *Node) IsDraining() bool

IsDraining returns true if at least one Store housed on this Node is not currently allowing range leases to be procured or extended.

func (*Node) SetDraining

func (n *Node) SetDraining(drain bool) error

SetDraining called with 'true' waits until all Replicas' range leases have expired or a reasonable amount of time has passed (in which case an error is returned but draining mode is still active). When called with 'false', returns to the normal mode of allowing lease holder lease acquisition and extensions.

func (*Node) String

func (n *Node) String() string

String implements fmt.Stringer.

type Server

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

Server is the cockroach server node.

func NewServer

func NewServer(srvCtx Context, stopper *stop.Stopper) (*Server, error)

NewServer creates a Server from a server.Context.

func (*Server) ClusterID

func (s *Server) ClusterID() uuid.UUID

ClusterID returns the ID of the cluster this server is a part of.

func (*Server) Ctx

func (s *Server) Ctx() context.Context

Ctx returns the base context for the server.

func (*Server) Drain

func (s *Server) Drain(on []serverpb.DrainMode) ([]serverpb.DrainMode, error)

Drain idempotently activates the given DrainModes on the Server in the order in which they are supplied. For example, Drain is typically called with [CLIENT,LEADERSHIP] before terminating the process for graceful shutdown. On success, returns all active drain modes after carrying out the request. On failure, the system may be in a partially drained state and should be recovered by calling Undrain() with the same (or a larger) slice of modes.

func (*Server) InitialBoot

func (s *Server) InitialBoot() bool

InitialBoot returns whether this is the first time the node has booted. Only intended to help print debugging info during server startup.

func (*Server) NodeID

func (s *Server) NodeID() roachpb.NodeID

NodeID returns the ID of this node within its cluster.

func (*Server) PeriodicallyCheckForUpdates

func (s *Server) PeriodicallyCheckForUpdates()

PeriodicallyCheckForUpdates starts a background worker that periodically phones home to check for updates and report usage.

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP is necessary to implement the http.Handler interface.

func (*Server) Start

func (s *Server) Start(ctx context.Context) error

Start starts the server on the specified port, starts gossip and initializes the node using the engines from the server's context.

The passed context can be used to trace the server startup. The context should represent the general startup operation, and is different from contexts used at runtime for server's background work (like `s.Ctx()`).

func (*Server) Stop

func (s *Server) Stop()

Stop stops the server.

func (*Server) Undrain

func (s *Server) Undrain(off []serverpb.DrainMode) []serverpb.DrainMode

Undrain idempotently deactivates the given DrainModes on the Server in the order in which they are supplied. On success, returns any remaining active drain modes.

type TestServer

type TestServer struct {
	// Ctx is the context used by this server.
	Ctx *Context
	// server is the embedded Cockroach server struct.
	*Server
}

A TestServer encapsulates an in-memory instantiation of a cockroach node with a single store. It provides tests with access to Server internals. Where possible, it should be used through the testingshim.TestServerInterface.

Example usage of a TestServer:

s, db, kvDB := serverutils.StartServer(t, base.TestServerArgs{})
defer s.Stopper().Stop()
// If really needed, in tests that can depend on server, downcast to
// server.TestServer:
ts := s.(*server.TestServer)

func (*TestServer) AdminURL

func (ts *TestServer) AdminURL() string

AdminURL implements TestServerInterface.

func (*TestServer) Clock

func (ts *TestServer) Clock() *hlc.Clock

Clock returns the clock used by the TestServer.

func (*TestServer) DB

func (ts *TestServer) DB() *client.DB

DB returns the client.DB instance used by the TestServer.

func (*TestServer) DistSender

func (ts *TestServer) DistSender() *kv.DistSender

DistSender exposes the Server's DistSender.

func (*TestServer) GetFirstStoreID

func (ts *TestServer) GetFirstStoreID() roachpb.StoreID

GetFirstStoreID is a utility function returning the StoreID of the first store on this node.

func (*TestServer) GetHTTPClient

func (ts *TestServer) GetHTTPClient() (http.Client, error)

GetHTTPClient implements TestServerInterface.

func (*TestServer) GetNode

func (ts *TestServer) GetNode() *Node

GetNode exposes the Server's Node.

func (*TestServer) Gossip

func (ts *TestServer) Gossip() *gossip.Gossip

Gossip returns the gossip instance used by the TestServer.

func (*TestServer) KVClient

func (ts *TestServer) KVClient() interface{}

KVClient is part of TestServerInterface.

func (*TestServer) KVDB

func (ts *TestServer) KVDB() interface{}

KVDB is part of TestServerInterface.

func (*TestServer) LeaseManager

func (ts *TestServer) LeaseManager() interface{}

LeaseManager is part of TestServerInterface.

func (*TestServer) MustGetSQLCounter

func (ts *TestServer) MustGetSQLCounter(name string) int64

MustGetSQLCounter implements TestServerInterface.

func (*TestServer) MustGetSQLNetworkCounter

func (ts *TestServer) MustGetSQLNetworkCounter(name string) int64

MustGetSQLNetworkCounter implements TestServerInterface.

func (*TestServer) RPCContext

func (ts *TestServer) RPCContext() *rpc.Context

RPCContext returns the rpc context used by the TestServer.

func (*TestServer) ServingAddr

func (ts *TestServer) ServingAddr() string

ServingAddr returns the server's address. Should be used by clients.

func (*TestServer) ServingHost

func (ts *TestServer) ServingHost() (string, error)

ServingHost returns the host portion of the rpc server's address.

func (*TestServer) ServingPort

func (ts *TestServer) ServingPort() (string, error)

ServingPort returns the port portion of the rpc server's address.

func (*TestServer) Start

func (ts *TestServer) Start(params base.TestServerArgs) error

Start starts the TestServer by bootstrapping an in-memory store (defaults to maximum of 100M). The server is started, launching the node RPC server and all HTTP endpoints. Use the value of TestServer.ServingAddr() after Start() for client connections. Use TestServer.Stopper().Stop() to shutdown the server after the test completes.

func (*TestServer) Stopper

func (ts *TestServer) Stopper() *stop.Stopper

Stopper returns the embedded server's Stopper.

func (*TestServer) Stores

func (ts *TestServer) Stores() *storage.Stores

Stores returns the collection of stores from this TestServer's node.

func (*TestServer) TsDB

func (ts *TestServer) TsDB() *ts.DB

TsDB returns the ts.DB instance used by the TestServer.

func (*TestServer) WaitForInitialSplits

func (ts *TestServer) WaitForInitialSplits() error

WaitForInitialSplits waits for the server to complete its expected initial splits at startup. If the expected range count is not reached within a configured timeout, an error is returned.

func (*TestServer) WriteSummaries

func (ts *TestServer) WriteSummaries() error

WriteSummaries implements TestServerInterface.

Directories

Path Synopsis
Package serverpb is a generated protocol buffer package.
Package serverpb is a generated protocol buffer package.
Package status is a generated protocol buffer package.
Package status is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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