MCPcopy
hub / github.com/perkeep/perkeep / sqlExecRetry

Function sqlExecRetry

pkg/test/dockertest/docker.go:350–371  ·  view source on GitHub ↗

sqlExecRetry keeps calling http://golang.org/pkg/database/sql/#DB.Exec on db with stmt until it succeeds or until it has been tried maxTry times. It sleeps in between tries, twice longer after each new try, starting with 100 milliseconds.

(db *sql.DB, stmt string, maxTry int)

Source from the content-addressed store, hash-verified

348// It sleeps in between tries, twice longer after each new try, starting with
349// 100 milliseconds.
350func sqlExecRetry(db *sql.DB, stmt string, maxTry int) (sql.Result, error) {
351 if maxTry <= 0 {
352 return nil, errors.New("did not try at all")
353 }
354 interval := 100 * time.Millisecond
355 try := 0
356 var err error
357 var result sql.Result
358 for {
359 result, err = db.Exec(stmt)
360 if err == nil {
361 return result, nil
362 }
363 try++
364 if try == maxTry {
365 break
366 }
367 time.Sleep(interval)
368 interval *= 2
369 }
370 return result, fmt.Errorf("failed %v times: %v", try, err)
371}

Callers 1

SetupPostgreSQLContainerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected