From 38863d30256968bbb7a8c3ee4ca3fcc7a410bb2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 8 Sep 2020 20:54:37 +0200 Subject: [PATCH] build: Separate API versions per node type --- api/docgen/docgen.go | 2 +- api/test/test.go | 2 ++ build/version.go | 39 ++++++++++++++++++++++++++++++--- cmd/lotus-seal-worker/main.go | 6 +++-- cmd/lotus-seal-worker/rpc.go | 2 +- cmd/lotus-storage-miner/init.go | 4 ++-- cmd/lotus-storage-miner/main.go | 2 ++ cmd/lotus-storage-miner/run.go | 4 ++-- cmd/lotus/main.go | 2 ++ node/impl/common/common.go | 7 +++++- 10 files changed, 58 insertions(+), 12 deletions(-) diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index ea3e66e1e..d00643a02 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -105,7 +105,7 @@ func init() { addExample(network.Connected) addExample(dtypes.NetworkName("lotus")) addExample(api.SyncStateStage(1)) - addExample(build.APIVersion) + addExample(build.FullAPIVersion) addExample(api.PCHInbound) addExample(time.Minute) addExample(datatransfer.TransferID(3)) diff --git a/api/test/test.go b/api/test/test.go index 98a9a2e48..409274ff1 100644 --- a/api/test/test.go +++ b/api/test/test.go @@ -65,6 +65,8 @@ func TestApis(t *testing.T, b APIBuilder) { var OneMiner = []StorageMiner{{Full: 0, Preseal: PresealGenesis}} func (ts *testSuite) testVersion(t *testing.T) { + build.RunningNodeType = build.NodeFull + ctx := context.Background() apis, _ := ts.makeNodes(t, 1, OneMiner) api := apis[0] diff --git a/build/version.go b/build/version.go index adaade907..54a3af007 100644 --- a/build/version.go +++ b/build/version.go @@ -1,6 +1,10 @@ package build -import "fmt" +import ( + "fmt" + + "golang.org/x/xerrors" +) var CurrentCommit string var BuildType int @@ -52,8 +56,37 @@ func (ve Version) EqMajorMinor(v2 Version) bool { return ve&minorMask == v2&minorMask } -// APIVersion is a semver version of the rpc api exposed -var APIVersion Version = newVer(0, 14, 0) +type NodeType int + +const ( + NodeUnknown NodeType = iota + + NodeFull + NodeMiner + NodeWorker +) + +var RunningNodeType NodeType + +func VersionForType(nodeType NodeType) (Version, error) { + switch nodeType { + case NodeFull: + return FullAPIVersion, nil + case NodeMiner: + return MinerAPIVersion, nil + case NodeWorker: + return WorkerAPIVersion, nil + default: + return Version(0), xerrors.Errorf("unknown node type %d", nodeType) + } +} + +// semver versions of the rpc api exposed +var ( + FullAPIVersion = newVer(0, 14, 0) + MinerAPIVersion = newVer(0, 14, 0) + WorkerAPIVersion = newVer(0, 14, 0) +) //nolint:varcheck,deadcode const ( diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index e6361d3cf..e36514bb8 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -45,6 +45,8 @@ const FlagWorkerRepo = "worker-repo" const FlagWorkerRepoDeprecation = "workerrepo" func main() { + build.RunningNodeType = build.NodeWorker + lotuslog.SetupLogLevels() local := []*cli.Command{ @@ -187,8 +189,8 @@ var runCmd = &cli.Command{ if err != nil { return err } - if v.APIVersion != build.APIVersion { - return xerrors.Errorf("lotus-miner API version doesn't match: local: %s", api.Version{APIVersion: build.APIVersion}) + if v.APIVersion != build.MinerAPIVersion { + return xerrors.Errorf("lotus-miner API version doesn't match: expected: %s", api.Version{APIVersion: build.MinerAPIVersion}) } log.Infof("Remote version %s", v) diff --git a/cmd/lotus-seal-worker/rpc.go b/cmd/lotus-seal-worker/rpc.go index 5380fe432..8aa9093c2 100644 --- a/cmd/lotus-seal-worker/rpc.go +++ b/cmd/lotus-seal-worker/rpc.go @@ -21,7 +21,7 @@ type worker struct { } func (w *worker) Version(context.Context) (build.Version, error) { - return build.APIVersion, nil + return build.WorkerAPIVersion, nil } func (w *worker) StorageAddLocal(ctx context.Context, path string) error { diff --git a/cmd/lotus-storage-miner/init.go b/cmd/lotus-storage-miner/init.go index 9fbdcb8d4..ba9460dab 100644 --- a/cmd/lotus-storage-miner/init.go +++ b/cmd/lotus-storage-miner/init.go @@ -179,8 +179,8 @@ var initCmd = &cli.Command{ return err } - if !v.APIVersion.EqMajorMinor(build.APIVersion) { - return xerrors.Errorf("Remote API version didn't match (local %s, remote %s)", build.APIVersion, v.APIVersion) + if !v.APIVersion.EqMajorMinor(build.FullAPIVersion) { + return xerrors.Errorf("Remote API version didn't match (expected %s, remote %s)", build.FullAPIVersion, v.APIVersion) } log.Info("Initializing repo") diff --git a/cmd/lotus-storage-miner/main.go b/cmd/lotus-storage-miner/main.go index cc704f891..cee64f077 100644 --- a/cmd/lotus-storage-miner/main.go +++ b/cmd/lotus-storage-miner/main.go @@ -26,6 +26,8 @@ const FlagMinerRepo = "miner-repo" const FlagMinerRepoDeprecation = "storagerepo" func main() { + build.RunningNodeType = build.NodeMiner + lotuslog.SetupLogLevels() local := []*cli.Command{ diff --git a/cmd/lotus-storage-miner/run.go b/cmd/lotus-storage-miner/run.go index 7c88b74c4..83d78172e 100644 --- a/cmd/lotus-storage-miner/run.go +++ b/cmd/lotus-storage-miner/run.go @@ -77,8 +77,8 @@ var runCmd = &cli.Command{ } } - if v.APIVersion != build.APIVersion { - return xerrors.Errorf("lotus-daemon API version doesn't match: local: %s", api.Version{APIVersion: build.APIVersion}) + if v.APIVersion != build.FullAPIVersion { + return xerrors.Errorf("lotus-daemon API version doesn't match: expected: %s", api.Version{APIVersion: build.FullAPIVersion}) } log.Info("Checking full node sync status") diff --git a/cmd/lotus/main.go b/cmd/lotus/main.go index 1e2c7faec..ee95ad64b 100644 --- a/cmd/lotus/main.go +++ b/cmd/lotus/main.go @@ -16,6 +16,8 @@ import ( var AdvanceBlockCmd *cli.Command func main() { + build.RunningNodeType = build.NodeFull + lotuslog.SetupLogLevels() local := []*cli.Command{ diff --git a/node/impl/common/common.go b/node/impl/common/common.go index 6a69b2a7a..b07c18305 100644 --- a/node/impl/common/common.go +++ b/node/impl/common/common.go @@ -170,9 +170,14 @@ func (a *CommonAPI) ID(context.Context) (peer.ID, error) { } func (a *CommonAPI) Version(context.Context) (api.Version, error) { + v, err := build.VersionForType(build.RunningNodeType) + if err != nil { + return api.Version{}, err + } + return api.Version{ Version: build.UserVersion(), - APIVersion: build.APIVersion, + APIVersion: v, BlockDelay: build.BlockDelaySecs, }, nil