From 3bc48d53db26ea6c3628dad0b1a476b9118a73d7 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Thu, 3 Jun 2021 05:30:39 +0200 Subject: [PATCH 1/8] Update main.go For debugging purposes only --- code/go/0chain.net/blobber/main.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/go/0chain.net/blobber/main.go b/code/go/0chain.net/blobber/main.go index dba5ba2c7..dd44bc5c8 100644 --- a/code/go/0chain.net/blobber/main.go +++ b/code/go/0chain.net/blobber/main.go @@ -406,6 +406,8 @@ func RegisterBlobber() { go UpdateBlobberSettings() } return + } else { + Logger.Error("Failed attempt. Add blobber transaction could not be verified", zap.Any("err", err), zap.String("txn.Hash", txnHash)) } verifyRetries++ } From 0693909e912dc939ac5e90f7864e4510e934b397 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Thu, 3 Jun 2021 10:50:16 +0200 Subject: [PATCH 2/8] Update protocol.go --- .../blobbercore/handler/protocol.go | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index 3e0096fc5..c478ffc5d 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -57,21 +57,6 @@ func (ar *apiResp) err() error { //nolint:unused,deadcode // might be used later } func RegisterBlobber(ctx context.Context) (string, error) { - wcb := &WalletCallback{} - wcb.wg = &sync.WaitGroup{} - wcb.wg.Add(1) - err := zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) - if err != nil { - return "", err - } - - time.Sleep(transaction.SLEEP_FOR_TXN_CONFIRMATION * time.Second) - - // initialize storage node (ie blobber) - txn, err := transaction.NewTransactionEntity() - if err != nil { - return "", err - } sn, err := getStorageNode() if err != nil { return "", err @@ -89,6 +74,22 @@ func RegisterBlobber(ctx context.Context) (string, error) { } } + wcb := &WalletCallback{} + wcb.wg = &sync.WaitGroup{} + wcb.wg.Add(1) + err := zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) + if err != nil { + return "", err + } + + time.Sleep(transaction.SLEEP_FOR_TXN_CONFIRMATION * time.Second) + + // initialize storage node (ie blobber) + txn, err := transaction.NewTransactionEntity() + if err != nil { + return "", err + } + snBytes, err := json.Marshal(sn) if err != nil { return "", err From 60c4a94d2c71362ed086ab0b81c17c1043b7c7b2 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Thu, 3 Jun 2021 10:59:29 +0200 Subject: [PATCH 3/8] Update protocol.go --- code/go/0chain.net/blobbercore/handler/protocol.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index c478ffc5d..ac7b39e0c 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -77,7 +77,7 @@ func RegisterBlobber(ctx context.Context) (string, error) { wcb := &WalletCallback{} wcb.wg = &sync.WaitGroup{} wcb.wg.Add(1) - err := zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) + err = zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) if err != nil { return "", err } From 6168fa3221632bacd597ee4907d603461029ff40 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Thu, 3 Jun 2021 12:00:18 +0200 Subject: [PATCH 4/8] Update protocol.go --- .../blobbercore/handler/protocol.go | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index ac7b39e0c..6c7d91dbf 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -57,27 +57,10 @@ func (ar *apiResp) err() error { //nolint:unused,deadcode // might be used later } func RegisterBlobber(ctx context.Context) (string, error) { - sn, err := getStorageNode() - if err != nil { - return "", err - } - - // check storage node (ie blobber): is it already registered? - sRegisteredNodes, _ := GetBlobbers() - - for _, sRegisteredNode := range sRegisteredNodes { - if sn.ID == string(sRegisteredNode.ID) || sn.BaseURL == sRegisteredNode.BaseURL { - Logger.Info("Warning: blobber already registered to the mining network. Updating blobber settings.") - // should return valid transcation hash, not an error - // (see: "restarted blobbers" case) - return UpdateBlobberSettings(ctx) - } - } - wcb := &WalletCallback{} wcb.wg = &sync.WaitGroup{} wcb.wg.Add(1) - err = zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) + err := zcncore.RegisterToMiners(node.Self.GetWallet(), wcb) if err != nil { return "", err } @@ -90,6 +73,22 @@ func RegisterBlobber(ctx context.Context) (string, error) { return "", err } + sn, err := getStorageNode() + if err != nil { + return "", err + } + + // check storage node (ie blobber): is it already registered? + sRegisteredNodes, _ := GetBlobbers() + + for _, sRegisteredNode := range sRegisteredNodes { + if sn.ID == string(sRegisteredNode.ID) || sn.BaseURL == sRegisteredNode.BaseURL { + // experimental + // todo: return specific error to be checked, for example, handler.DuplicateBlobber + return "", nil + } + } + snBytes, err := json.Marshal(sn) if err != nil { return "", err From e1f1c498136995a4049264f541389b356a3a6e37 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Thu, 3 Jun 2021 12:06:53 +0200 Subject: [PATCH 5/8] Update main.go --- code/go/0chain.net/blobber/main.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/code/go/0chain.net/blobber/main.go b/code/go/0chain.net/blobber/main.go index dd44bc5c8..12924845a 100644 --- a/code/go/0chain.net/blobber/main.go +++ b/code/go/0chain.net/blobber/main.go @@ -390,6 +390,20 @@ func RegisterBlobber() { //ctx := badgerdbstore.GetStorageProvider().WithConnection(common.GetRootContext()) for registrationRetries < 10 { txnHash, err := handler.RegisterBlobber(common.GetRootContext()) + // experimental + // todo: replace with specific error check + if txnHash == "" && err == nil { + Logger.Info("Warning: blobber already registered to the mining network.") + // temporal + // todo: move to nested func + SetupWorkers() + go BlobberHealthCheck() + if config.Configuration.PriceInUSD { + go UpdateBlobberSettings() + } + return + } + time.Sleep(transaction.SLEEP_FOR_TXN_CONFIRMATION * time.Second) txnVerified := false verifyRetries := 0 @@ -406,8 +420,6 @@ func RegisterBlobber() { go UpdateBlobberSettings() } return - } else { - Logger.Error("Failed attempt. Add blobber transaction could not be verified", zap.Any("err", err), zap.String("txn.Hash", txnHash)) } verifyRetries++ } From 2ba721a5c14ffc4cfbeb085571abdadf81fb3b14 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Fri, 4 Jun 2021 14:50:20 +0200 Subject: [PATCH 6/8] Update main.go --- code/go/0chain.net/blobber/main.go | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/code/go/0chain.net/blobber/main.go b/code/go/0chain.net/blobber/main.go index 12924845a..c3a6163f2 100644 --- a/code/go/0chain.net/blobber/main.go +++ b/code/go/0chain.net/blobber/main.go @@ -385,22 +385,23 @@ func main() { } func RegisterBlobber() { + setup := func() { + // badgerdbstore.GetStorageProvider().WriteBytes(ctx, BLOBBER_REGISTERED_LOOKUP_KEY, []byte(txnHash)) + // badgerdbstore.GetStorageProvider().Commit(ctx) + SetupWorkers() + go BlobberHealthCheck() + if config.Configuration.PriceInUSD { + go UpdateBlobberSettings() + } + } registrationRetries := 0 - //ctx := badgerdbstore.GetStorageProvider().WithConnection(common.GetRootContext()) + // ctx := badgerdbstore.GetStorageProvider().WithConnection(common.GetRootContext()) for registrationRetries < 10 { txnHash, err := handler.RegisterBlobber(common.GetRootContext()) - // experimental - // todo: replace with specific error check - if txnHash == "" && err == nil { - Logger.Info("Warning: blobber already registered to the mining network.") - // temporal - // todo: move to nested func - SetupWorkers() - go BlobberHealthCheck() - if config.Configuration.PriceInUSD { - go UpdateBlobberSettings() - } + if err == handler.ErrBlobberHasRegistered { + Logger.Debug("Blobber already registered to the mining network") + setup() return } @@ -412,13 +413,7 @@ func RegisterBlobber() { t, err := transaction.VerifyTransaction(txnHash, chain.GetServerChain()) if err == nil { Logger.Info("Transaction for adding blobber accepted and verified", zap.String("txn_hash", t.Hash), zap.Any("txn_output", t.TransactionOutput)) - //badgerdbstore.GetStorageProvider().WriteBytes(ctx, BLOBBER_REGISTERED_LOOKUP_KEY, []byte(txnHash)) - //badgerdbstore.GetStorageProvider().Commit(ctx) - SetupWorkers() - go BlobberHealthCheck() - if config.Configuration.PriceInUSD { - go UpdateBlobberSettings() - } + setup() return } verifyRetries++ From 32d7721c98a9b44525c348aa49e6217bb559a8cf Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Fri, 4 Jun 2021 14:58:43 +0200 Subject: [PATCH 7/8] Update protocol.go --- code/go/0chain.net/blobbercore/handler/protocol.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index 6c7d91dbf..6d3d66c3f 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -112,6 +112,11 @@ func RegisterBlobber(ctx context.Context) (string, error) { // transactions. var ErrBlobberHasRemoved = errors.New("blobber has removed") +// ErrBlobberHasRegistered represents double registration check error, where the +// blobber has already registered and shouldn't be passed through the registration flow again. +// To prevent duplicate instances. +var ErrBlobberHasRegistered = errors.New("blobber has registered") + func BlobberHealthCheck(ctx context.Context) (string, error) { if config.Configuration.Capacity == 0 { return "", ErrBlobberHasRemoved From c8ce56e651d70139e4830bb0744459c2a90afb76 Mon Sep 17 00:00:00 2001 From: Andrei Vasin <3892914+andrenerd@users.noreply.github.com> Date: Fri, 4 Jun 2021 15:00:55 +0200 Subject: [PATCH 8/8] Update protocol.go --- code/go/0chain.net/blobbercore/handler/protocol.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index 6d3d66c3f..2f4653295 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -56,6 +56,11 @@ func (ar *apiResp) err() error { //nolint:unused,deadcode // might be used later return nil } +// ErrBlobberHasRegistered represents double registration check error, where the +// blobber has already registered and shouldn't be passed through the registration flow again. +// To prevent duplicate instances. +var ErrBlobberHasRegistered = errors.New("blobber has registered") + func RegisterBlobber(ctx context.Context) (string, error) { wcb := &WalletCallback{} wcb.wg = &sync.WaitGroup{} @@ -83,9 +88,7 @@ func RegisterBlobber(ctx context.Context) (string, error) { for _, sRegisteredNode := range sRegisteredNodes { if sn.ID == string(sRegisteredNode.ID) || sn.BaseURL == sRegisteredNode.BaseURL { - // experimental - // todo: return specific error to be checked, for example, handler.DuplicateBlobber - return "", nil + return "", ErrBlobberHasRegistered } } @@ -112,11 +115,6 @@ func RegisterBlobber(ctx context.Context) (string, error) { // transactions. var ErrBlobberHasRemoved = errors.New("blobber has removed") -// ErrBlobberHasRegistered represents double registration check error, where the -// blobber has already registered and shouldn't be passed through the registration flow again. -// To prevent duplicate instances. -var ErrBlobberHasRegistered = errors.New("blobber has registered") - func BlobberHealthCheck(ctx context.Context) (string, error) { if config.Configuration.Capacity == 0 { return "", ErrBlobberHasRemoved