Documentation
¶
Overview ¶
Package http provides the HTTP server for accessing the distributed database. It also provides the endpoint for other nodes to join an existing cluster.
Index ¶
- Constants
- Variables
- func NormalizeAddr(addr string) string
- func ParseRequest(b []byte) ([]*command.Statement, error)
- type Cluster
- type Database
- type Response
- type Service
- func (s *Service) Addr() net.Addr
- func (s *Service) Close()
- func (s *Service) FormRedirect(r *http.Request, url string) string
- func (s *Service) LeaderAPIAddr() string
- func (s *Service) RegisterStatus(key string, stat Statuser) error
- func (s *Service) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (s *Service) Start() error
- type Statuser
- type Store
Constants ¶
const (
// VersionHTTPHeader is the HTTP header key for the version.
VersionHTTPHeader = "X-TQLITE-VERSION"
)
Variables ¶
var ( // ErrNoStatements is returned when a request is empty ErrNoStatements = errors.New("no statements") // ErrInvalidRequest is returned when a request cannot be parsed. ErrInvalidRequest = errors.New("invalid request") // ErrUnsupportedType is returned when a request contains an unsupported type. ErrUnsupportedType = errors.New("unsupported type") )
Functions ¶
func NormalizeAddr ¶
NormalizeAddr ensures that the given URL has a HTTP protocol prefix. If none is supplied, it prefixes the URL with "http://".
Types ¶
type Cluster ¶
type Cluster interface { // GetNodeAPIAddr returns the HTTP API URL for the node at the given Raft address. GetNodeAPIAddr(nodeAddr string) (string, error) // Stats returns stats on the Cluster. Stats() (map[string]interface{}, error) }
Cluster is the interface node API services must provide
type Database ¶
type Database interface { // Execute executes a slice of queries, each of which is not expected // to return rows. If timings is true, then timing information will // be return. If tx is true, then either all queries will be executed // successfully or it will as though none executed. Execute(er *command.ExecuteRequest) ([]*sql.Result, error) // ExecuteOrAbort performs the same function as Execute(), but ensures // any transactions are aborted in case of any error. ExecuteOrAbort(er *command.ExecuteRequest) ([]*sql.Result, error) // Query executes a slice of queries, each of which returns rows. If // timings is true, then timing information will be returned. If tx // is true, then all queries will take place while a read transaction // is held on the database. Query(qr *command.QueryRequest) ([]*sql.Rows, error) }
Database is the interface any queryable system must implement
type Response ¶
type Response struct { Results interface{} `json:"results,omitempty"` Error string `json:"error,omitempty"` Time float64 `json:"time,omitempty"` // contains filtered or unexported fields }
Response represents a response from the HTTP service.
type Service ¶
type Service struct { Expvar bool Pprof bool BuildInfo map[string]interface{} // contains filtered or unexported fields }
Service provides HTTP service.
func (*Service) FormRedirect ¶
FormRedirect returns the value for the "Location" header for a 301 response.
func (*Service) LeaderAPIAddr ¶
LeaderAPIAddr returns the API address of the leader, as known by this node.
func (*Service) RegisterStatus ¶
RegisterStatus allows other modules to register status for serving over HTTP.
type Statuser ¶
type Statuser interface {
Stats() (interface{}, error)
}
Statuser is the interface status providers must implement.
type Store ¶
type Store interface { Database // Join joins the node with the given ID, reachable at addr, to this node. Join(id, addr string, voter bool) error // Remove removes the node, specified by id, from the cluster. Remove(id string) error // LeaderAddr returns the Raft address of the leader of the cluster. LeaderAddr() (string, error) // Stats returns stats on the Store. Stats() (map[string]interface{}, error) // Nodes returns the slice of store.Servers in the cluster Nodes() ([]*store.Server, error) // Backup wites backup of the node state to dst Backup(leader bool, f store.BackupFormat, dst io.Writer) error }
Store is the interface the Raft-based database must implement.