Fix double locking
License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
3ea0997c93
commit
407183b258
@ -294,68 +294,57 @@ func ConfigFullNode(cfg *config.FullNode) Option {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func repoFull(r repo.Repo) Option {
|
func configFull(c interface{}) Option {
|
||||||
lr, err := r.Lock(repo.RepoFullNode)
|
|
||||||
if err != nil {
|
|
||||||
return Error(err)
|
|
||||||
}
|
|
||||||
c, err := lr.Config()
|
|
||||||
if err != nil {
|
|
||||||
return Error(err)
|
|
||||||
}
|
|
||||||
cfg, ok := c.(*config.FullNode)
|
cfg, ok := c.(*config.FullNode)
|
||||||
if !ok {
|
if !ok {
|
||||||
return Error(xerrors.Errorf("invalid config from repo, got: %T", c))
|
return Error(xerrors.Errorf("invalid config from repo, got: %T", c))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Options(
|
return ConfigFullNode(cfg)
|
||||||
ConfigFullNode(cfg),
|
|
||||||
Override(new(repo.LockedRepo), modules.LockedRepo(lr)), // module handles closing
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func repoMiner(r repo.Repo) Option {
|
func configMiner(c interface{}) Option {
|
||||||
lr, err := r.Lock(repo.RepoStorageMiner)
|
|
||||||
if err != nil {
|
|
||||||
return Error(err)
|
|
||||||
}
|
|
||||||
c, err := lr.Config()
|
|
||||||
if err != nil {
|
|
||||||
return Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg, ok := c.(*config.StorageMiner)
|
cfg, ok := c.(*config.StorageMiner)
|
||||||
if !ok {
|
if !ok {
|
||||||
return Error(xerrors.Errorf("invalid config from repo, got: %T", c))
|
return Error(xerrors.Errorf("invalid config from repo, got: %T", c))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Options(
|
return ConfigCommon(&cfg.Common)
|
||||||
ConfigCommon(&cfg.Common),
|
|
||||||
Override(new(repo.LockedRepo), modules.LockedRepo(lr)), // module handles closing
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Repo(r repo.Repo) Option {
|
func Repo(r repo.Repo) Option {
|
||||||
|
return func(settings *Settings) error {
|
||||||
|
lr, err := r.Lock(settings.nodeType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
c, err := lr.Config()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return Options(
|
return Options(
|
||||||
ApplyIf(isType(repo.RepoFullNode), repoFull(r)),
|
Override(new(repo.LockedRepo), modules.LockedRepo(lr)), // module handles closing
|
||||||
ApplyIf(isType(repo.RepoStorageMiner), repoMiner(r)),
|
|
||||||
|
|
||||||
Override(new(dtypes.MetadataDS), modules.Datastore),
|
ApplyIf(isType(repo.RepoFullNode), configFull(c)),
|
||||||
Override(new(dtypes.ChainBlockstore), modules.ChainBlockstore),
|
ApplyIf(isType(repo.RepoStorageMiner), configMiner(c)),
|
||||||
|
|
||||||
Override(new(dtypes.ClientFilestore), modules.ClientFstore),
|
Override(new(dtypes.MetadataDS), modules.Datastore),
|
||||||
Override(new(dtypes.ClientBlockstore), modules.ClientBlockstore),
|
Override(new(dtypes.ChainBlockstore), modules.ChainBlockstore),
|
||||||
Override(new(dtypes.ClientDAG), modules.ClientDAG),
|
|
||||||
|
|
||||||
Override(new(ci.PrivKey), lp2p.PrivKey),
|
Override(new(dtypes.ClientFilestore), modules.ClientFstore),
|
||||||
Override(new(ci.PubKey), ci.PrivKey.GetPublic),
|
Override(new(dtypes.ClientBlockstore), modules.ClientBlockstore),
|
||||||
Override(new(peer.ID), peer.IDFromPublicKey),
|
Override(new(dtypes.ClientDAG), modules.ClientDAG),
|
||||||
|
|
||||||
Override(new(types.KeyStore), modules.KeyStore),
|
Override(new(ci.PrivKey), lp2p.PrivKey),
|
||||||
|
Override(new(ci.PubKey), ci.PrivKey.GetPublic),
|
||||||
|
Override(new(peer.ID), peer.IDFromPublicKey),
|
||||||
|
|
||||||
Override(new(*dtypes.APIAlg), modules.APISecret),
|
Override(new(types.KeyStore), modules.KeyStore),
|
||||||
)
|
|
||||||
|
Override(new(*dtypes.APIAlg), modules.APISecret),
|
||||||
|
)(settings)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func FullAPI(out *api.FullNode) Option {
|
func FullAPI(out *api.FullNode) Option {
|
||||||
|
Loading…
Reference in New Issue
Block a user