add function to wait for a new block
bad bug fixes remove half broken code used to wait for UTXOs use channel IDs rather than names (skip lbryum) port changes to UCB uploader
This commit is contained in:
parent
9cfda0df64
commit
3a51ea9b76
5 changed files with 50 additions and 61 deletions
|
@ -122,9 +122,6 @@ func (s SyncManager) setChannelStatus(channelID string, status string) (map[stri
|
|||
return nil, errors.Err(response.Error.String)
|
||||
}
|
||||
if response.Data != nil {
|
||||
if len(response.Data) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
svs := make(map[string]syncedVideo)
|
||||
for _, v := range response.Data {
|
||||
svs[v.VideoID] = v
|
||||
|
@ -256,7 +253,7 @@ func (s SyncManager) Start() error {
|
|||
time.Sleep(5 * time.Minute)
|
||||
}
|
||||
for i, sync := range syncs {
|
||||
SendInfoToSlack("Syncing %s to LBRY! (iteration %d/%d - total session iterations: %d)", sync.LbryChannelName, i+1, len(syncs), syncCount)
|
||||
SendInfoToSlack("Syncing %s (%s) to LBRY! (iteration %d/%d - total session iterations: %d)", sync.LbryChannelName, sync.YoutubeChannelID, i+1, len(syncs), syncCount)
|
||||
err := sync.FullCycle()
|
||||
if err != nil {
|
||||
fatalErrors := []string{
|
||||
|
@ -270,7 +267,7 @@ func (s SyncManager) Start() error {
|
|||
}
|
||||
SendInfoToSlack("A non fatal error was reported by the sync process. %s\nContinuing...", err.Error())
|
||||
}
|
||||
SendInfoToSlack("Syncing %s reached an end. (Iteration %d/%d - total session iterations: %d))", sync.LbryChannelName, i+1, len(syncs), syncCount)
|
||||
SendInfoToSlack("Syncing %s (%s) reached an end. (Iteration %d/%d - total session iterations: %d))", sync.LbryChannelName, sync.YoutubeChannelID, i+1, len(syncs), syncCount)
|
||||
syncCount++
|
||||
if sync.IsInterrupted() || (s.Limit != 0 && syncCount >= s.Limit) {
|
||||
shouldInterruptLoop = true
|
||||
|
|
|
@ -99,7 +99,6 @@ func (s *Sync) walletSetup() error {
|
|||
}
|
||||
|
||||
func (s *Sync) ensureEnoughUTXOs() error {
|
||||
|
||||
utxolist, err := s.daemon.UTXOList()
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -137,18 +136,13 @@ func (s *Sync) ensureEnoughUTXOs() error {
|
|||
return errors.Err("no response")
|
||||
}
|
||||
|
||||
wait := 15 * time.Second
|
||||
log.Println("Waiting " + wait.String() + " for lbryum to let us know we have the new addresses")
|
||||
time.Sleep(wait)
|
||||
|
||||
log.Println("Creating UTXOs and waiting for them to be confirmed")
|
||||
err = s.waitUntilUTXOsConfirmed()
|
||||
err = s.waitForNewBlock()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if !allUTXOsConfirmed(utxolist) {
|
||||
log.Println("Waiting for previous txns to confirm")
|
||||
err := s.waitUntilUTXOsConfirmed()
|
||||
err := s.waitForNewBlock()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -157,28 +151,31 @@ func (s *Sync) ensureEnoughUTXOs() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *Sync) waitUntilUTXOsConfirmed() error {
|
||||
origin := time.Now()
|
||||
for {
|
||||
r, err := s.daemon.UTXOList()
|
||||
func (s *Sync) waitForNewBlock() error {
|
||||
status, err := s.daemon.Status()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for status.BlockchainStatus.Blocks == 0 || status.BlockchainStatus.BlocksBehind != 0 {
|
||||
time.Sleep(5 * time.Second)
|
||||
status, err = s.daemon.Status()
|
||||
if err != nil {
|
||||
return err
|
||||
} else if r == nil {
|
||||
return errors.Err("no response")
|
||||
}
|
||||
|
||||
if allUTXOsConfirmed(r) {
|
||||
return nil
|
||||
}
|
||||
if time.Now().After(origin.Add(15 * time.Minute)) {
|
||||
//lbryum is messing with us or something. restart the daemon
|
||||
//this could also be a very long block
|
||||
SendErrorToSlack("We've been waiting UTXOs confirmation for %s... and this isn't normal", time.Now().Sub(origin).String())
|
||||
}
|
||||
wait := 30 * time.Second
|
||||
log.Println("Waiting " + wait.String() + "...")
|
||||
time.Sleep(wait)
|
||||
}
|
||||
currentBlock := status.BlockchainStatus.Blocks
|
||||
for i := 0; status.BlockchainStatus.Blocks <= currentBlock; i++ {
|
||||
if i%3 == 0 {
|
||||
log.Printf("Waiting for new block (%d)...", currentBlock+1)
|
||||
}
|
||||
time.Sleep(10 * time.Second)
|
||||
status, err = s.daemon.Status()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Sync) ensureChannelOwnership() error {
|
||||
|
@ -196,6 +193,7 @@ func (s *Sync) ensureChannelOwnership() error {
|
|||
isChannelMine := false
|
||||
for _, channel := range *channels {
|
||||
if channel.Name == s.LbryChannelName {
|
||||
s.lbryChannelID = channel.ClaimID
|
||||
isChannelMine = true
|
||||
} else {
|
||||
return errors.Err("this wallet has multiple channels. maybe something went wrong during setup?")
|
||||
|
@ -234,16 +232,11 @@ func (s *Sync) ensureChannelOwnership() error {
|
|||
s.addCredits(channelBidAmount + 0.1)
|
||||
}
|
||||
|
||||
_, err = s.daemon.ChannelNew(s.LbryChannelName, channelBidAmount)
|
||||
c, err := s.daemon.ChannelNew(s.LbryChannelName, channelBidAmount)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// niko's code says "unfortunately the queues in the daemon are not yet merged so we must give it some time for the channel to go through"
|
||||
wait := 15 * time.Second
|
||||
log.Println("Waiting " + wait.String() + " for channel claim to go through")
|
||||
time.Sleep(wait)
|
||||
|
||||
s.lbryChannelID = c.ClaimID
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -170,25 +170,23 @@ func (v ucbVideo) saveThumbnail() error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (v ucbVideo) publish(daemon *jsonrpc.Client, claimAddress string, amount float64, channelName string) (*SyncSummary, error) {
|
||||
func (v ucbVideo) publish(daemon *jsonrpc.Client, claimAddress string, amount float64, channelID string) (*SyncSummary, error) {
|
||||
options := jsonrpc.PublishOptions{
|
||||
Title: &v.title,
|
||||
Author: strPtr("UC Berkeley"),
|
||||
Description: strPtr(v.getAbbrevDescription()),
|
||||
Language: strPtr("en"),
|
||||
ClaimAddress: &claimAddress,
|
||||
Thumbnail: strPtr("https://berk.ninja/thumbnails/" + v.id),
|
||||
License: strPtr("see description"),
|
||||
}
|
||||
|
||||
if channelName != "" {
|
||||
options.ChannelName = &channelName
|
||||
Title: &v.title,
|
||||
Author: strPtr("UC Berkeley"),
|
||||
Description: strPtr(v.getAbbrevDescription()),
|
||||
Language: strPtr("en"),
|
||||
ClaimAddress: &claimAddress,
|
||||
Thumbnail: strPtr("https://berk.ninja/thumbnails/" + v.id),
|
||||
License: strPtr("see description"),
|
||||
ChannelID: &channelID,
|
||||
ChangeAddress: &claimAddress,
|
||||
}
|
||||
|
||||
return publishAndRetryExistingNames(daemon, v.title, v.getFilename(), amount, options)
|
||||
}
|
||||
|
||||
func (v ucbVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount float64, channelName string, maxVideoSize int) (*SyncSummary, error) {
|
||||
func (v ucbVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount float64, channelID string, maxVideoSize int) (*SyncSummary, error) {
|
||||
//download and thumbnail can be done in parallel
|
||||
err := v.download()
|
||||
if err != nil {
|
||||
|
@ -202,7 +200,7 @@ func (v ucbVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount float
|
|||
//}
|
||||
//log.Debugln("Created thumbnail for " + v.id)
|
||||
|
||||
summary, err := v.publish(daemon, claimAddress, amount, channelName)
|
||||
summary, err := v.publish(daemon, claimAddress, amount, channelID)
|
||||
if err != nil {
|
||||
return nil, errors.Prefix("publish error", err)
|
||||
}
|
||||
|
|
|
@ -185,7 +185,10 @@ func (v YoutubeVideo) triggerThumbnailSave() error {
|
|||
|
||||
func strPtr(s string) *string { return &s }
|
||||
|
||||
func (v YoutubeVideo) publish(daemon *jsonrpc.Client, claimAddress string, amount float64, channelName string) (*SyncSummary, error) {
|
||||
func (v YoutubeVideo) publish(daemon *jsonrpc.Client, claimAddress string, amount float64, channelID string) (*SyncSummary, error) {
|
||||
if channelID == "" {
|
||||
return nil, errors.Err("a claim_id for the channel wasn't provided") //TODO: this is probably not needed?
|
||||
}
|
||||
options := jsonrpc.PublishOptions{
|
||||
Title: &v.title,
|
||||
Author: &v.channelTitle,
|
||||
|
@ -195,15 +198,12 @@ func (v YoutubeVideo) publish(daemon *jsonrpc.Client, claimAddress string, amoun
|
|||
Thumbnail: strPtr("https://berk.ninja/thumbnails/" + v.id),
|
||||
License: strPtr("Copyrighted (contact author)"),
|
||||
ChangeAddress: &claimAddress,
|
||||
ChannelID: &channelID,
|
||||
}
|
||||
if channelName != "" {
|
||||
options.ChannelName = &channelName
|
||||
}
|
||||
|
||||
return publishAndRetryExistingNames(daemon, v.title, v.getFilename(), amount, options)
|
||||
}
|
||||
|
||||
func (v YoutubeVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount float64, channelName string, maxVideoSize int) (*SyncSummary, error) {
|
||||
func (v YoutubeVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount float64, channelID string, maxVideoSize int) (*SyncSummary, error) {
|
||||
//download and thumbnail can be done in parallel
|
||||
err := v.download()
|
||||
if err != nil {
|
||||
|
@ -227,7 +227,7 @@ func (v YoutubeVideo) Sync(daemon *jsonrpc.Client, claimAddress string, amount f
|
|||
}
|
||||
log.Debugln("Created thumbnail for " + v.id)
|
||||
|
||||
summary, err := v.publish(daemon, claimAddress, amount, channelName)
|
||||
summary, err := v.publish(daemon, claimAddress, amount, channelID)
|
||||
//delete the video in all cases (and ignore the error)
|
||||
_ = v.delete()
|
||||
if err != nil {
|
||||
|
|
|
@ -67,6 +67,7 @@ type Sync struct {
|
|||
db *redisdb.DB
|
||||
syncedVideos map[string]syncedVideo
|
||||
grp *stop.Group
|
||||
lbryChannelID string
|
||||
|
||||
videosMapMux sync.Mutex
|
||||
mux sync.Mutex
|
||||
|
@ -352,11 +353,11 @@ func (s *Sync) startWorker(workerNum int) {
|
|||
}
|
||||
SendErrorToSlack("Video failed after %d retries, skipping. Stack: %s", tryCount, logMsg)
|
||||
}
|
||||
s.AppendSyncedVideo(v.ID(), false, err.Error())
|
||||
err = s.Manager.MarkVideoStatus(s.YoutubeChannelID, v.ID(), VideoStatusFailed, "", "", err.Error())
|
||||
if err != nil {
|
||||
SendErrorToSlack("Failed to mark video on the database: %s", err.Error())
|
||||
}
|
||||
s.AppendSyncedVideo(v.ID(), false, err.Error())
|
||||
}
|
||||
break
|
||||
}
|
||||
|
@ -546,7 +547,7 @@ func (s *Sync) processVideo(v video) (err error) {
|
|||
log.Println(v.ID() + " is old: skipping")
|
||||
return nil
|
||||
}
|
||||
summary, err := v.Sync(s.daemon, s.claimAddress, publishAmount, s.LbryChannelName, s.Manager.MaxVideoSize)
|
||||
summary, err := v.Sync(s.daemon, s.claimAddress, publishAmount, s.lbryChannelID, s.Manager.MaxVideoSize)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue