lotus/cmd/lotus-seal-worker/rpc.go

80 lines
1.9 KiB
Go
Raw Normal View History

2020-03-11 01:57:52 +00:00
package main
import (
2020-03-13 01:37:38 +00:00
"context"
"sync/atomic"
2020-03-13 01:37:38 +00:00
"github.com/google/uuid"
2020-08-30 18:28:58 +00:00
"github.com/mitchellh/go-homedir"
"golang.org/x/xerrors"
2020-03-23 11:40:02 +00:00
"github.com/filecoin-project/lotus/api"
2020-08-30 18:28:58 +00:00
sectorstorage "github.com/filecoin-project/lotus/extern/sector-storage"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
2020-09-07 14:12:46 +00:00
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
2020-03-11 21:23:16 +00:00
)
2020-03-11 01:57:52 +00:00
2020-03-24 23:37:40 +00:00
type worker struct {
*sectorstorage.LocalWorker
2020-08-30 18:28:58 +00:00
localStore *stores.Local
ls stores.LocalStorage
disabled int64
2020-03-11 01:57:52 +00:00
}
func (w *worker) Version(context.Context) (api.Version, error) {
return api.WorkerAPIVersion, nil
2020-03-13 01:37:38 +00:00
}
2020-08-30 18:28:58 +00:00
func (w *worker) StorageAddLocal(ctx context.Context, path string) error {
path, err := homedir.Expand(path)
if err != nil {
return xerrors.Errorf("expanding local path: %w", err)
}
if err := w.localStore.OpenPath(ctx, path); err != nil {
return xerrors.Errorf("opening local path: %w", err)
}
if err := w.ls.SetStorage(func(sc *stores.StorageConfig) {
sc.StoragePaths = append(sc.StoragePaths, stores.LocalPath{Path: path})
}); err != nil {
return xerrors.Errorf("get storage config: %w", err)
}
return nil
}
func (w *worker) SetEnabled(ctx context.Context, enabled bool) error {
disabled := int64(1)
if enabled {
disabled = 0
}
atomic.StoreInt64(&w.disabled, disabled)
return nil
}
func (w *worker) Enabled(ctx context.Context) (bool, error) {
return atomic.LoadInt64(&w.disabled) == 0, nil
}
func (w *worker) WaitQuiet(ctx context.Context) error {
w.LocalWorker.WaitQuiet() // uses WaitGroup under the hood so no ctx :/
return nil
}
func (w *worker) ProcessSession(ctx context.Context) (uuid.UUID, error) {
return w.LocalWorker.Session(ctx)
}
func (w *worker) Session(ctx context.Context) (uuid.UUID, error) {
if atomic.LoadInt64(&w.disabled) == 1 {
return uuid.UUID{}, xerrors.Errorf("worker disabled")
}
return w.LocalWorker.Session(ctx)
}
2020-09-07 14:12:46 +00:00
var _ storiface.WorkerCalls = &worker{}