mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-11-24 16:53:14 +08:00
ensure consistent testing
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
package lock_manager
|
package lock_manager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb"
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LockRingSnapshot struct {
|
type LockRingSnapshot struct {
|
||||||
@@ -22,6 +23,7 @@ type LockRing struct {
|
|||||||
lastCompactTime time.Time
|
lastCompactTime time.Time
|
||||||
snapshotInterval time.Duration
|
snapshotInterval time.Duration
|
||||||
onTakeSnapshot func(snapshot []pb.ServerAddress)
|
onTakeSnapshot func(snapshot []pb.ServerAddress)
|
||||||
|
cleanupWg sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLockRing(snapshotInterval time.Duration) *LockRing {
|
func NewLockRing(snapshotInterval time.Duration) *LockRing {
|
||||||
@@ -87,7 +89,9 @@ func (r *LockRing) SetSnapshot(servers []pb.ServerAddress) {
|
|||||||
|
|
||||||
r.addOneSnapshot(servers)
|
r.addOneSnapshot(servers)
|
||||||
|
|
||||||
|
r.cleanupWg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer r.cleanupWg.Done()
|
||||||
<-time.After(r.snapshotInterval)
|
<-time.After(r.snapshotInterval)
|
||||||
r.compactSnapshots()
|
r.compactSnapshots()
|
||||||
}()
|
}()
|
||||||
@@ -96,7 +100,9 @@ func (r *LockRing) SetSnapshot(servers []pb.ServerAddress) {
|
|||||||
func (r *LockRing) takeSnapshotWithDelayedCompaction() {
|
func (r *LockRing) takeSnapshotWithDelayedCompaction() {
|
||||||
r.doTakeSnapshot()
|
r.doTakeSnapshot()
|
||||||
|
|
||||||
|
r.cleanupWg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer r.cleanupWg.Done()
|
||||||
<-time.After(r.snapshotInterval)
|
<-time.After(r.snapshotInterval)
|
||||||
r.compactSnapshots()
|
r.compactSnapshots()
|
||||||
}()
|
}()
|
||||||
@@ -172,6 +178,12 @@ func (r *LockRing) GetSnapshot() (servers []pb.ServerAddress) {
|
|||||||
return r.snapshots[0].servers
|
return r.snapshots[0].servers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WaitForCleanup waits for all pending cleanup operations to complete
|
||||||
|
// This is useful for testing to ensure deterministic behavior
|
||||||
|
func (r *LockRing) WaitForCleanup() {
|
||||||
|
r.cleanupWg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
func hashKeyToServer(key string, servers []pb.ServerAddress) pb.ServerAddress {
|
func hashKeyToServer(key string, servers []pb.ServerAddress) pb.ServerAddress {
|
||||||
if len(servers) == 0 {
|
if len(servers) == 0 {
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package lock_manager
|
package lock_manager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAddServer(t *testing.T) {
|
func TestAddServer(t *testing.T) {
|
||||||
@@ -21,7 +22,9 @@ func TestAddServer(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, 8, len(r.snapshots))
|
assert.Equal(t, 8, len(r.snapshots))
|
||||||
|
|
||||||
time.Sleep(110 * time.Millisecond)
|
// Wait for all cleanup operations to complete instead of using time.Sleep
|
||||||
|
time.Sleep(110 * time.Millisecond) // Still need to wait for the cleanup interval
|
||||||
|
r.WaitForCleanup() // Ensure all cleanup goroutines have finished
|
||||||
|
|
||||||
assert.Equal(t, 2, len(r.snapshots))
|
assert.Equal(t, 2, len(r.snapshots))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user