From beade71aa6051cbbeda949737a168ef521bb4923 Mon Sep 17 00:00:00 2001 From: Niko Storni Date: Tue, 3 Nov 2020 02:14:01 +0100 Subject: [PATCH] fix bugs --- manager/manager.go | 6 ++++-- manager/setup.go | 12 +++++++++++- manager/ytsync.go | 17 ++++++++++++----- ytapi/ytapi_test.go | 3 ++- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/manager/manager.go b/manager/manager.go index 9abe824..47fa5c7 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -55,6 +55,7 @@ func (s *SyncManager) Start() error { } var lastChannelProcessed string + var secondLastChannelProcessed string syncCount := 0 for { s.channelsToSync = make([]Sync, 0, 10) // reset sync queue @@ -108,12 +109,13 @@ func (s *SyncManager) Start() error { time.Sleep(5 * time.Minute) } for _, sync := range s.channelsToSync { - if lastChannelProcessed == sync.DbChannelData.ChannelId { + if lastChannelProcessed == sync.DbChannelData.ChannelId && secondLastChannelProcessed == lastChannelProcessed { util.SendToSlack("We just killed a sync for %s to stop looping! (%s)", sync.DbChannelData.DesiredChannelName, sync.DbChannelData.ChannelId) - stopTheLoops := errors.Err("Found channel %s running twice, set it to failed, and reprocess later", sync.DbChannelData.DesiredChannelName) + stopTheLoops := errors.Err("Found channel %s running 3 times, set it to failed, and reprocess later", sync.DbChannelData.DesiredChannelName) sync.setChannelTerminationStatus(&stopTheLoops) continue } + secondLastChannelProcessed = lastChannelProcessed lastChannelProcessed = sync.DbChannelData.ChannelId shouldNotCount := false logUtils.SendInfoToSlack("Syncing %s (%s) to LBRY! total processed channels since startup: %d", sync.DbChannelData.DesiredChannelName, sync.DbChannelData.ChannelId, syncCount+1) diff --git a/manager/setup.go b/manager/setup.go index e2a809e..1f8c22e 100644 --- a/manager/setup.go +++ b/manager/setup.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "strconv" + "strings" "time" "github.com/lbryio/lbry.go/v2/extras/errors" @@ -382,7 +383,16 @@ func (s *Sync) ensureChannelOwnership() error { channelInfo, err := ytapi.ChannelInfo(s.DbChannelData.ChannelId) if err != nil { - return err + if strings.Contains(err.Error(), "invalid character 'e' looking for beginning of value") { + logUtils.SendInfoToSlack("failed to get channel data for %s. Waiting 1 minute to retry", s.DbChannelData.ChannelId) + time.Sleep(1 * time.Minute) + channelInfo, err = ytapi.ChannelInfo(s.DbChannelData.ChannelId) + if err != nil { + return err + } + } else { + return err + } } thumbnail := channelInfo.Header.C4TabbedHeaderRenderer.Avatar.Thumbnails[len(channelInfo.Header.C4TabbedHeaderRenderer.Avatar.Thumbnails)-1].URL diff --git a/manager/ytsync.go b/manager/ytsync.go index b8999bb..daf472d 100644 --- a/manager/ytsync.go +++ b/manager/ytsync.go @@ -262,11 +262,18 @@ func (s *Sync) setChannelTerminationStatus(e *error) { "interrupted by user", "use --skip-space-check to ignore", } + dbWipeConditions := []string{ + "Missing inputs", + } if util.SubstringInSlice((*e).Error(), noFailConditions) { return } + channelStatus := shared.StatusFailed + if util.SubstringInSlice((*e).Error(), dbWipeConditions) { + channelStatus = shared.StatusWipeDb + } failureReason := (*e).Error() - _, _, err := s.Manager.ApiConfig.SetChannelStatus(s.DbChannelData.ChannelId, shared.StatusFailed, failureReason, transferState) + _, _, err := s.Manager.ApiConfig.SetChannelStatus(s.DbChannelData.ChannelId, channelStatus, failureReason, transferState) if err != nil { msg := fmt.Sprintf("Failed setting failed state for channel %s", s.DbChannelData.DesiredChannelName) *e = errors.Prefix(msg+err.Error(), *e) @@ -395,15 +402,14 @@ func (s *Sync) fixDupes(claims []jsonrpc.Claim) (bool, error) { } if claimToAbandon.Address != s.DbChannelData.PublishAddress && !s.syncedVideos[videoID].Transferred { log.Debugf("abandoning %+v", claimToAbandon) - _, err := s.daemon.StreamAbandon(claimToAbandon.Txid, claimToAbandon.Nout, nil, false) + _, err := s.daemon.StreamAbandon(claimToAbandon.Txid, claimToAbandon.Nout, nil, true) if err != nil { return true, err } + abandonedClaims = true } else { log.Debugf("lbrynet stream abandon --txid=%s --nout=%d", claimToAbandon.Txid, claimToAbandon.Nout) } - abandonedClaims = true - //return true, nil } return abandonedClaims, nil } @@ -757,6 +763,7 @@ func (s *Sync) startWorker(workerNum int) { "more than 90% of the space has been used.", "Couldn't find private key for id", "You already have a stream claim published under the name", + "Missing inputs", } if util.SubstringInSlice(err.Error(), fatalErrors) || s.Manager.CliFlags.StopOnError { s.grp.Stop() @@ -806,7 +813,7 @@ func (s *Sync) startWorker(workerNum int) { "Not enough funds to cover this transaction", "failed: Not enough funds", "Error in daemon: Insufficient funds, please deposit additional LBC", - "Missing inputs", + //"Missing inputs", }) { log.Println("checking funds and UTXOs before retrying...") err := s.walletSetup() diff --git a/ytapi/ytapi_test.go b/ytapi/ytapi_test.go index 93a612c..68ea26e 100644 --- a/ytapi/ytapi_test.go +++ b/ytapi/ytapi_test.go @@ -7,6 +7,7 @@ import ( ) func TestChannelInfo(t *testing.T) { - _, _, err := ChannelInfo("", "UCNQfQvFMPnInwsU_iGYArJQ") + info, err := ChannelInfo("UCNQfQvFMPnInwsU_iGYArJQ") assert.NoError(t, err) + assert.NotNil(t, info) }