Documentation ¶
Index ¶
- Variables
- type ProviderInfo
- type Registry
- func (r *Registry) AllProviderInfo() []*ProviderInfo
- func (r *Registry) AllowPeer(peerID peer.ID) bool
- func (r *Registry) Allowed(peerID peer.ID) bool
- func (r *Registry) BlockPeer(peerID peer.ID) bool
- func (r *Registry) CheckSequence(peerID peer.ID, seq uint64) error
- func (r *Registry) Close() error
- func (r *Registry) Discover(peerID peer.ID, discoveryAddr string, sync bool) error
- func (r *Registry) ImportProviders(ctx context.Context, fromURL *url.URL) (int, error)
- func (r *Registry) IsRegistered(providerID peer.ID) bool
- func (r *Registry) ProviderInfo(providerID peer.ID) *ProviderInfo
- func (r *Registry) PublishAllowed(publisherID, providerID peer.ID) bool
- func (r *Registry) Register(ctx context.Context, info *ProviderInfo) error
- func (r *Registry) RegisterOrUpdate(ctx context.Context, providerID peer.ID, addrs []string, adID cid.Cid, ...) error
- func (r *Registry) RemoveProvider(ctx context.Context, providerID peer.ID) error
- func (r *Registry) SetPolicy(policyCfg config.Policy) error
- func (r *Registry) SyncChan() <-chan *ProviderInfo
Constants ¶
This section is empty.
Variables ¶
var ( ErrInProgress = errors.New("discovery already in progress") ErrCannotPublish = errors.New("publisher not allowed to publish to other provider") ErrNotAllowed = errors.New("provider not allowed by policy") ErrNoDiscovery = errors.New("discovery not available") ErrNotVerified = errors.New("provider cannot be verified") ErrPublisherNotAllowed = errors.New("publisher not allowed by policy") ErrTooSoon = errors.New("not enough time since previous discovery") )
Functions ¶
This section is empty.
Types ¶
type ProviderInfo ¶
type ProviderInfo struct { // AddrInfo contains a peer.ID and set of Multiaddr addresses. AddrInfo peer.AddrInfo // DiscoveryAddr is the address that is used for discovery of the provider. DiscoveryAddr string `json:",omitempty"` // LastAdvertisement identifies the latest advertisement the indexer has ingested. LastAdvertisement cid.Cid `json:",omitempty"` // LastAdvertisementTime is the time the latest advertisement was received. LastAdvertisementTime time.Time `json:",omitempty"` // Publisher contains the ID of the provider info publisher. Publisher peer.ID `json:",omitempty"` // PublisherAddr contains the last seen publisher multiaddr. PublisherAddr multiaddr.Multiaddr `json:",omitempty"` // contains filtered or unexported fields }
ProviderInfo is an immutable data structure that holds information about a provider. A ProviderInfo instance is never modified, but rather a new one is created to update its contents. This means existing references remain valid.
func (*ProviderInfo) Deleted ¶
func (p *ProviderInfo) Deleted() bool
func (*ProviderInfo) Inactive ¶
func (p *ProviderInfo) Inactive() bool
func (*ProviderInfo) MarshalJSON ¶
func (p *ProviderInfo) MarshalJSON() ([]byte, error)
func (*ProviderInfo) UnmarshalJSON ¶
func (p *ProviderInfo) UnmarshalJSON(data []byte) error
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry stores information about discovered providers
func NewRegistry ¶
func NewRegistry(ctx context.Context, cfg config.Discovery, dstore datastore.Datastore, discoverer discovery.Discoverer) (*Registry, error)
NewRegistry creates a new provider registry, giving it provider policy configuration, a datastore to persist provider data, and a Discoverer interface. The context is only used for cancellation of this function.
func (*Registry) AllProviderInfo ¶
func (r *Registry) AllProviderInfo() []*ProviderInfo
AllProviderInfo returns information for all registered providers
func (*Registry) AllowPeer ¶
AllowPeer configures the policy to allow messages published by the identified peer, or allow the peer to register as a provider.
func (*Registry) BlockPeer ¶
BlockPeer configures the policy to block messages published by the identified peer, and block the peer from registering as a provider.
func (*Registry) Close ¶
Close waits for any pending discoverer to finish and then stops the registry
func (*Registry) Discover ¶
Discover begins the process of discovering and verifying a provider. The discovery address us used to lookup the provider's information.
TODO: To support multiple discoverer methods (lotus, IPFS, etc.) there need to be information that is part of, or in addition to, the discoveryAddr to indicate where/how discovery is done.
func (*Registry) ImportProviders ¶
ImportProviders reads providers from another indexer and registers any that are not already registered. Returns the count of newly registered providers.
func (*Registry) IsRegistered ¶
IsRegistered checks if the provider is in the registry
func (*Registry) ProviderInfo ¶
func (r *Registry) ProviderInfo(providerID peer.ID) *ProviderInfo
ProviderInfo returns information for a registered provider
func (*Registry) PublishAllowed ¶
PublishAllowed checks if a peer is allowed to publish for other providers.
func (*Registry) Register ¶
func (r *Registry) Register(ctx context.Context, info *ProviderInfo) error
Register is used to directly register a provider, bypassing discovery and adding discovered data directly to the registry.
func (*Registry) RegisterOrUpdate ¶
func (r *Registry) RegisterOrUpdate(ctx context.Context, providerID peer.ID, addrs []string, adID cid.Cid, publisher peer.AddrInfo) error
RegisterOrUpdate attempts to register an unregistered provider, or updates the addresses and latest advertisement of an already registered provider. If publisher has a valid ID, then the data in publisher replaces the provider's previous publisher information.
func (*Registry) RemoveProvider ¶
func (*Registry) SyncChan ¶
func (r *Registry) SyncChan() <-chan *ProviderInfo