grin
This commit is contained in:
parent
291a105269
commit
8b32381b23
4 changed files with 65 additions and 66 deletions
3
go.mod
3
go.mod
|
@ -13,7 +13,6 @@ require (
|
|||
github.com/docker/go-units v0.4.0 // indirect
|
||||
github.com/go-sql-driver/mysql v1.4.1 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20191002201903-404acd9df4cc // indirect
|
||||
github.com/google/btree v1.0.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.1.0 // indirect
|
||||
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.3 // indirect
|
||||
|
@ -34,3 +33,5 @@ require (
|
|||
google.golang.org/api v0.11.0
|
||||
google.golang.org/appengine v1.6.5 // indirect
|
||||
)
|
||||
|
||||
go 1.13
|
||||
|
|
|
@ -6,6 +6,8 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/uber-go/atomic"
|
||||
|
||||
"github.com/lbryio/lbry.go/v2/extras/errors"
|
||||
"github.com/lbryio/lbry.go/v2/extras/jsonrpc"
|
||||
"github.com/lbryio/lbry.go/v2/extras/stop"
|
||||
|
@ -45,13 +47,13 @@ waiting:
|
|||
return nil
|
||||
}
|
||||
|
||||
func abandonSupports(s *Sync) (float64, error) {
|
||||
type abandonResponse struct {
|
||||
ClaimID string
|
||||
Error error
|
||||
Amount float64
|
||||
}
|
||||
|
||||
func abandonSupports(s *Sync) (float64, error) {
|
||||
totalPages := uint64(1)
|
||||
var allSupports []jsonrpc.Claim
|
||||
defaultAccount, err := s.getDefaultAccount()
|
||||
|
@ -66,23 +68,25 @@ func abandonSupports(s *Sync) (float64, error) {
|
|||
allSupports = append(allSupports, (*supports).Items...)
|
||||
totalPages = (*supports).TotalPages
|
||||
}
|
||||
producerWG := &stop.Group{}
|
||||
|
||||
claimIDChan := make(chan string, len(allSupports))
|
||||
abandonRspChan := make(chan abandonResponse, len(allSupports))
|
||||
claimIDChan := make(chan string)
|
||||
abandonRspChan := make(chan abandonResponse)
|
||||
collectorChan := make(chan bool)
|
||||
|
||||
alreadyAbandoned := make(map[string]bool, len(allSupports))
|
||||
producerWG.Add(1)
|
||||
totalAbandoned := atomic.NewFloat64(0)
|
||||
|
||||
go func() {
|
||||
defer producerWG.Done()
|
||||
for _, support := range allSupports {
|
||||
_, ok := alreadyAbandoned[support.ClaimID]
|
||||
if ok {
|
||||
for r := range abandonRspChan {
|
||||
if r.Error != nil {
|
||||
log.Errorf("Failed abandoning supports for %s: %s", r.ClaimID, r.Error.Error())
|
||||
continue
|
||||
}
|
||||
alreadyAbandoned[support.ClaimID] = true
|
||||
claimIDChan <- support.ClaimID
|
||||
totalAbandoned.Add(r.Amount)
|
||||
}
|
||||
close(collectorChan)
|
||||
}()
|
||||
|
||||
consumerWG := &stop.Group{}
|
||||
//TODO: remove this once the SDK team fixes their RPC bugs....
|
||||
s.daemon.SetRPCTimeout(30 * time.Second)
|
||||
|
@ -95,7 +99,8 @@ func abandonSupports(s *Sync) (float64, error) {
|
|||
claimID, more := <-claimIDChan
|
||||
if !more {
|
||||
return
|
||||
} else {
|
||||
}
|
||||
|
||||
summary, err := s.daemon.SupportAbandon(&claimID, nil, nil, nil, nil)
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "Client.Timeout exceeded while awaiting headers") {
|
||||
|
@ -111,56 +116,47 @@ func abandonSupports(s *Sync) (float64, error) {
|
|||
continue
|
||||
}
|
||||
} else {
|
||||
abandonRspChan <- abandonResponse{
|
||||
ClaimID: claimID,
|
||||
Error: err,
|
||||
Amount: 0,
|
||||
}
|
||||
abandonRspChan <- abandonResponse{ClaimID: claimID, Error: err}
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if len(summary.Outputs) < 1 {
|
||||
abandonRspChan <- abandonResponse{
|
||||
ClaimID: claimID,
|
||||
Error: errors.Err("error abandoning supports: no outputs while abandoning %s", claimID),
|
||||
Amount: 0,
|
||||
Error: errors.Err("abandoning supports: no outputs for %s", claimID),
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
outputAmount, err := strconv.ParseFloat(summary.Outputs[0].Amount, 64)
|
||||
if err != nil {
|
||||
abandonRspChan <- abandonResponse{
|
||||
ClaimID: claimID,
|
||||
Error: errors.Err(err),
|
||||
Amount: 0,
|
||||
}
|
||||
abandonRspChan <- abandonResponse{ClaimID: claimID, Error: errors.Err(err)}
|
||||
continue
|
||||
}
|
||||
|
||||
log.Infof("Abandoned supports of %.4f LBC for claim %s", outputAmount, claimID)
|
||||
abandonRspChan <- abandonResponse{
|
||||
ClaimID: claimID,
|
||||
Error: nil,
|
||||
Amount: outputAmount,
|
||||
}
|
||||
abandonRspChan <- abandonResponse{ClaimID: claimID, Amount: outputAmount}
|
||||
continue
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
producerWG.Wait()
|
||||
close(claimIDChan)
|
||||
consumerWG.Wait()
|
||||
close(abandonRspChan)
|
||||
|
||||
totalAbandoned := 0.0
|
||||
for r := range abandonRspChan {
|
||||
if r.Error != nil {
|
||||
log.Errorf("Failed abandoning supports for %s: %s", r.ClaimID, r.Error.Error())
|
||||
for _, support := range allSupports {
|
||||
_, ok := alreadyAbandoned[support.ClaimID]
|
||||
if ok {
|
||||
continue
|
||||
}
|
||||
totalAbandoned += r.Amount
|
||||
alreadyAbandoned[support.ClaimID] = true
|
||||
claimIDChan <- support.ClaimID
|
||||
}
|
||||
return totalAbandoned, nil
|
||||
close(claimIDChan)
|
||||
|
||||
consumerWG.Wait()
|
||||
close(abandonRspChan)
|
||||
<-collectorChan
|
||||
|
||||
return totalAbandoned.Load(), nil
|
||||
}
|
||||
|
||||
type updateInfo struct {
|
||||
|
|
|
@ -824,9 +824,9 @@ func (s *Sync) startWorker(workerNum int) {
|
|||
err := s.processVideo(v)
|
||||
|
||||
if err != nil {
|
||||
logMsg := fmt.Sprintf("error processing video %s: %s", v.ID(), err.Error())
|
||||
logMsg := fmt.Sprintf("error processing video %s: %s", v.ID(), errors.FullTrace(err))
|
||||
log.Errorln(logMsg)
|
||||
if strings.Contains(strings.ToLower(err.Error()), "interrupted by user") {
|
||||
if errors.Is(err, sources.ErrInterruptedByUser) {
|
||||
return
|
||||
}
|
||||
fatalErrors := []string{
|
||||
|
|
|
@ -31,6 +31,8 @@ import (
|
|||
"google.golang.org/api/youtube/v3"
|
||||
)
|
||||
|
||||
var ErrInterruptedByUser = errors.Base("interrupted by user")
|
||||
|
||||
type YoutubeVideo struct {
|
||||
id string
|
||||
title string
|
||||
|
@ -226,7 +228,7 @@ func (v *YoutubeVideo) download(useIPv6 bool) error {
|
|||
for {
|
||||
select {
|
||||
case <-v.stopGroup.Ch():
|
||||
return errors.Err("interrupted by user")
|
||||
return errors.Err(ErrInterruptedByUser)
|
||||
default:
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue