benbjohnson/litestream · error
get lock file: %w
Error message
get lock file: %w
What it means
Wraps s3.GetObject failure in the S3 leaser's readLease. Fires when reading the distributed lease lock file fails for reasons other than absence (which maps to os.ErrNotExist), so current lease state cannot be checked during AcquireLease.
Source
Thrown at s3/leaser.go:213
l.logger.Debug("lease released",
"generation", lease.Generation,
"owner", lease.Owner)
return nil
}
func (l *Leaser) readLease(ctx context.Context) (*litestream.Lease, string, error) {
key := l.lockKey()
out, err := l.s3.GetObject(ctx, &s3.GetObjectInput{
Bucket: aws.String(l.Bucket),
Key: aws.String(key),
})
if err != nil {
if isNotExists(err) || isNotFoundError(err) {
return nil, "", os.ErrNotExist
}
return nil, "", fmt.Errorf("get lock file: %w", err)
}
defer out.Body.Close()
var lease litestream.Lease
if err := json.NewDecoder(out.Body).Decode(&lease); err != nil {
return nil, "", fmt.Errorf("decode lock file: %w", err)
}
etag := ""
if out.ETag != nil {
etag = *out.ETag
}
lease.ETag = etag
return &lease, etag, nil
}
func (l *Leaser) writeLease(ctx context.Context, lease *litestream.Lease, etag string) (string, error) {View on GitHub (pinned to 4ed7a308f6)
Solutions
- Verify GetObject permission and bucket access
- Retry once S3 is reachable
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at s3/leaser.go:213 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of benbjohnson/litestream@4ed7a308f6 (2026-09-06).
Data as JSON: /api/errors/bfaf064deecb57c2.
Report an issue: GitHub.