mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
Add a lock to the Server WaitGroup so that if the Server WaitGroup is already waiting, we won't concurrently add to it and cause a data race. Also, when adding to the Server WaitGroup, check that the server is not closing already, since that means we really shouldn't be doing more work.
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
// Copyright 2021 Molecula Corp. All rights reserved.
|
|
package pilosa
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/molecula/featurebase/v3/storage"
|
|
"github.com/molecula/featurebase/v3/testhook"
|
|
)
|
|
|
|
func TestMonitorAntiEntropyZero(t *testing.T) {
|
|
|
|
td, err := testhook.TempDirInDir(t, *TempDir, "")
|
|
if err != nil {
|
|
t.Fatalf("getting temp dir: %v", err)
|
|
}
|
|
cfg := &storage.Config{FsyncEnabled: false, Backend: storage.DefaultBackend}
|
|
s, err := NewServer(OptServerDataDir(td),
|
|
OptServerAntiEntropyInterval(0), OptServerStorageConfig(cfg))
|
|
if err != nil {
|
|
t.Fatalf("making new server: %v", err)
|
|
}
|
|
defer s.Close()
|
|
|
|
ch := make(chan struct{})
|
|
go func() {
|
|
s.monitorAntiEntropy()
|
|
close(ch)
|
|
}()
|
|
|
|
select {
|
|
case <-ch:
|
|
case <-time.After(time.Second):
|
|
t.Fatalf("monitorAntiEntropy should have returned immediately with duration 0")
|
|
}
|
|
}
|
|
|
|
func TestAddToWaitGroup(t *testing.T) {
|
|
// if this test times out / panics we have a problem, otherwise we're fine
|
|
td := t.TempDir()
|
|
cfg := &storage.Config{FsyncEnabled: false, Backend: storage.DefaultBackend}
|
|
s, err := NewServer(OptServerDataDir(td), OptServerStorageConfig(cfg))
|
|
if err != nil {
|
|
t.Fatalf("making new server: %v", err)
|
|
}
|
|
|
|
oks := make(chan bool, 10)
|
|
for i := 0; i < 10; i++ {
|
|
go func() {
|
|
oks <- s.addToWaitGroup(1)
|
|
time.Sleep(10 * time.Millisecond)
|
|
defer s.wg.Done()
|
|
}()
|
|
}
|
|
|
|
for i := 0; i < 10; i++ {
|
|
ok := <-oks
|
|
if !ok {
|
|
t.Fatalf("unexpected close during WaitGroup add")
|
|
}
|
|
}
|
|
|
|
s.Close()
|
|
if ok := s.addToWaitGroup(1); ok {
|
|
t.Fatalf("shouldn't be able to add while server is closing")
|
|
}
|
|
}
|