File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -49,13 +49,36 @@ func DefaultRetry(backoffs []time.Duration, run func() error) error {
4949 return nil
5050}
5151
52+ // errorCoder is satisfied by database driver error types that expose a numeric
53+ // error code (e.g., modernc.org/sqlite's *Error).
54+ type errorCoder interface {
55+ Code () int
56+ }
57+
58+ const (
59+ sqliteBusy = 5 // SQLITE_BUSY
60+ sqliteLocked = 6 // SQLITE_LOCKED
61+ )
62+
5263func isRetryable (err error ) bool {
64+ if err == nil {
65+ return false
66+ }
67+
5368 switch {
5469 case errors .Is (err , context .DeadlineExceeded ),
5570 errors .Is (err , net .ErrClosed ),
5671 errors .Is (err , os .ErrDeadlineExceeded ):
5772 return true
5873 }
5974
75+ var coded errorCoder
76+ if errors .As (err , & coded ) {
77+ switch coded .Code () {
78+ case sqliteBusy , sqliteLocked :
79+ return true
80+ }
81+ }
82+
6083 return false
6184}
You can’t perform that action at this time.
0 commit comments