@cryptotaxi247 / kubo / commits / c4debb591

constructor: Add few docstrings

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Apr 23, 2019 at 13:26 UTC c4debb591241e9bd8d095614c6eb1f7db568f332
8 files changed +43 -13
core/node/builder.go
+1
@@ -83,6 +83,7 @@ func (cfg *BuildCfg) fillDefaults() error {
83 return nil
84 }
85
86 +// options creates fx option group from this build config
87 func (cfg *BuildCfg) options(ctx context.Context) fx.Option {
88 err := cfg.fillDefaults()
89 if err != nil {
core/node/core.go
+8 -3
@@ -25,7 +25,8 @@ import (
25 "go.uber.org/fx"
26 )
27
28 -func BlockServiceCtor(lc fx.Lifecycle, bs blockstore.Blockstore, rem exchange.Interface) blockservice.BlockService {
28 +// BlockService creates new blockservice which provides an interface to fetch content-addressable blocks
29 +func BlockService(lc fx.Lifecycle, bs blockstore.Blockstore, rem exchange.Interface) blockservice.BlockService {
30 bsvc := blockservice.New(bs, rem)
31
32 lc.Append(fx.Hook{
@@ -37,6 +38,7 @@ func BlockServiceCtor(lc fx.Lifecycle, bs blockstore.Blockstore, rem exchange.In
38 return bsvc
39 }
40
41 +// Pinning creates new pinner which tells GC which blocks should be kept
42 func Pinning(bstore blockstore.Blockstore, ds format.DAGService, repo repo.Repo) (pin.Pinner, error) {
43 internalDag := merkledag.NewDAGService(blockservice.New(bstore, offline.Exchange(bstore)))
44 pinning, err := pin.LoadPinner(repo.Datastore(), ds, internalDag)
@@ -51,11 +53,13 @@ func Pinning(bstore blockstore.Blockstore, ds format.DAGService, repo repo.Repo)
53 return pinning, nil
54 }
55
54 -func DagCtor(bs blockservice.BlockService) format.DAGService {
56 +// Dag creates new DAGService
57 +func Dag(bs blockservice.BlockService) format.DAGService {
58 return merkledag.NewDAGService(bs)
59 }
60
58 -func OnlineExchangeCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, rt routing.IpfsRouting, bs blockstore.GCBlockstore) exchange.Interface {
61 +// OnlineExchange creates new LibP2P backed block exchange (BitSwap)
62 +func OnlineExchange(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, rt routing.IpfsRouting, bs blockstore.GCBlockstore) exchange.Interface {
63 bitswapNetwork := network.NewFromIpfsHost(host, rt)
64 exch := bitswap.New(helpers.LifecycleCtx(mctx, lc), bitswapNetwork, bs)
65 lc.Append(fx.Hook{
@@ -66,6 +70,7 @@ func OnlineExchangeCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host
70 return exch
71 }
72
73 +// Files loads persisted MFS root
74 func Files(mctx helpers.MetricsCtx, lc fx.Lifecycle, repo repo.Repo, dag format.DAGService) (*mfs.Root, error) {
75 dsk := datastore.NewKey("/local/filesroot")
76 pf := func(ctx context.Context, c cid.Cid) error {
core/node/groups.go
+14 -6
@@ -51,25 +51,29 @@ func LibP2P(cfg *BuildCfg) fx.Option {
51 return opts
52 }
53
54 +// Storage groups units which setup datastore based persistence and blockstore layers
55 func Storage(cfg *BuildCfg) fx.Option {
56 return fx.Options(
57 fx.Provide(RepoConfig),
57 - fx.Provide(DatastoreCtor),
58 + fx.Provide(Datastore),
59 fx.Provide(BaseBlockstoreCtor(cfg.Permanent, cfg.NilRepo)),
60 fx.Provide(GcBlockstoreCtor),
61 )
62 }
63
64 +// Identity groups units providing cryptographic identity
65 var Identity = fx.Options(
66 fx.Provide(PeerID),
67 fx.Provide(PrivateKey),
68 fx.Provide(libp2p.Peerstore),
69 )
70
71 +// IPNS groups namesys related units
72 var IPNS = fx.Options(
73 fx.Provide(RecordValidator),
74 )
75
76 +// Providers groups units managing provider routing records
77 var Providers = fx.Options(
78 fx.Provide(ProviderQueue),
79 fx.Provide(ProviderCtor),
@@ -78,10 +82,11 @@ var Providers = fx.Options(
82 fx.Invoke(Reprovider),
83 )
84
85 +// Online groups online-only units
86 func Online(cfg *BuildCfg) fx.Option {
87 return fx.Options(
83 - fx.Provide(OnlineExchangeCtor),
84 - fx.Provide(OnlineNamesysCtor),
88 + fx.Provide(OnlineExchange),
89 + fx.Provide(OnlineNamesys),
90
91 fx.Invoke(IpnsRepublisher),
92
@@ -92,16 +97,18 @@ func Online(cfg *BuildCfg) fx.Option {
97 )
98 }
99
100 +// Offline groups offline alternatives to Online units
101 var Offline = fx.Options(
102 fx.Provide(offline.Exchange),
97 - fx.Provide(OfflineNamesysCtor),
103 + fx.Provide(OfflineNamesys),
104 fx.Provide(offroute.NewOfflineRouter),
105 fx.Provide(provider.NewOfflineProvider),
106 )
107
108 +// Core groups basic IPFS services
109 var Core = fx.Options(
103 - fx.Provide(BlockServiceCtor),
104 - fx.Provide(DagCtor),
110 + fx.Provide(BlockService),
111 + fx.Provide(Dag),
112 fx.Provide(resolver.NewBasicResolver),
113 fx.Provide(Pinning),
114 fx.Provide(Files),
@@ -114,6 +121,7 @@ func Networked(cfg *BuildCfg) fx.Option {
121 return Offline
122 }
123
124 +// IPFS builds a group of fx Options based on the passed BuildCfg
125 func IPFS(ctx context.Context, cfg *BuildCfg) fx.Option {
126 if cfg == nil {
127 cfg = new(BuildCfg)
core/node/helpers.go
+1
@@ -50,6 +50,7 @@ func setupSharding(cfg *config.Config) {
50 uio.UseHAMTSharding = cfg.Experimental.ShardingEnabled
51 }
52
53 +// baseProcess creates a goprocess which is closed when the lifecycle signals it to stop
54 func baseProcess(lc fx.Lifecycle) goprocess.Process {
55 p := goprocess.WithParent(goprocess.Background())
56 lc.Append(fx.Hook{
core/node/identity.go
+2
@@ -9,6 +9,7 @@ import (
9 "github.com/libp2p/go-libp2p-peer"
10 )
11
12 +// PeerID loads peer identity form config
13 func PeerID(cfg *config.Config) (peer.ID, error) {
14 cid := cfg.Identity.PeerID
15 if cid == "" {
@@ -26,6 +27,7 @@ func PeerID(cfg *config.Config) (peer.ID, error) {
27 return id, nil
28 }
29
30 +// PrivateKey loads the private key from config
31 func PrivateKey(cfg *config.Config, id peer.ID) (crypto.PrivKey, error) {
32 if cfg.Identity.PrivKey == "" {
33 return nil, nil
core/node/ipns.go
+6 -2
@@ -19,6 +19,7 @@ import (
19
20 const DefaultIpnsCacheSize = 128
21
22 +// RecordValidator provides namesys compatible routing record validator
23 func RecordValidator(ps peerstore.Peerstore) record.Validator {
24 return record.NamespacedValidator{
25 "pk": record.PublicKeyValidator{},
@@ -26,11 +27,13 @@ func RecordValidator(ps peerstore.Peerstore) record.Validator {
27 }
28 }
29
29 -func OfflineNamesysCtor(rt routing.IpfsRouting, repo repo.Repo) (namesys.NameSystem, error) {
30 +// OfflineNamesys creates namesys setup for offline operation
31 +func OfflineNamesys(rt routing.IpfsRouting, repo repo.Repo) (namesys.NameSystem, error) {
32 return namesys.NewNameSystem(rt, repo.Datastore(), 0), nil
33 }
34
33 -func OnlineNamesysCtor(rt routing.IpfsRouting, repo repo.Repo, cfg *config.Config) (namesys.NameSystem, error) {
35 +// OnlineNamesys createn new namesys setup for online operation
36 +func OnlineNamesys(rt routing.IpfsRouting, repo repo.Repo, cfg *config.Config) (namesys.NameSystem, error) {
37 cs := cfg.Ipns.ResolveCacheSize
38 if cs == 0 {
39 cs = DefaultIpnsCacheSize
@@ -41,6 +44,7 @@ func OnlineNamesysCtor(rt routing.IpfsRouting, repo repo.Repo, cfg *config.Confi
44 return namesys.NewNameSystem(rt, repo.Datastore(), cs), nil
45 }
46
47 +// IpnsRepublisher runs new IPNS republisher service
48 func IpnsRepublisher(lc lcProcess, cfg *config.Config, namesys namesys.NameSystem, repo repo.Repo, privKey crypto.PrivKey) error {
49 repub := republisher.NewRepublisher(namesys, repo.Datastore(), privKey, repo.Keystore())
50
core/node/provider.go
+5 -1
@@ -19,10 +19,12 @@ import (
19
20 const kReprovideFrequency = time.Hour * 12
21
22 +// ProviderQueue creates new datastore backed provider queue
23 func ProviderQueue(mctx helpers.MetricsCtx, lc fx.Lifecycle, repo repo.Repo) (*provider.Queue, error) {
24 return provider.NewQueue(helpers.LifecycleCtx(mctx, lc), "provider-v1", repo.Datastore())
25 }
26
27 +// ProviderCtor creates new record provider
28 func ProviderCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, queue *provider.Queue, rt routing.IpfsRouting) provider.Provider {
29 p := provider.NewProvider(helpers.LifecycleCtx(mctx, lc), queue, rt)
30
@@ -39,6 +41,7 @@ func ProviderCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, queue *provider.Queu
41 return p
42 }
43
44 +// ReproviderCtor creates new reprovider
45 func ReproviderCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, cfg *config.Config, bs BaseBlocks, ds format.DAGService, pinning pin.Pinner, rt routing.IpfsRouting) (*reprovide.Reprovider, error) {
46 var keyProvider reprovide.KeyChanFunc
47
@@ -57,6 +60,7 @@ func ReproviderCtor(mctx helpers.MetricsCtx, lc fx.Lifecycle, cfg *config.Config
60 return reprovide.NewReprovider(helpers.LifecycleCtx(mctx, lc), rt, keyProvider), nil
61 }
62
63 +// Reprovider runs the reprovider service
64 func Reprovider(cfg *config.Config, reprovider *reprovide.Reprovider) error {
65 reproviderInterval := kReprovideFrequency
66 if cfg.Reprovider.Interval != "" {
@@ -68,6 +72,6 @@ func Reprovider(cfg *config.Config, reprovider *reprovide.Reprovider) error {
72 reproviderInterval = dur
73 }
74
71 - go reprovider.Run(reproviderInterval)
75 + go reprovider.Run(reproviderInterval) // TODO: refactor reprovider to have Start/Stop, use lifecycle
76 return nil
77 }
core/node/storage.go
+6 -1
@@ -28,16 +28,20 @@ func isTooManyFDError(err error) bool {
28 return false
29 }
30
31 +// RepoConfig loads configuration from the repo
32 func RepoConfig(repo repo.Repo) (*config.Config, error) {
33 return repo.Config()
34 }
35
35 -func DatastoreCtor(repo repo.Repo) datastore.Datastore {
36 +// Datastore provides the datastore
37 +func Datastore(repo repo.Repo) datastore.Datastore {
38 return repo.Datastore()
39 }
40
41 +// BaseBlocks is the lower level blockstore without GC or Filestore layers
42 type BaseBlocks blockstore.Blockstore
43
44 +// BaseBlockstoreCtor creates cached blockstore backed by the provided datastore
45 func BaseBlockstoreCtor(permanent bool, nilRepo bool) func(mctx helpers.MetricsCtx, repo repo.Repo, cfg *config.Config, lc fx.Lifecycle) (bs BaseBlocks, err error) {
46 return func(mctx helpers.MetricsCtx, repo repo.Repo, cfg *config.Config, lc fx.Lifecycle) (bs BaseBlocks, err error) {
47 rds := &retrystore.Datastore{
@@ -82,6 +86,7 @@ func BaseBlockstoreCtor(permanent bool, nilRepo bool) func(mctx helpers.MetricsC
86 }
87 }
88
89 +// GcBlockstoreCtor wraps the base blockstore with GC and Filestore layers
90 func GcBlockstoreCtor(repo repo.Repo, bb BaseBlocks, cfg *config.Config) (gclocker blockstore.GCLocker, gcbs blockstore.GCBlockstore, bs blockstore.Blockstore, fstore *filestore.Filestore) {
91 gclocker = blockstore.NewGCLocker()
92 gcbs = blockstore.NewGCBlockstore(bb, gclocker)