mirror of
https://github.com/minio/minio.git
synced 2025-11-09 05:34:56 -05:00
fix: add lock ownership to expire locks (#10571)
- Add owner information for expiry, locking, unlocking a resource - TopLocks returns now locks in quorum by default, provides a way to capture stale locks as well with `?stale=true` - Simplify the quorum handling for locks to avoid from storage class, because there were challenges to make it consistent across all situations. - And other tiny simplifications to reset locks.
This commit is contained in:
@@ -21,6 +21,8 @@ import (
|
||||
"reflect"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/minio/minio/pkg/dsync"
|
||||
)
|
||||
|
||||
// Helper function to create a lock server for testing
|
||||
@@ -53,12 +55,14 @@ func TestLockRpcServerRemoveEntry(t *testing.T) {
|
||||
defer os.RemoveAll(testPath)
|
||||
|
||||
lockRequesterInfo1 := lockRequesterInfo{
|
||||
Owner: "owner",
|
||||
Writer: true,
|
||||
UID: "0123-4567",
|
||||
Timestamp: UTCNow(),
|
||||
TimeLastCheck: UTCNow(),
|
||||
}
|
||||
lockRequesterInfo2 := lockRequesterInfo{
|
||||
Owner: "owner",
|
||||
Writer: true,
|
||||
UID: "89ab-cdef",
|
||||
Timestamp: UTCNow(),
|
||||
@@ -73,11 +77,17 @@ func TestLockRpcServerRemoveEntry(t *testing.T) {
|
||||
lri := locker.ll.lockMap["name"]
|
||||
|
||||
// test unknown uid
|
||||
if locker.ll.removeEntry("name", "unknown-uid", &lri) {
|
||||
if locker.ll.removeEntry("name", dsync.LockArgs{
|
||||
Owner: "owner",
|
||||
UID: "unknown-uid",
|
||||
}, &lri) {
|
||||
t.Errorf("Expected %#v, got %#v", false, true)
|
||||
}
|
||||
|
||||
if !locker.ll.removeEntry("name", "0123-4567", &lri) {
|
||||
if !locker.ll.removeEntry("name", dsync.LockArgs{
|
||||
Owner: "owner",
|
||||
UID: "0123-4567",
|
||||
}, &lri) {
|
||||
t.Errorf("Expected %#v, got %#v", true, false)
|
||||
} else {
|
||||
gotLri := locker.ll.lockMap["name"]
|
||||
@@ -87,7 +97,10 @@ func TestLockRpcServerRemoveEntry(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
if !locker.ll.removeEntry("name", "89ab-cdef", &lri) {
|
||||
if !locker.ll.removeEntry("name", dsync.LockArgs{
|
||||
Owner: "owner",
|
||||
UID: "89ab-cdef",
|
||||
}, &lri) {
|
||||
t.Errorf("Expected %#v, got %#v", true, false)
|
||||
} else {
|
||||
gotLri := locker.ll.lockMap["name"]
|
||||
|
||||
Reference in New Issue
Block a user