Documentation ¶
Overview ¶
Package ipfscluster implements a wrapper for the IPFS deamon which allows to orchestrate pinning operations among several IPFS nodes.
IPFS Cluster uses a go-libp2p-raft to keep a shared state between the different cluster peers. It also uses LibP2P to enable communication between its different components, which perform different tasks like managing the underlying IPFS daemons, or providing APIs for external control.
Index ¶
- Constants
- Variables
- func SetFacilityLogLevel(f, l string)
- type API
- type Cluster
- func (c *Cluster) Done() <-chan struct{}
- func (c *Cluster) ID() api.ID
- func (c *Cluster) Join(addr ma.Multiaddr) error
- func (c *Cluster) PeerAdd(addr ma.Multiaddr) (api.ID, error)
- func (c *Cluster) PeerRemove(pid peer.ID) error
- func (c *Cluster) Peers() []api.ID
- func (c *Cluster) Pin(pin api.Pin) error
- func (c *Cluster) Pins() []api.Pin
- func (c *Cluster) Ready() <-chan struct{}
- func (c *Cluster) Recover(h *cid.Cid) (api.GlobalPinInfo, error)
- func (c *Cluster) RecoverLocal(h *cid.Cid) (api.PinInfo, error)
- func (c *Cluster) Shutdown() error
- func (c *Cluster) StateSync() ([]api.PinInfo, error)
- func (c *Cluster) Status(h *cid.Cid) (api.GlobalPinInfo, error)
- func (c *Cluster) StatusAll() ([]api.GlobalPinInfo, error)
- func (c *Cluster) Sync(h *cid.Cid) (api.GlobalPinInfo, error)
- func (c *Cluster) SyncAll() ([]api.GlobalPinInfo, error)
- func (c *Cluster) SyncAllLocal() ([]api.PinInfo, error)
- func (c *Cluster) SyncLocal(h *cid.Cid) (api.PinInfo, error)
- func (c *Cluster) Unpin(h *cid.Cid) error
- func (c *Cluster) Version() string
- type Component
- type Config
- type Consensus
- func (cc *Consensus) Leader() (peer.ID, error)
- func (cc *Consensus) LogAddPeer(addr ma.Multiaddr) error
- func (cc *Consensus) LogPin(c api.Pin) error
- func (cc *Consensus) LogRmPeer(pid peer.ID) error
- func (cc *Consensus) LogUnpin(c api.Pin) error
- func (cc *Consensus) Ready() <-chan struct{}
- func (cc *Consensus) Rollback(state State) error
- func (cc *Consensus) SetClient(c *rpc.Client)
- func (cc *Consensus) Shutdown() error
- func (cc *Consensus) State() (State, error)
- func (cc *Consensus) WaitForSync() error
- type IPFSConnector
- type IPFSHTTPConnector
- func (ipfs *IPFSHTTPConnector) ID() (api.IPFSID, error)
- func (ipfs *IPFSHTTPConnector) Pin(hash *cid.Cid) error
- func (ipfs *IPFSHTTPConnector) PinLs(typeFilter string) (map[string]api.IPFSPinStatus, error)
- func (ipfs *IPFSHTTPConnector) PinLsCid(hash *cid.Cid) (api.IPFSPinStatus, error)
- func (ipfs *IPFSHTTPConnector) SetClient(c *rpc.Client)
- func (ipfs *IPFSHTTPConnector) Shutdown() error
- func (ipfs *IPFSHTTPConnector) Unpin(hash *cid.Cid) error
- type Informer
- type JSONConfig
- type LogOp
- type LogOpType
- type MapPinTracker
- func (mpt *MapPinTracker) Recover(c *cid.Cid) (api.PinInfo, error)
- func (mpt *MapPinTracker) SetClient(c *rpc.Client)
- func (mpt *MapPinTracker) Shutdown() error
- func (mpt *MapPinTracker) Status(c *cid.Cid) api.PinInfo
- func (mpt *MapPinTracker) StatusAll() []api.PinInfo
- func (mpt *MapPinTracker) Sync(c *cid.Cid) (api.PinInfo, error)
- func (mpt *MapPinTracker) SyncAll() ([]api.PinInfo, error)
- func (mpt *MapPinTracker) Track(c api.Pin) error
- func (mpt *MapPinTracker) Untrack(c *cid.Cid) error
- type PeerMonitor
- type Peered
- type PinAllocator
- type PinTracker
- type RESTAPI
- type RPCAPI
- func (rpcapi *RPCAPI) ConsensusLogAddPeer(in api.MultiaddrSerial, out *struct{}) error
- func (rpcapi *RPCAPI) ConsensusLogPin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) ConsensusLogRmPeer(in peer.ID, out *struct{}) error
- func (rpcapi *RPCAPI) ConsensusLogUnpin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) ID(in struct{}, out *api.IDSerial) error
- func (rpcapi *RPCAPI) IPFSPin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) IPFSPinLs(in string, out *map[string]api.IPFSPinStatus) error
- func (rpcapi *RPCAPI) IPFSPinLsCid(in api.PinSerial, out *api.IPFSPinStatus) error
- func (rpcapi *RPCAPI) IPFSUnpin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) Join(in api.MultiaddrSerial, out *struct{}) error
- func (rpcapi *RPCAPI) PeerAdd(in api.MultiaddrSerial, out *api.IDSerial) error
- func (rpcapi *RPCAPI) PeerManagerAddFromMultiaddrs(in api.MultiaddrsSerial, out *struct{}) error
- func (rpcapi *RPCAPI) PeerManagerAddPeer(in api.MultiaddrSerial, out *struct{}) error
- func (rpcapi *RPCAPI) PeerManagerPeers(in struct{}, out *[]peer.ID) error
- func (rpcapi *RPCAPI) PeerManagerRmPeer(in peer.ID, out *struct{}) error
- func (rpcapi *RPCAPI) PeerManagerRmPeerShutdown(in peer.ID, out *struct{}) error
- func (rpcapi *RPCAPI) PeerMonitorLastMetrics(in string, out *[]api.Metric) error
- func (rpcapi *RPCAPI) PeerMonitorLogMetric(in api.Metric, out *struct{}) error
- func (rpcapi *RPCAPI) PeerRemove(in peer.ID, out *struct{}) error
- func (rpcapi *RPCAPI) Peers(in struct{}, out *[]api.IDSerial) error
- func (rpcapi *RPCAPI) Pin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) PinList(in struct{}, out *[]api.PinSerial) error
- func (rpcapi *RPCAPI) Recover(in api.PinSerial, out *api.GlobalPinInfoSerial) error
- func (rpcapi *RPCAPI) RemoteMultiaddrForPeer(in peer.ID, out *api.MultiaddrSerial) error
- func (rpcapi *RPCAPI) StateSync(in struct{}, out *[]api.PinInfoSerial) error
- func (rpcapi *RPCAPI) Status(in api.PinSerial, out *api.GlobalPinInfoSerial) error
- func (rpcapi *RPCAPI) StatusAll(in struct{}, out *[]api.GlobalPinInfoSerial) error
- func (rpcapi *RPCAPI) Sync(in api.PinSerial, out *api.GlobalPinInfoSerial) error
- func (rpcapi *RPCAPI) SyncAll(in struct{}, out *[]api.GlobalPinInfoSerial) error
- func (rpcapi *RPCAPI) SyncAllLocal(in struct{}, out *[]api.PinInfoSerial) error
- func (rpcapi *RPCAPI) SyncLocal(in api.PinSerial, out *api.PinInfoSerial) error
- func (rpcapi *RPCAPI) Track(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) TrackerRecover(in api.PinSerial, out *api.PinInfoSerial) error
- func (rpcapi *RPCAPI) TrackerStatus(in api.PinSerial, out *api.PinInfoSerial) error
- func (rpcapi *RPCAPI) TrackerStatusAll(in struct{}, out *[]api.PinInfoSerial) error
- func (rpcapi *RPCAPI) Unpin(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) Untrack(in api.PinSerial, out *struct{}) error
- func (rpcapi *RPCAPI) Version(in struct{}, out *api.Version) error
- type Raft
- type State
- type StdPeerMonitor
Constants ¶
const ( DefaultConfigCrypto = crypto.RSA DefaultConfigKeyLength = 2048 DefaultAPIAddr = "/ip4/127.0.0.1/tcp/9094" DefaultIPFSProxyAddr = "/ip4/127.0.0.1/tcp/9095" DefaultIPFSNodeAddr = "/ip4/127.0.0.1/tcp/5001" DefaultClusterAddr = "/ip4/0.0.0.0/tcp/9096" DefaultStateSyncSeconds = 60 DefaultMonitoringIntervalSeconds = 15 )
Default parameters for the configuration
const ( LogOpPin = iota + 1 LogOpUnpin LogOpAddPeer LogOpRmPeer )
Type of consensus operation
const Version = "0.0.4"
Version is the current cluster version. Version alignment between components, apis and tools ensures compatibility among them.
Variables ¶
var ( // maximum duration before timing out read of the request IPFSProxyServerReadTimeout = 5 * time.Second // maximum duration before timing out write of the response IPFSProxyServerWriteTimeout = 10 * time.Second // server-side the amount of time a Keep-Alive connection will be // kept idle before being reused IPFSProxyServerIdleTimeout = 60 * time.Second )
IPFS Proxy settings
var ( PinningTimeout = 15 * time.Minute UnpinningTimeout = 10 * time.Second )
A Pin or Unpin operation will be considered failed if the Cid has stayed in Pinning or Unpinning state for longer than these values.
var ( // maximum duration before timing out read of the request RESTAPIServerReadTimeout = 5 * time.Second // maximum duration before timing out write of the response RESTAPIServerWriteTimeout = 10 * time.Second // server-side the amount of time a Keep-Alive connection will be // kept idle before being reused RESTAPIServerIdleTimeout = 60 * time.Second )
Server settings
var AlertChannelCap = 256
AlertChannelCap specifies how much buffer the alerts channel has.
var Commit string
Commit is the current build commit of cluster. See Makefile
var CommitRetries = 2
CommitRetries specifies how many times we retry a failed commit until we give up
var DefaultRaftConfig = hashiraft.DefaultConfig()
DefaultRaftConfig allows to tweak Raft configuration used by Cluster from from the outside.
var LeaderTimeout = 15 * time.Second
LeaderTimeout specifies how long to wait before failing an operation because there is no leader
var PinQueueSize = 1024
PinQueueSize specifies the maximum amount of pin operations waiting to be performed. If the queue is full, pins/unpins will be set to pinError/unpinError.
var RPCProtocol = protocol.ID("/ipfscluster/" + Version + "/rpc")
RPCProtocol is used to send libp2p messages between cluster peers
var RaftMaxSnapshots = 5
RaftMaxSnapshots indicates how many snapshots to keep in the consensus data folder.
var WindowCap = 10
WindowCap specifies how many metrics to keep for given host and metric type
Functions ¶
func SetFacilityLogLevel ¶ added in v0.0.3
func SetFacilityLogLevel(f, l string)
SetFacilityLogLevel sets the log level for a given module
Types ¶
type API ¶
type API interface { Component }
API is a component which offers an API for Cluster. This is a base component.
type Cluster ¶
type Cluster struct {
// contains filtered or unexported fields
}
Cluster is the main IPFS cluster component. It provides the go-API for it and orchestrates the components that make up the system.
func NewCluster ¶
func NewCluster( cfg *Config, api API, ipfs IPFSConnector, state State, tracker PinTracker, monitor PeerMonitor, allocator PinAllocator, informer Informer) (*Cluster, error)
NewCluster builds a new IPFS Cluster peer. It initializes a LibP2P host, creates and RPC Server and client and sets up all components.
The new cluster peer may still be performing initialization tasks when this call returns (consensus may still be bootstrapping). Use Cluster.Ready() if you need to wait until the peer is fully up.
func (*Cluster) Done ¶ added in v0.0.3
func (c *Cluster) Done() <-chan struct{}
Done provides a way to learn if the Peer has been shutdown (for example, because it has been removed from the Cluster)
func (*Cluster) Join ¶ added in v0.0.3
Join adds this peer to an existing cluster. The calling peer should be a single-peer cluster node. This is almost equivalent to calling PeerAdd on the destination cluster.
func (*Cluster) PeerAdd ¶ added in v0.0.3
PeerAdd adds a new peer to this Cluster.
The new peer must be reachable. It will be added to the consensus and will receive the shared state (including the list of peers). The new peer should be a single-peer cluster, preferable without any relevant state.
func (*Cluster) PeerRemove ¶ added in v0.0.3
PeerRemove removes a peer from this Cluster.
The peer will be removed from the consensus peer set, it will be shut down after this happens.
func (*Cluster) Pin ¶
Pin makes the cluster Pin a Cid. This implies adding the Cid to the IPFS Cluster peers shared-state. Depending on the cluster pinning strategy, the PinTracker may then request the IPFS daemon to pin the Cid.
Pin returns an error if the operation could not be persisted to the global state. Pin does not reflect the success or failure of underlying IPFS daemon pinning operations.
func (*Cluster) Pins ¶
Pins returns the list of Cids managed by Cluster and which are part of the current global state. This is the source of truth as to which pins are managed, but does not indicate if the item is successfully pinned.
func (*Cluster) Ready ¶ added in v0.0.3
func (c *Cluster) Ready() <-chan struct{}
Ready returns a channel which signals when this peer is fully initialized (including consensus).
func (*Cluster) Recover ¶ added in v0.0.3
Recover triggers a recover operation for a given Cid in all cluster peers.
func (*Cluster) RecoverLocal ¶ added in v0.0.3
RecoverLocal triggers a recover operation for a given Cid
func (*Cluster) StateSync ¶
StateSync syncs the consensus state to the Pin Tracker, ensuring that every Cid that should be tracked is tracked. It returns PinInfo for Cids which were added or deleted.
func (*Cluster) Status ¶
Status returns the GlobalPinInfo for a given Cid. If an error happens, the GlobalPinInfo should contain as much information as could be fetched.
func (*Cluster) StatusAll ¶ added in v0.0.3
func (c *Cluster) StatusAll() ([]api.GlobalPinInfo, error)
StatusAll returns the GlobalPinInfo for all tracked Cids. If an error happens, the slice will contain as much information as could be fetched.
func (*Cluster) Sync ¶ added in v0.0.3
Sync triggers a LocalSyncCid() operation for a given Cid in all cluster peers.
func (*Cluster) SyncAll ¶ added in v0.0.3
func (c *Cluster) SyncAll() ([]api.GlobalPinInfo, error)
SyncAll triggers LocalSync() operations in all cluster peers.
func (*Cluster) SyncAllLocal ¶ added in v0.0.3
SyncAllLocal makes sure that the current state for all tracked items matches the state reported by the IPFS daemon.
SyncAllLocal returns the list of PinInfo that where updated because of the operation, along with those in error states.
func (*Cluster) SyncLocal ¶ added in v0.0.3
SyncLocal performs a local sync operation for the given Cid. This will tell the tracker to verify the status of the Cid against the IPFS daemon. It returns the updated PinInfo for the Cid.
func (*Cluster) Unpin ¶
Unpin makes the cluster Unpin a Cid. This implies adding the Cid to the IPFS Cluster peers shared-state.
Unpin returns an error if the operation could not be persisted to the global state. Unpin does not reflect the success or failure of underlying IPFS daemon unpinning operations.
type Component ¶
Component represents a piece of ipfscluster. Cluster components usually run their own goroutines (a http server for example). They communicate with the main Cluster component and other components (both local and remote), using an instance of rpc.Client.
type Config ¶
type Config struct { // Libp2p ID and private key for Cluster communication (including) // the Consensus component. ID peer.ID PrivateKey crypto.PrivKey // ClusterPeers is the list of peers in the Cluster. They are used // as the initial peers in the consensus. When bootstrapping a peer, // ClusterPeers will be filled in automatically for the next run upon // shutdown. ClusterPeers []ma.Multiaddr // Bootstrap peers multiaddresses. This peer will attempt to // join the clusters of the peers in this list after booting. // Leave empty for a single-peer-cluster. Bootstrap []ma.Multiaddr // Leave Cluster on shutdown. Politely informs other peers // of the departure and removes itself from the consensus // peer set. The Cluster size will be reduced by one. LeaveOnShutdown bool // Listen parameters for the Cluster libp2p Host. Used by // the RPC and Consensus components. ClusterAddr ma.Multiaddr // Listen parameters for the the Cluster HTTP API component. APIAddr ma.Multiaddr // Listen parameters for the IPFS Proxy. Used by the IPFS // connector component. IPFSProxyAddr ma.Multiaddr // Host/Port for the IPFS daemon. IPFSNodeAddr ma.Multiaddr // Storage folder for snapshots, log store etc. Used by // the Consensus component. ConsensusDataFolder string // Number of seconds between StateSync() operations StateSyncSeconds int // ReplicationFactor is the number of copies we keep for each pin ReplicationFactor int // MonitoringIntervalSeconds is the number of seconds that can // pass before a peer can be detected as down. MonitoringIntervalSeconds int // contains filtered or unexported fields }
Config represents an ipfs-cluster configuration. It is used by Cluster components. An initialized version of it can be obtained with NewDefaultConfig().
func LoadConfig ¶
LoadConfig reads a JSON configuration file from the given path, parses it and returns a new Config object.
func NewDefaultConfig ¶
NewDefaultConfig returns a default configuration object with a randomly generated ID and private key.
func (*Config) Save ¶
Save stores a configuration as a JSON file in the given path. If no path is provided, it uses the path the configuration was loaded from.
func (*Config) ToJSONConfig ¶
func (cfg *Config) ToJSONConfig() (j *JSONConfig, err error)
ToJSONConfig converts a Config object to its JSON representation which is focused on user presentation and easy understanding.
type Consensus ¶
type Consensus struct {
// contains filtered or unexported fields
}
Consensus handles the work of keeping a shared-state between the peers of an IPFS Cluster, as well as modifying that state and applying any updates in a thread-safe manner.
func NewConsensus ¶
func NewConsensus(clusterPeers []peer.ID, host host.Host, dataFolder string, state State) (*Consensus, error)
NewConsensus builds a new ClusterConsensus component. The state is used to initialize the Consensus system, so any information in it is discarded.
func (*Consensus) Leader ¶
Leader returns the peerID of the Leader of the cluster. It returns an error when there is no leader.
func (*Consensus) LogAddPeer ¶ added in v0.0.3
LogAddPeer submits a new peer to the shared state of the cluster. It will forward the operation to the leader if this is not it.
func (*Consensus) LogPin ¶
LogPin submits a Cid to the shared state of the cluster. It will forward the operation to the leader if this is not it.
func (*Consensus) LogRmPeer ¶ added in v0.0.3
LogRmPeer removes a peer from the shared state of the cluster. It will forward the operation to the leader if this is not it.
func (*Consensus) Ready ¶ added in v0.0.3
func (cc *Consensus) Ready() <-chan struct{}
Ready returns a channel which is signaled when the Consensus algorithm has finished bootstrapping and is ready to use
func (*Consensus) Rollback ¶
Rollback replaces the current agreed-upon state with the state provided. Only the consensus leader can perform this operation.
func (*Consensus) Shutdown ¶
Shutdown stops the component so it will not process any more updates. The underlying consensus is permanently shutdown, along with the libp2p transport.
func (*Consensus) State ¶
State retrieves the current consensus State. It may error if no State has been agreed upon or the state is not consistent. The returned State is the last agreed-upon State known by this node.
func (*Consensus) WaitForSync ¶ added in v0.0.3
WaitForSync waits for a leader and for the state to be up to date, then returns.
type IPFSConnector ¶
type IPFSConnector interface { Component ID() (api.IPFSID, error) Pin(*cid.Cid) error Unpin(*cid.Cid) error PinLsCid(*cid.Cid) (api.IPFSPinStatus, error) PinLs(typeFilter string) (map[string]api.IPFSPinStatus, error) }
IPFSConnector is a component which allows cluster to interact with an IPFS daemon. This is a base component.
type IPFSHTTPConnector ¶
type IPFSHTTPConnector struct {
// contains filtered or unexported fields
}
IPFSHTTPConnector implements the IPFSConnector interface and provides a component which does two tasks:
On one side, it proxies HTTP requests to the configured IPFS daemon. It is able to intercept these requests though, and perform extra operations on them.
On the other side, it is used to perform on-demand requests against the configured IPFS daemom (such as a pin request).
func NewIPFSHTTPConnector ¶
func NewIPFSHTTPConnector(cfg *Config) (*IPFSHTTPConnector, error)
NewIPFSHTTPConnector creates the component and leaves it ready to be started
func (*IPFSHTTPConnector) ID ¶ added in v0.0.3
func (ipfs *IPFSHTTPConnector) ID() (api.IPFSID, error)
ID performs an ID request against the configured IPFS daemon. It returns the fetched information. If the request fails, or the parsing fails, it returns an error and an empty IPFSID which also contains the error message.
func (*IPFSHTTPConnector) Pin ¶
func (ipfs *IPFSHTTPConnector) Pin(hash *cid.Cid) error
Pin performs a pin request against the configured IPFS daemon.
func (*IPFSHTTPConnector) PinLs ¶ added in v0.0.3
func (ipfs *IPFSHTTPConnector) PinLs(typeFilter string) (map[string]api.IPFSPinStatus, error)
PinLs performs a "pin ls --type typeFilter" request against the configured IPFS daemon and returns a map of cid strings and their status.
func (*IPFSHTTPConnector) PinLsCid ¶ added in v0.0.3
func (ipfs *IPFSHTTPConnector) PinLsCid(hash *cid.Cid) (api.IPFSPinStatus, error)
PinLsCid performs a "pin ls <hash> "request and returns IPFSPinStatus for that hash.
func (*IPFSHTTPConnector) SetClient ¶
func (ipfs *IPFSHTTPConnector) SetClient(c *rpc.Client)
SetClient makes the component ready to perform RPC requests.
func (*IPFSHTTPConnector) Shutdown ¶
func (ipfs *IPFSHTTPConnector) Shutdown() error
Shutdown stops any listeners and stops the component from taking any requests.
type Informer ¶ added in v0.0.3
Informer provides Metric information from a peer. The metrics produced by informers are then passed to a PinAllocator which will use them to determine where to pin content. The metric is agnostic to the rest of Cluster.
type JSONConfig ¶
type JSONConfig struct { // Libp2p ID and private key for Cluster communication (including) // the Consensus component. ID string `json:"id"` PrivateKey string `json:"private_key"` // ClusterPeers is the list of peers' multiaddresses in the Cluster. // They are used as the initial peers in the consensus. When // bootstrapping a peer, ClusterPeers will be filled in automatically. ClusterPeers []string `json:"cluster_peers"` // Bootstrap peers multiaddresses. This peer will attempt to // join the clusters of the peers in the list. ONLY when ClusterPeers // is empty. Otherwise it is ignored. Leave empty for a single-peer // cluster. Bootstrap []string `json:"bootstrap"` // Leave Cluster on shutdown. Politely informs other peers // of the departure and removes itself from the consensus // peer set. The Cluster size will be reduced by one. LeaveOnShutdown bool `json:"leave_on_shutdown"` // Listen address for the Cluster libp2p host. This is used for // interal RPC and Consensus communications between cluster peers. ClusterListenMultiaddress string `json:"cluster_multiaddress"` // Listen address for the the Cluster HTTP API component. // Tools like ipfs-cluster-ctl will connect to his endpoint to // manage cluster. APIListenMultiaddress string `json:"api_listen_multiaddress"` // Listen address for the IPFS Proxy, which forwards requests to // an IPFS daemon. IPFSProxyListenMultiaddress string `json:"ipfs_proxy_listen_multiaddress"` // API address for the IPFS daemon. IPFSNodeMultiaddress string `json:"ipfs_node_multiaddress"` // Storage folder for snapshots, log store etc. Used by // the Consensus component. ConsensusDataFolder string `json:"consensus_data_folder"` // Number of seconds between syncs of the consensus state to the // tracker state. Normally states are synced anyway, but this helps // when new nodes are joining the cluster StateSyncSeconds int `json:"state_sync_seconds"` // ReplicationFactor indicates the number of nodes that must pin content. // For exampe, a replication_factor of 2 will prompt cluster to choose // two nodes for each pinned hash. A replication_factor -1 will // use every available node for each pin. ReplicationFactor int `json:"replication_factor"` // Number of seconds between monitoring checks which detect // if a peer is down and consenquently trigger a rebalance MonitoringIntervalSeconds int `json:"monitoring_interval_seconds"` }
JSONConfig represents a Cluster configuration as it will look when it is saved using JSON. Most configuration keys are converted into simple types like strings, and key names aim to be self-explanatory for the user.
func (*JSONConfig) ToConfig ¶
func (jcfg *JSONConfig) ToConfig() (c *Config, err error)
ToConfig converts a JSONConfig to its internal Config representation, where options are parsed into their native types.
type LogOp ¶ added in v0.0.3
type LogOp struct { Cid api.PinSerial Peer api.MultiaddrSerial Type LogOpType // contains filtered or unexported fields }
LogOp represents an operation for the OpLogConsensus system. It implements the consensus.Op interface and it is used by the Consensus component.
type LogOpType ¶ added in v0.0.3
type LogOpType int
LogOpType expresses the type of a consensus Operation
type MapPinTracker ¶
type MapPinTracker struct {
// contains filtered or unexported fields
}
MapPinTracker is a PinTracker implementation which uses a Go map to store the status of the tracked Cids. This component is thread-safe.
func NewMapPinTracker ¶
func NewMapPinTracker(cfg *Config) *MapPinTracker
NewMapPinTracker returns a new object which has been correcly initialized with the given configuration.
func (*MapPinTracker) Recover ¶
Recover will re-track or re-untrack a Cid in error state, possibly retriggering an IPFS pinning operation and returning only when it is done. The pinning/unpinning operation happens synchronously, jumping the queues.
func (*MapPinTracker) SetClient ¶
func (mpt *MapPinTracker) SetClient(c *rpc.Client)
SetClient makes the MapPinTracker ready to perform RPC requests to other components.
func (*MapPinTracker) Shutdown ¶
func (mpt *MapPinTracker) Shutdown() error
Shutdown finishes the services provided by the MapPinTracker and cancels any active context.
func (*MapPinTracker) Status ¶
func (mpt *MapPinTracker) Status(c *cid.Cid) api.PinInfo
Status returns information for a Cid tracked by this MapPinTracker.
func (*MapPinTracker) StatusAll ¶ added in v0.0.3
func (mpt *MapPinTracker) StatusAll() []api.PinInfo
StatusAll returns information for all Cids tracked by this MapPinTracker.
func (*MapPinTracker) Sync ¶
Sync verifies that the status of a Cid matches that of the IPFS daemon. If not, it will be transitioned to PinError or UnpinError.
Sync returns the updated local status for the given Cid. Pins in error states can be recovered with Recover(). An error is returned if we are unable to contact the IPFS daemon.
func (*MapPinTracker) SyncAll ¶ added in v0.0.3
func (mpt *MapPinTracker) SyncAll() ([]api.PinInfo, error)
SyncAll verifies that the statuses of all tracked Cids match the one reported by the IPFS daemon. If not, they will be transitioned to PinError or UnpinError.
SyncAll returns the list of local status for all tracked Cids which were updated or have errors. Cids in error states can be recovered with Recover(). An error is returned if we are unable to contact the IPFS daemon.
type PeerMonitor ¶ added in v0.0.3
type PeerMonitor interface { Component // LogMetric stores a metric. Metrics are pushed reguarly from each peer // to the active PeerMonitor. LogMetric(api.Metric) // LastMetrics returns a map with the latest metrics of matching name // for the current cluster peers. LastMetrics(name string) []api.Metric // Alerts delivers alerts generated when this peer monitor detects // a problem (i.e. metrics not arriving as expected). Alerts are used to // trigger rebalancing operations. Alerts() <-chan api.Alert }
PeerMonitor is a component in charge of monitoring the peers in the cluster and providing candidates to the PinAllocator when a pin request arrives.
type Peered ¶
Peered represents a component which needs to be aware of the peers in the Cluster and of any changes to the peer set.
type PinAllocator ¶ added in v0.0.3
type PinAllocator interface { Component // Allocate returns the list of peers that should be assigned to // Pin content in oder of preference (from the most preferred to the // least). The "current" map contains valid metrics for peers // which are currently pinning the content. The candidates map // contains the metrics for all peers which are eligible for pinning // the content. Allocate(c *cid.Cid, current, candidates map[peer.ID]api.Metric) ([]peer.ID, error) }
PinAllocator decides where to pin certain content. In order to make such decision, it receives the pin arguments, the peers which are currently allocated to the content and metrics available for all peers which could allocate the content.
type PinTracker ¶
type PinTracker interface { Component // Track tells the tracker that a Cid is now under its supervision // The tracker may decide to perform an IPFS pin. Track(api.Pin) error // Untrack tells the tracker that a Cid is to be forgotten. The tracker // may perform an IPFS unpin operation. Untrack(*cid.Cid) error // StatusAll returns the list of pins with their local status. StatusAll() []api.PinInfo // Status returns the local status of a given Cid. Status(*cid.Cid) api.PinInfo // SyncAll makes sure that all tracked Cids reflect the real IPFS status. // It returns the list of pins which were updated by the call. SyncAll() ([]api.PinInfo, error) // Sync makes sure that the Cid status reflect the real IPFS status. // It returns the local status of the Cid. Sync(*cid.Cid) (api.PinInfo, error) // Recover retriggers a Pin/Unpin operation in Cids with error status. Recover(*cid.Cid) (api.PinInfo, error) }
PinTracker represents a component which tracks the status of the pins in this cluster and ensures they are in sync with the IPFS daemon. This component should be thread safe.
type RESTAPI ¶
type RESTAPI struct {
// contains filtered or unexported fields
}
RESTAPI implements an API and aims to provides a RESTful HTTP API for Cluster.
func NewRESTAPI ¶
NewRESTAPI creates a new object which is ready to be started.
type RPCAPI ¶
type RPCAPI struct {
// contains filtered or unexported fields
}
RPCAPI is a go-libp2p-gorpc service which provides the internal ipfs-cluster API, which enables components and cluster peers to communicate and request actions from each other.
The RPC API methods are usually redirects to the actual methods in the different components of ipfs-cluster, with very little added logic. Refer to documentation on those methods for details on their behaviour.
func (*RPCAPI) ConsensusLogAddPeer ¶ added in v0.0.3
func (rpcapi *RPCAPI) ConsensusLogAddPeer(in api.MultiaddrSerial, out *struct{}) error
ConsensusLogAddPeer runs Consensus.LogAddPeer().
func (*RPCAPI) ConsensusLogPin ¶
ConsensusLogPin runs Consensus.LogPin().
func (*RPCAPI) ConsensusLogRmPeer ¶ added in v0.0.3
ConsensusLogRmPeer runs Consensus.LogRmPeer().
func (*RPCAPI) ConsensusLogUnpin ¶
ConsensusLogUnpin runs Consensus.LogUnpin().
func (*RPCAPI) IPFSPinLsCid ¶ added in v0.0.3
IPFSPinLsCid runs IPFSConnector.PinLsCid().
func (*RPCAPI) Join ¶ added in v0.0.3
func (rpcapi *RPCAPI) Join(in api.MultiaddrSerial, out *struct{}) error
Join runs Cluster.Join().
func (*RPCAPI) PeerManagerAddFromMultiaddrs ¶ added in v0.0.3
func (rpcapi *RPCAPI) PeerManagerAddFromMultiaddrs(in api.MultiaddrsSerial, out *struct{}) error
PeerManagerAddFromMultiaddrs runs peerManager.addFromMultiaddrs().
func (*RPCAPI) PeerManagerAddPeer ¶ added in v0.0.3
func (rpcapi *RPCAPI) PeerManagerAddPeer(in api.MultiaddrSerial, out *struct{}) error
PeerManagerAddPeer runs peerManager.addPeer().
func (*RPCAPI) PeerManagerPeers ¶ added in v0.0.3
PeerManagerPeers runs peerManager.peers().
func (*RPCAPI) PeerManagerRmPeer ¶ added in v0.0.3
PeerManagerRmPeer runs peerManager.rmPeer().
func (*RPCAPI) PeerManagerRmPeerShutdown ¶ added in v0.0.3
PeerManagerRmPeerShutdown runs peerManager.rmPeer().
func (*RPCAPI) PeerMonitorLastMetrics ¶ added in v0.0.3
PeerMonitorLastMetrics runs PeerMonitor.LastMetrics().
func (*RPCAPI) PeerMonitorLogMetric ¶ added in v0.0.3
PeerMonitorLogMetric runs PeerMonitor.LogMetric().
func (*RPCAPI) PeerRemove ¶ added in v0.0.3
PeerRemove runs Cluster.PeerRm().
func (*RPCAPI) RemoteMultiaddrForPeer ¶ added in v0.0.3
RemoteMultiaddrForPeer returns the multiaddr of a peer as seen by this peer. This is necessary for a peer to figure out which of its multiaddresses the peers are seeing (also when crossing NATs). It should be called from the peer the IN parameter indicates.
func (*RPCAPI) StateSync ¶
func (rpcapi *RPCAPI) StateSync(in struct{}, out *[]api.PinInfoSerial) error
StateSync runs Cluster.StateSync().
func (*RPCAPI) StatusAll ¶ added in v0.0.3
func (rpcapi *RPCAPI) StatusAll(in struct{}, out *[]api.GlobalPinInfoSerial) error
StatusAll runs Cluster.StatusAll().
func (*RPCAPI) SyncAll ¶ added in v0.0.3
func (rpcapi *RPCAPI) SyncAll(in struct{}, out *[]api.GlobalPinInfoSerial) error
SyncAll runs Cluster.SyncAll().
func (*RPCAPI) SyncAllLocal ¶ added in v0.0.3
func (rpcapi *RPCAPI) SyncAllLocal(in struct{}, out *[]api.PinInfoSerial) error
SyncAllLocal runs Cluster.SyncAllLocal().
func (*RPCAPI) TrackerRecover ¶ added in v0.0.3
TrackerRecover runs PinTracker.Recover().
func (*RPCAPI) TrackerStatus ¶
TrackerStatus runs PinTracker.Status().
func (*RPCAPI) TrackerStatusAll ¶ added in v0.0.3
func (rpcapi *RPCAPI) TrackerStatusAll(in struct{}, out *[]api.PinInfoSerial) error
TrackerStatusAll runs PinTracker.StatusAll().
type Raft ¶ added in v0.0.3
type Raft struct {
// contains filtered or unexported fields
}
Raft performs all Raft-specific operations which are needed by Cluster but are not fulfilled by the consensus interface. It should contain most of the Raft-related stuff so it can be easily replaced in the future, if need be.
func (*Raft) Leader ¶ added in v0.0.3
Leader returns Raft's leader. It may be an empty string if there is no leader or it is unknown.
func (*Raft) RemovePeer ¶ added in v0.0.3
RemovePeer removes a peer from Raft
func (*Raft) WaitForLeader ¶ added in v0.0.3
WaitForLeader holds until Raft says we have a leader. Returns an error if we don't.
type State ¶
type State interface { // Add adds a pin to the State Add(api.Pin) error // Rm removes a pin from the State Rm(*cid.Cid) error // List lists all the pins in the state List() []api.Pin // Has returns true if the state is holding information for a Cid Has(*cid.Cid) bool // Get returns the information attacthed to this pin Get(*cid.Cid) api.Pin }
State represents the shared state of the cluster and it is used by the Consensus component to keep track of objects which objects are pinned. This component should be thread safe.
type StdPeerMonitor ¶ added in v0.0.3
type StdPeerMonitor struct {
// contains filtered or unexported fields
}
StdPeerMonitor is a component in charge of monitoring peers, logging metrics and detecting failures
func NewStdPeerMonitor ¶ added in v0.0.3
func NewStdPeerMonitor(cfg *Config) *StdPeerMonitor
NewStdPeerMonitor creates a new monitor. It receives the window capacity (how many metrics to keep for each peer and type of metric) and the monitoringInterval (interval between the checks that produce alerts) as parameters
func (*StdPeerMonitor) Alerts ¶ added in v0.0.3
func (mon *StdPeerMonitor) Alerts() <-chan api.Alert
Alerts returns a channel on which alerts are sent when the monitor detects a failure.
func (*StdPeerMonitor) LastMetrics ¶ added in v0.0.3
func (mon *StdPeerMonitor) LastMetrics(name string) []api.Metric
LastMetrics returns last known VALID metrics of a given type
func (*StdPeerMonitor) LogMetric ¶ added in v0.0.3
func (mon *StdPeerMonitor) LogMetric(m api.Metric)
LogMetric stores a metric so it can later be retrieved.
func (*StdPeerMonitor) SetClient ¶ added in v0.0.3
func (mon *StdPeerMonitor) SetClient(c *rpc.Client)
SetClient saves the given rpc.Client for later use
func (*StdPeerMonitor) Shutdown ¶ added in v0.0.3
func (mon *StdPeerMonitor) Shutdown() error
Shutdown stops the peer monitor. It particular, it will not deliver any alerts.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
allocator
|
|
numpinalloc
Package numpinalloc implements an ipfscluster.Allocator based on the "numpin" Informer.
|
Package numpinalloc implements an ipfscluster.Allocator based on the "numpin" Informer. |
Package api holds declarations for types used in ipfs-cluster APIs to make them re-usable across differen tools.
|
Package api holds declarations for types used in ipfs-cluster APIs to make them re-usable across differen tools. |
informer
|
|
numpin
Package numpin implements an ipfs-cluster informer which determines how many items this peer is pinning and returns it as api.Metric
|
Package numpin implements an ipfs-cluster informer which determines how many items this peer is pinning and returns it as api.Metric |
state
|
|
Package test offers testing utilities to ipfs-cluster like mocks
|
Package test offers testing utilities to ipfs-cluster like mocks |