From 7b8b0e0ba6dc7507517feb36a3df674af4034597 Mon Sep 17 00:00:00 2001 From: Arceliar Date: Tue, 6 Jul 2021 19:12:06 -0500 Subject: [PATCH] retry requests a few times before failing --- scripts/crawler.go | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/scripts/crawler.go b/scripts/crawler.go index 0f46391..d66cc9e 100644 --- a/scripts/crawler.go +++ b/scripts/crawler.go @@ -12,6 +12,8 @@ var waitgroup sync.WaitGroup var visited sync.Map var rumored sync.Map +const MAX_RETRY = 3 + func dial() (net.Conn, error) { return net.DialTimeout("unix", "/var/run/yggdrasil.sock", time.Second) } @@ -29,22 +31,31 @@ func doRequest(request map[string]interface{}) map[string]interface{} { if err != nil { panic(err) } - sock, err := dial() - if err != nil { - panic(err) - } - if _, err = sock.Write(req); err != nil { - panic(err) - } - bs := make([]byte, 65535) - n, err := sock.Read(bs) - if err != nil { - panic(bs) - } - bs = bs[:n] var res map[string]interface{} - if err = json.Unmarshal(bs, &res); err != nil { - panic(err) + for idx := 0; idx < MAX_RETRY; idx++ { + sock, err := dial() + if err != nil { + panic(err) + } + if _, err = sock.Write(req); err != nil { + panic(err) + } + bs := make([]byte, 65535) + n, err := sock.Read(bs) + if err != nil { + panic(bs) + } + bs = bs[:n] + if err = json.Unmarshal(bs, &res); err != nil { + panic(err) + } + // TODO parse res, check if there's an error + if res, ok := res["response"]; ok { + if _, isIn := res.(map[string]interface{})["error"]; isIn { + continue + } + } + break } return res }