diff options
| author | chrislu <chris.lu@gmail.com> | 2023-09-21 10:24:34 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2023-09-21 10:24:34 -0700 |
| commit | e3b1bacf3fa0467d836ccd5ed0096146f2afbb07 (patch) | |
| tree | 281a191841b28becd2e6e3c31ada35c254ab89db /weed/util/lock_table_test.go | |
| parent | 411bdda08dc4e902246ee387ae3abe71309e4586 (diff) | |
| download | seaweedfs-e3b1bacf3fa0467d836ccd5ed0096146f2afbb07.tar.xz seaweedfs-e3b1bacf3fa0467d836ccd5ed0096146f2afbb07.zip | |
add lock table to ensure ordered locks
Diffstat (limited to 'weed/util/lock_table_test.go')
| -rw-r--r-- | weed/util/lock_table_test.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/weed/util/lock_table_test.go b/weed/util/lock_table_test.go new file mode 100644 index 000000000..f9037559c --- /dev/null +++ b/weed/util/lock_table_test.go @@ -0,0 +1,42 @@ +package util + +import ( + "fmt" + "math/rand" + "sync" + "testing" + "time" +) + +func TestOrderedLock(t *testing.T) { + lt := NewLockTable[string]() + + var wg sync.WaitGroup + // Simulate transactions requesting locks + for i := 1; i <= 50; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + key := "resource" + lockType := SharedLock + if i%5 == 0 { + lockType = ExclusiveLock + } + + // Simulate attempting to acquire the lock + lock := lt.AcquireLock("", key, lockType) + + // Lock acquired, perform some work + fmt.Printf("ActiveLock %d acquired the lock.\n", lock.ID) + + // Simulate some work + time.Sleep(time.Duration(rand.Int31n(10)*10) * time.Millisecond) + + // Release the lock + lt.ReleaseLock(key, lock) + fmt.Printf("ActiveLock %d released the lock.\n", lock.ID) + }(i) + } + + wg.Wait() +} |
