Fix double locking

License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
Jakub Sztandera 2019-10-30 23:33:31 +01:00
parent 3ea0997c93
commit 407183b258
No known key found for this signature in database
GPG Key ID: 9A9AF56F8B3879BA

View File

@ -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 {