diff --git a/cmd/lotus/daemon.go b/cmd/lotus/daemon.go index b976fde79..a0f754a60 100644 --- a/cmd/lotus/daemon.go +++ b/cmd/lotus/daemon.go @@ -127,6 +127,10 @@ var DaemonCmd = &cli.Command{ Usage: "manage open file limit", Value: true, }, + &cli.StringFlag{ + Name: "config", + Usage: "specify path of config file to use", + }, }, Action: func(cctx *cli.Context) error { err := runmetrics.Enable(runmetrics.RunMetricOptions{ @@ -180,6 +184,10 @@ var DaemonCmd = &cli.Command{ return xerrors.Errorf("opening fs repo: %w", err) } + if cctx.String("config") != "" { + r.SetConfigPath(cctx.String("config")) + } + if err := r.Init(repo.FullNode); err != nil && err != repo.ErrRepoExists { return xerrors.Errorf("repo init error: %w", err) } diff --git a/node/repo/fsrepo.go b/node/repo/fsrepo.go index 709d78d3a..a69cdd55d 100644 --- a/node/repo/fsrepo.go +++ b/node/repo/fsrepo.go @@ -65,7 +65,8 @@ var ErrRepoExists = xerrors.New("repo exists") // FsRepo is struct for repo, use NewFS to create type FsRepo struct { - path string + path string + configPath string } var _ Repo = &FsRepo{} @@ -78,10 +79,15 @@ func NewFS(path string) (*FsRepo, error) { } return &FsRepo{ - path: path, + path: path, + configPath: filepath.Join(path, fsConfig), }, nil } +func (fsr *FsRepo) SetConfigPath(cfgPath string) { + fsr.configPath = cfgPath +} + func (fsr *FsRepo) Exists() (bool, error) { _, err := os.Stat(filepath.Join(fsr.path, fsDatastore)) notexist := os.IsNotExist(err) @@ -115,9 +121,7 @@ func (fsr *FsRepo) Init(t RepoType) error { } func (fsr *FsRepo) initConfig(t RepoType) error { - cfgP := filepath.Join(fsr.path, fsConfig) - - _, err := os.Stat(cfgP) + _, err := os.Stat(fsr.configPath) if err == nil { // exists return nil @@ -125,7 +129,7 @@ func (fsr *FsRepo) initConfig(t RepoType) error { return err } - c, err := os.Create(cfgP) + c, err := os.Create(fsr.configPath) if err != nil { return err } @@ -215,16 +219,18 @@ func (fsr *FsRepo) Lock(repoType RepoType) (LockedRepo, error) { return nil, xerrors.Errorf("could not lock the repo: %w", err) } return &fsLockedRepo{ - path: fsr.path, - repoType: repoType, - closer: closer, + path: fsr.path, + configPath: fsr.configPath, + repoType: repoType, + closer: closer, }, nil } type fsLockedRepo struct { - path string - repoType RepoType - closer io.Closer + path string + configPath string + repoType RepoType + closer io.Closer ds map[string]datastore.Batching dsErr error @@ -277,7 +283,7 @@ func (fsr *fsLockedRepo) Config() (interface{}, error) { } func (fsr *fsLockedRepo) loadConfigFromDisk() (interface{}, error) { - return config.FromFile(fsr.join(fsConfig), defConfForType(fsr.repoType)) + return config.FromFile(fsr.configPath, defConfForType(fsr.repoType)) } func (fsr *fsLockedRepo) SetConfig(c func(interface{})) error { @@ -306,7 +312,7 @@ func (fsr *fsLockedRepo) SetConfig(c func(interface{})) error { } // write buffer of TOML bytes to config file - err = ioutil.WriteFile(fsr.join(fsConfig), buf.Bytes(), 0644) + err = ioutil.WriteFile(fsr.configPath, buf.Bytes(), 0644) if err != nil { return err }