| 316 | } |
| 317 | |
| 318 | func tryAcquireLock(ctx context.Context, storage Storage, lockKey string) (bool, error) { |
| 319 | locker, ok := storage.(TryLocker) |
| 320 | if !ok { |
| 321 | return false, fmt.Errorf("%T does not implement TryLocker", storage) |
| 322 | } |
| 323 | |
| 324 | ok, err := locker.TryLock(ctx, lockKey) |
| 325 | if ok && err == nil { |
| 326 | locksMu.Lock() |
| 327 | locks[lockKey] = storage |
| 328 | locksMu.Unlock() |
| 329 | } |
| 330 | return ok, err |
| 331 | } |
| 332 | |
| 333 | func releaseLock(ctx context.Context, storage Storage, lockKey string) error { |
| 334 | err := storage.Unlock(context.WithoutCancel(ctx), lockKey) |