added 'table is locked' error msg retry check

This commit is contained in:
Gani Georgiev 2024-11-15 07:45:27 +02:00
parent 4adc4b28d2
commit e53c30ca4d
2 changed files with 11 additions and 8 deletions

View File

@ -46,14 +46,16 @@ func baseLockRetry(op func(attempt int) error, maxRetries int) error {
Retry:
err := op(attempt)
if err != nil &&
attempt <= maxRetries &&
// we are checking the plain error text to handle both cgo and noncgo errors
strings.Contains(err.Error(), "database is locked") {
// wait and retry
time.Sleep(getDefaultRetryInterval(attempt))
attempt++
goto Retry
if err != nil && attempt <= maxRetries {
errStr := err.Error()
// we are checking the error against the plain error texts since the codes could vary between drivers
if strings.Contains(errStr, "database is locked") ||
strings.Contains(errStr, "table is locked") {
// wait and retry
time.Sleep(getDefaultRetryInterval(attempt))
attempt++
goto Retry
}
}
return err

View File

@ -33,6 +33,7 @@ func TestBaseLockRetry(t *testing.T) {
{nil, 3, 1},
{errors.New("test"), 3, 1},
{errors.New("database is locked"), 3, 3},
{errors.New("table is locked"), 3, 3},
}
for i, s := range scenarios {