mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-08-19 05:36:58 +00:00
atomic counter
This commit is contained in:
@@ -2,6 +2,7 @@ package topology
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -133,9 +134,7 @@ func TestVolumeGrowth_ConcurrentAllocationPreventsRaceCondition(t *testing.T) {
|
||||
// Simulate concurrent volume creation attempts
|
||||
const concurrentRequests = 10
|
||||
var wg sync.WaitGroup
|
||||
var successCount int32
|
||||
var failureCount int32
|
||||
var mu sync.Mutex
|
||||
var successCount, failureCount atomic.Int32
|
||||
|
||||
for i := 0; i < concurrentRequests; i++ {
|
||||
wg.Add(1)
|
||||
@@ -144,12 +143,11 @@ func TestVolumeGrowth_ConcurrentAllocationPreventsRaceCondition(t *testing.T) {
|
||||
|
||||
_, reservation, err := vg.findEmptySlotsForOneVolume(topo, option, true)
|
||||
|
||||
mu.Lock()
|
||||
if err != nil {
|
||||
failureCount++
|
||||
failureCount.Add(1)
|
||||
t.Logf("Request %d failed as expected: %v", requestId, err)
|
||||
} else {
|
||||
successCount++
|
||||
successCount.Add(1)
|
||||
t.Logf("Request %d succeeded, got reservation", requestId)
|
||||
|
||||
// Release the reservation to simulate completion
|
||||
@@ -163,7 +161,6 @@ func TestVolumeGrowth_ConcurrentAllocationPreventsRaceCondition(t *testing.T) {
|
||||
disk.UpAdjustDiskUsageDelta(types.HardDriveType, deltaDiskUsage)
|
||||
}
|
||||
}
|
||||
mu.Unlock()
|
||||
}(i)
|
||||
}
|
||||
|
||||
@@ -171,12 +168,12 @@ func TestVolumeGrowth_ConcurrentAllocationPreventsRaceCondition(t *testing.T) {
|
||||
|
||||
// With reservation system, only 5 requests should succeed (capacity limit)
|
||||
// The rest should fail due to insufficient capacity
|
||||
if successCount != 5 {
|
||||
t.Errorf("Expected exactly 5 successful reservations, got %d", successCount)
|
||||
if successCount.Load() != 5 {
|
||||
t.Errorf("Expected exactly 5 successful reservations, got %d", successCount.Load())
|
||||
}
|
||||
|
||||
if failureCount != 5 {
|
||||
t.Errorf("Expected exactly 5 failed reservations, got %d", failureCount)
|
||||
if failureCount.Load() != 5 {
|
||||
t.Errorf("Expected exactly 5 failed reservations, got %d", failureCount.Load())
|
||||
}
|
||||
|
||||
// Verify final state
|
||||
@@ -185,7 +182,7 @@ func TestVolumeGrowth_ConcurrentAllocationPreventsRaceCondition(t *testing.T) {
|
||||
t.Errorf("Expected 0 available space after all allocations, got %d", finalAvailable)
|
||||
}
|
||||
|
||||
t.Logf("Concurrent test completed: %d successes, %d failures", successCount, failureCount)
|
||||
t.Logf("Concurrent test completed: %d successes, %d failures", successCount.Load(), failureCount.Load())
|
||||
}
|
||||
|
||||
func TestVolumeGrowth_ReservationFailureRollback(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user