Documentation
¶
Index ¶
- Variables
- func GetReplicator(serverconf conf.Config, flags *flag.FlagSet) (srv.Daemon, srv.LowLevelLogger, error)
- func GetServer(serverconf conf.Config, flags *flag.FlagSet) (bindIP string, bindPort int, serv srv.Server, logger srv.LowLevelLogger, ...)
- type Account
- type AccountEngine
- type AccountInfo
- type AccountServer
- func (server *AccountServer) AccountDeleteHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) AccountGetHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) AccountPostHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) AccountPutHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) AccountReplicateHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) AcquireDevice(next http.Handler) http.Handler
- func (server *AccountServer) ContainerPutHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) DiskUsageHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) Finalize()
- func (server *AccountServer) GetHandler(config conf.Config) http.Handler
- func (server *AccountServer) HealthcheckHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) LogRequest(next http.Handler) http.Handler
- func (server *AccountServer) ReconHandler(writer http.ResponseWriter, request *http.Request)
- func (server *AccountServer) TmpUploadHandler(writer http.ResponseWriter, request *http.Request)
- type ContainerListingRecord
- type ContainerRecord
- type PolicyStat
- type ReplicableAccount
- type Replicator
- type SubdirListingRecord
- type SyncRecord
Constants ¶
This section is empty.
Variables ¶
var ( // ErrorNoSuchAccount is returned when a requested account doesn't exist. ErrorNoSuchAccount = fmt.Errorf("No such account.") // ErrorInvalidMetadata is returned for errors that violate the API metadata constraints. ErrorInvalidMetadata = fmt.Errorf("Invalid metadata value") )
var GetHashPrefixAndSuffix = conf.GetHashPrefixAndSuffix
GetHashPrefixAndSuffix is a pointer to hummingbird's function of the same name, for overriding in tests.
var ( // GetRing is a local pointer to the hummingbird function, for overriding in tests. GetRing = ring.GetRing )
Functions ¶
Types ¶
type Account ¶
type Account interface {
// GetInfo returns the AccountInfo struct for the account.
GetInfo() (*AccountInfo, error)
// PolicyStats returns the metrics for various policies in use by the account.
PolicyStats() ([]*PolicyStat, error)
// IsDeleted returns true if the account has been deleted.
IsDeleted() (bool, error)
// Delete deletes the account.
Delete(timestamp string) error
// ListContainers lists the account's container entries.
ListContainers(limit int, marker string, endMarker string, prefix string, delimiter string, reverse bool) ([]interface{}, error)
// GetMetadata returns the account's current metadata.
GetMetadata() (map[string]string, error)
// UpdateMetadata applies updates to the account's metadata.
UpdateMetadata(updates map[string][]string) error
// PutContainer adds a new container to the account.
PutContainer(name string, putTimestamp string, deleteTimestamp string, objectCount int64, bytesUsed int64, storagePolicyIndex int) error
// ID returns a unique identifier for the account.
ID() string
// Close frees any resources associated with the account.
Close() error
}
Account is the interface implemented by an account
type AccountEngine ¶
type AccountEngine interface {
// Get returns an Account, given a vars mapping.
Get(vars map[string]string) (c Account, err error)
// Return returns a Account to the engine, where it can close or retain them as it sees fit.
Return(c Account)
// Create creates a new account. Returns true if the accoun t was created and a pointer to the account.
Create(vars map[string]string, putTimestamp string, metadata map[string][]string) (bool, Account, error)
// Close releases all cached accounts and any other retained resources.
Close()
// GetByHash returns a replicable database given its hash. This will probably move from this interface once we
// have replicator->replicator communication.
GetByHash(device, hash, partition string) (c ReplicableAccount, err error)
// Invalidate removes an account from the cache entirely. This will probably also move, since it's only used by replication.
Invalidate(c Account)
}
AccountEngine is the interface of an object that creates and returns accounts.
type AccountInfo ¶
type AccountInfo struct {
Account string `json:"account"`
CreatedAt string `json:"created_at"`
PutTimestamp string `json:"put_timestamp"`
DeleteTimestamp string `json:"delete_timestamp"`
StatusChangedAt string `json:"status_changed_at"`
ObjectCount int64 `json:"count"`
BytesUsed int64 `json:"bytes_used"`
ContainerCount int64 `json:"container_count"`
Hash string `json:"hash"`
ID string `json:"id"`
RawMetadata string `json:"metadata"`
Metadata map[string][]string `json:"-"`
MaxRow int64 `json:"max_row"`
// This row isn't populated by GetInfo, it only exists for the times this is
// serialized during replication.
Point int64 `json:"point"`
// contains filtered or unexported fields
}
AccountInfo represents the container_info database record - basic information about the container.
type AccountServer ¶
type AccountServer struct {
// contains filtered or unexported fields
}
AccountServer contains all of the information for a running account server.
func (*AccountServer) AccountDeleteHandler ¶
func (server *AccountServer) AccountDeleteHandler(writer http.ResponseWriter, request *http.Request)
AccountDeleteHandler handles DELETE requests for an account.
func (*AccountServer) AccountGetHandler ¶
func (server *AccountServer) AccountGetHandler(writer http.ResponseWriter, request *http.Request)
AccountGetHandler handles GET and HEAD requests for an account.
func (*AccountServer) AccountPostHandler ¶
func (server *AccountServer) AccountPostHandler(writer http.ResponseWriter, request *http.Request)
AccountPostHandler handles POST requests for an account.
func (*AccountServer) AccountPutHandler ¶
func (server *AccountServer) AccountPutHandler(writer http.ResponseWriter, request *http.Request)
AccountPutHandler handles PUT requests for an account.
func (*AccountServer) AccountReplicateHandler ¶
func (server *AccountServer) AccountReplicateHandler(writer http.ResponseWriter, request *http.Request)
AccountReplicateHandler handles the REPLICATE call for accounts.
func (*AccountServer) AcquireDevice ¶
func (server *AccountServer) AcquireDevice(next http.Handler) http.Handler
AcquireDevice is a middleware that makes sure the device is available - mounted and not beyond its max concurrency.
func (*AccountServer) ContainerPutHandler ¶
func (server *AccountServer) ContainerPutHandler(writer http.ResponseWriter, request *http.Request)
ContainerPutHandler handles the PUT of container records to an account.
func (*AccountServer) DiskUsageHandler ¶
func (server *AccountServer) DiskUsageHandler(writer http.ResponseWriter, request *http.Request)
DiskUsageHandler returns information on the current outstanding HTTP requests per-disk.
func (*AccountServer) Finalize ¶
func (server *AccountServer) Finalize()
func (*AccountServer) GetHandler ¶
func (server *AccountServer) GetHandler(config conf.Config) http.Handler
GetHandler returns the server's http handler - it sets up routes and instantiates middleware.
func (*AccountServer) HealthcheckHandler ¶
func (server *AccountServer) HealthcheckHandler(writer http.ResponseWriter, request *http.Request)
HealthcheckHandler implements a basic health check, that just returns "OK".
func (*AccountServer) LogRequest ¶
func (server *AccountServer) LogRequest(next http.Handler) http.Handler
LogRequest is a middleware that logs requests and also sets up a logger in the request context.
func (*AccountServer) ReconHandler ¶
func (server *AccountServer) ReconHandler(writer http.ResponseWriter, request *http.Request)
ReconHandler delegates incoming /recon calls to the common recon handler.
func (*AccountServer) TmpUploadHandler ¶
func (server *AccountServer) TmpUploadHandler(writer http.ResponseWriter, request *http.Request)
TmpUploadHandler handles uploading account files to the tmp directory for various replication strategies. This replaces the swift replicator's use of rsync.
type ContainerListingRecord ¶
type ContainerListingRecord struct {
XMLName xml.Name `xml:"container" json:"-"`
Name string `xml:"name" json:"name"`
Bytes int64 `xml:"bytes" json:"bytes"`
Count int64 `xml:"count" json:"count"`
LastModified string `xml:"last_modified" json:"last_modified"`
}
ContainerListingRecord is the struct used for serializing objects in json and xml account listings.
type ContainerRecord ¶
type ContainerRecord struct {
Rowid int64 `json:"ROWID"`
Name string `json:"name"`
PutTimestamp string `json:"put_timestamp"`
DeleteTimestamp string `json:"delete_timestamp"`
ObjectCount int64 `json:"object_count"`
BytesUsed int64 `json:"bytes_used"`
Deleted int `json:"deleted"`
StoragePolicyIndex int `json:"storage_policy_index"`
}
ContainerRecord represents the object's data in-databaee, it is used by replication.
type PolicyStat ¶
type ReplicableAccount ¶
type ReplicableAccount interface {
Account
// MergeItems merges object records into the account, with an optional remoteId.
MergeItems(records []*ContainerRecord, remoteID string) error
// ItemsSince returns count object records with a ROWID greater than start.
ItemsSince(start int64, count int) ([]*ContainerRecord, error)
// MergeSyncTable updates the account's incoming sync tables with new data.
MergeSyncTable(records []*SyncRecord) error
// SyncTable returns the account's current sync table.
SyncTable() ([]*SyncRecord, error)
// SyncRemoteData accepts a remote account's current status information and updates local records accordingly.
SyncRemoteData(maxRow int64, hash, id, createdAt, putTimestamp, deleteTimestamp, metadata string) (*AccountInfo, error)
// NewID gives the database a new unique identifier, which is used for incoming_sync entries.
NewID() error
// OpenDatabaseFile returns a consistent reader for the underlying database file.
OpenDatabaseFile() (*os.File, func(), error)
// CleanupTombstones removes any metadata and object tombstones older than reclaimAge seconds.
CleanupTombstones(reclaimAge int64) error
// RingHash returns the account's ring hash.
RingHash() string
}
ReplicableAccount is an account that also implements the replication API.
type Replicator ¶
Replicator is the account replicator daemon object
func (*Replicator) RunForever ¶
func (r *Replicator) RunForever()
RunForever runs the replicator in a forever-loop.
type SubdirListingRecord ¶
type SubdirListingRecord struct {
XMLName xml.Name `xml:"subdir" json:"-"`
Name2 string `xml:"name,attr" json:"-"`
Name string `xml:"name" json:"subdir"`
}
SubdirListingRecord is the struct used for serializing subdirs in json and xml account listings.
type SyncRecord ¶
SyncRecord represents a row in the incoming_sync table. It is used by replication.