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
- func ExpectedInitialRangeCount() int
- func GetBootstrapSchema() sql.MetadataSchema
- func PathForNodeStatus(nodeID string) string
- type Context
- type Node
- type Server
- type TestServer
- func (ts *TestServer) Clock() *hlc.Clock
- func (ts *TestServer) DB() *client.DB
- func (ts *TestServer) EventFeed() *util.Feed
- func (ts *TestServer) Gossip() *gossip.Gossip
- func (ts *TestServer) MustGetCounter(name string) int64
- func (ts *TestServer) PGAddr() string
- func (ts *TestServer) PGPort() (string, error)
- func (ts *TestServer) RPCContext() *rpc.Context
- func (ts *TestServer) ServingAddr() string
- func (ts *TestServer) ServingHost() (string, error)
- func (ts *TestServer) ServingPort() (string, error)
- func (ts *TestServer) SetRangeRetryOptions(ro retry.Options)
- func (ts *TestServer) Start() error
- func (ts *TestServer) StartWithStopper(stopper *stop.Stopper) error
- func (ts *TestServer) Stop()
- func (ts *TestServer) Stopper() *stop.Stopper
- func (ts *TestServer) Stores() *storage.Stores
- func (ts *TestServer) TsDB() *ts.DB
- func (ts *TestServer) WaitForInitialSplits() error
- func (ts *TestServer) WriteSummaries() error
Constants ¶
const ( // TestUser is a fixed user used in unittests. // It has valid embedded client certs. TestUser = "testuser" )
Variables ¶
This section is empty.
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() sql.MetadataSchema
GetBootstrapSchema returns the schema which will be used to bootstrap a new server.
func PathForNodeStatus ¶
PathForNodeStatus returns the path needed to issue a GET request for node status. If passed an empty nodeID, this returns the path to GET status for all nodes.
Types ¶
type Context ¶
type Context struct { // Embed the base context. base.Context // Addr is the host:port to bind for HTTP/RPC traffic. Addr string // PGAddr is the host:port to bind for Postgres traffic. PGAddr string // Stores is specified to enable durable key-value storage. // Memory-backed key value stores may be optionally specified // via mem=<integer byte size>. // // Stores specify a comma-separated list of stores specified by a // colon-separated list of device attributes followed by '=' and // either a filepath for a persistent store or an integer size in bytes for an // in-memory store. Device attributes typically include whether the store is // flash (ssd), spinny disk (hdd), fusion-io (fio), in-memory (mem); device // attributes might also include speeds and other specs (7200rpm, 200kiops, etc.). // For example, -store=hdd:7200rpm=/mnt/hda1,ssd=/mnt/ssd01,ssd=/mnt/ssd02,mem=1073741824 Stores string // 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 // Maximum clock offset for the cluster. MaxOffset time.Duration // JoinUsing is a comma-separated list of node addresses that // act as bootstrap hosts for connecting to the gossip network. JoinUsing string // Enables running the node as a single-node in-memory cluster. EphemeralSingleNode bool // 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. Linearizable bool // 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 uint64 // MemtableBudget is the amount of memory in bytes to use for the memory // table. The value is split evenly between the stores if there are more than one. MemtableBudget uint64 // BalanceMode determines how this node makes balancing decisions. BalanceMode storage.BalanceMode // 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 // ScanInterval determines a duration during which each range should be // visited approximately once by the range scanner. 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. ScanMaxIdleTime time.Duration // MetricsFrequency determines the frequency at which the server should // record internal metrics. MetricsFrequency time.Duration // TimeUntilStoreDead is the time after which if there is no new gossiped // information about a store, it is considered dead. TimeUntilStoreDead time.Duration }
Context holds parameters needed to setup a server. Calling "cli".initFlags(ctx *Context) will initialize Context using command flags. Keep in sync with "cli/flags.go".
func NewTestContext ¶
func NewTestContext() *Context
NewTestContext returns a context for testing. It overrides the Certs with the test certs directory. We need to override the certs loader.
func (*Context) InitDefaults ¶
func (ctx *Context) InitDefaults()
InitDefaults sets up the default values for a Context.
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.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the cockroach server node.
func (*Server) ServeHTTP ¶
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP is necessary to implement the http.Handler interface. It will snappy a response if the appropriate request headers are set.
type TestServer ¶
type TestServer struct { // Ctx is the context used by this server. Ctx *Context // server is the embedded Cockroach server struct. *Server StoresPerNode int }
A TestServer encapsulates an in-memory instantiation of a cockroach node with a single store. Example usage of a TestServer follows:
s := server.StartTestServer(t) defer s.Stop()
func StartTestServer ¶
func StartTestServer(t util.Tester) *TestServer
StartTestServer starts a in-memory test server.
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) EventFeed ¶
func (ts *TestServer) EventFeed() *util.Feed
EventFeed returns the event feed that the server uses to publish events.
func (*TestServer) Gossip ¶
func (ts *TestServer) Gossip() *gossip.Gossip
Gossip returns the gossip instance used by the TestServer.
func (*TestServer) MustGetCounter ¶
func (ts *TestServer) MustGetCounter(name string) int64
MustGetCounter returns the value of a counter from the metrics registry. Runs in O(# of metrics) time, which is fine for test code.
func (*TestServer) PGAddr ¶
func (ts *TestServer) PGAddr() string
PGAddr returns the Postgres-protocol endpoint's address.
func (*TestServer) PGPort ¶
func (ts *TestServer) PGPort() (string, error)
PGPort returns the port portion of the Postgres-protocol endpoint's address.
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 rpc 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) SetRangeRetryOptions ¶
func (ts *TestServer) SetRangeRetryOptions(ro retry.Options)
SetRangeRetryOptions sets the retry options for stores in TestServer.
func (*TestServer) Start ¶
func (ts *TestServer) Start() 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 Stop() to shutdown the server after the test completes.
func (*TestServer) StartWithStopper ¶
func (ts *TestServer) StartWithStopper(stopper *stop.Stopper) error
StartWithStopper is the same as Start, but allows passing a stopper explicitly.
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 records summaries of time-series data, which is required for any tests that query server stats.