Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pkg/cover/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,11 @@ func (l *memoryStore) Set(services map[string][]string) error {
l.mu.Lock()
defer l.mu.Unlock()

l.servicesMap = services
newMap := make(map[string][]string)
for k, v := range services {
newMap[k] = append(make([]string, 0), v...)
}
l.servicesMap = newMap

return nil
}
Expand Down
23 changes: 21 additions & 2 deletions pkg/cover/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ package cover

import (
"fmt"
"github.com/stretchr/testify/assert"
"os"
"testing"

"github.com/stretchr/testify/assert"
"time"
)

func TestLocalStore(t *testing.T) {
Expand Down Expand Up @@ -130,3 +130,22 @@ func TestFileStoreRemove(t *testing.T) {
err = store.Remove("http")
assert.Error(t, err, fmt.Errorf("no service found"))
}

// verify issue fix https://github.com/golang/go/issues/56552
func TestConcurrentRemoval(t *testing.T) {
store, _ := NewFileStore("_svrs_address.txt")
_ = store.Init()

for i := 0; i < 100; i++ {
_ = store.Add(ServiceUnderTest{
Name: fmt.Sprintf("test%d", i),
Address: fmt.Sprintf("http://127.0.0.1:890%d", i),
})
}

for i := 0; i < 100; i++ {
go store.Remove(fmt.Sprintf("http://127.0.0.1:890%d", i))
}

time.Sleep(time.Second * 5) // if no issue then pass.
}