From a0876409c5938f2dfae8d740c52d40eee099d4ca Mon Sep 17 00:00:00 2001 From: Egor Aristov Date: Thu, 20 Mar 2025 22:27:36 +0300 Subject: [PATCH] retries --- internal/extractors/pwextractor/pwextractor.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/extractors/pwextractor/pwextractor.go b/internal/extractors/pwextractor/pwextractor.go index 19e627e..dfd1a12 100644 --- a/internal/extractors/pwextractor/pwextractor.go +++ b/internal/extractors/pwextractor/pwextractor.go @@ -2,6 +2,7 @@ package pwextractor import ( "context" + "errors" "fmt" "github.com/egor3f/rssalchemy/internal/limiter" "github.com/egor3f/rssalchemy/internal/models" @@ -94,6 +95,8 @@ func (e *PwExtractor) Stop() error { return nil } +const MAX_RETRIES = 3 // todo: config + func (e *PwExtractor) visitPage(task models.Task, cb func(page playwright.Page) error) (errRet error) { baseDomain, scheme, err := parseBaseDomain(task.URL) @@ -214,7 +217,13 @@ func (e *PwExtractor) visitPage(task models.Task, cb func(page playwright.Page) } } - if _, err := page.Goto(task.URL, playwright.PageGotoOptions{Timeout: pwDuration("10s")}); err != nil { + for retry := 0; retry < MAX_RETRIES; retry++ { + _, err = page.Goto(task.URL, playwright.PageGotoOptions{Timeout: pwDuration("10s")}) + if !errors.Is(err, playwright.ErrTimeout) { + break + } + } + if err != nil { return fmt.Errorf("goto page: %w", err) } log.Debugf("Url %s visited, starting cb", task.URL)