better retry effort to cope with timeouts

This commit is contained in:
Ted Unangst 2019-08-14 13:15:11 -04:00
parent 13662ccb2a
commit 6a0fc08c32
2 changed files with 24 additions and 16 deletions

View File

@ -86,13 +86,31 @@ func PostMsg(keyname string, key *rsa.PrivateKey, url string, msg []byte) error
} }
func GetJunk(url string) (junk.Junk, error) { func GetJunk(url string) (junk.Junk, error) {
return GetJunkTimeout(url, 0) return GetJunkTimeout(url, 30*time.Second)
} }
func GetJunkFast(url string) (junk.Junk, error) { func GetJunkFast(url string) (junk.Junk, error) {
return GetJunkTimeout(url, 5*time.Second) return GetJunkTimeout(url, 5*time.Second)
} }
func GetJunkHardMode(url string) (junk.Junk, error) {
j, err := GetJunk(url)
if err != nil {
emsg := err.Error()
if emsg == "http get status: 502" || strings.Contains(emsg, "timeout") {
log.Printf("trying again after error: %s", emsg)
time.Sleep(time.Duration(60+notrand.Int63n(60)) * time.Second)
j, err = GetJunk(url)
if err != nil {
log.Printf("still couldn't get it")
} else {
log.Printf("retry success!")
}
}
}
return j, err
}
func GetJunkTimeout(url string, timeout time.Duration) (junk.Junk, error) { func GetJunkTimeout(url string, timeout time.Duration) (junk.Junk, error) {
at := thefakename at := thefakename
if strings.Contains(url, ".well-known/webfinger?resource") { if strings.Contains(url, ".well-known/webfinger?resource") {
@ -437,7 +455,7 @@ func xonkxonk(user *WhatAbout, item junk.Junk, origin string) *Honk {
log.Printf("in too deep") log.Printf("in too deep")
return return
} }
obj, err := GetJunk(xid) obj, err := GetJunkHardMode(xid)
if err != nil { if err != nil {
log.Printf("error getting oneup: %s", err) log.Printf("error getting oneup: %s", err)
return return
@ -472,19 +490,7 @@ func xonkxonk(user *WhatAbout, item junk.Junk, origin string) *Honk {
return nil return nil
} }
log.Printf("getting bonk: %s", xid) log.Printf("getting bonk: %s", xid)
obj, err = GetJunk(xid) obj, err = GetJunkHardMode(xid)
if err != nil {
log.Printf("error regetting: %s", err)
if err.Error() == "http get status: 502" {
time.Sleep(time.Duration(60+notrand.Int63n(60)) * time.Second)
obj, err = GetJunk(xid)
if err != nil {
log.Printf("still couldn't get it")
} else {
log.Printf("retry success!")
}
}
}
origin = originate(xid) origin = originate(xid)
what = "bonk" what = "bonk"
case "Create": case "Create":
@ -492,7 +498,7 @@ func xonkxonk(user *WhatAbout, item junk.Junk, origin string) *Honk {
if !ok { if !ok {
xid, _ = obj.GetString("object") xid, _ = obj.GetString("object")
log.Printf("getting created honk: %s", xid) log.Printf("getting created honk: %s", xid)
obj, err = GetJunk(xid) obj, err = GetJunkHardMode(xid)
if err != nil { if err != nil {
log.Printf("error getting creation: %s", err) log.Printf("error getting creation: %s", err)
} }

View File

@ -2,6 +2,8 @@ changelog
-- next -- next
+ More robust retries for fetching objects.
+ Don't decode excessively large images and run out of memory. + Don't decode excessively large images and run out of memory.
-- 0.7.7 -- 0.7.7