MCPcopy
hub / github.com/olric-data/olric / TestDMap_Fragment_Concurrent_Access

Function TestDMap_Fragment_Concurrent_Access

internal/dmap/fragment_test.go:72–123  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

70}
71
72func TestDMap_Fragment_Concurrent_Access(t *testing.T) {
73 cluster := testcluster.New(NewService)
74 s := cluster.AddMember(nil).(*Service)
75 dm, err := s.NewDMap("mydmap")
76 if err != nil {
77 t.Fatalf("Expected nil. Got: %v", err)
78 }
79
80 part := dm.getPartitionByHKey(123, partitions.PRIMARY)
81
82 var mtx sync.RWMutex
83 var wg sync.WaitGroup
84 for i := 0; i < 1000; i++ {
85 wg.Add(1)
86 go func(idx int) {
87 defer wg.Done()
88
89 f, err := dm.loadOrCreateFragment(part)
90 if err != nil {
91 t.Errorf("Expected nil. Got: %v", err)
92 }
93
94 e := f.storage.NewEntry()
95 e.SetKey(testutil.ToKey(idx))
96
97 mtx.Lock()
98 // storage engine is not thread-safe
99 err = f.storage.Put(uint64(idx), e)
100 mtx.Unlock()
101
102 if err != nil {
103 t.Errorf("Expected nil. Got: %v", err)
104 }
105 }(i)
106 }
107
108 wg.Wait()
109
110 f, err := dm.loadFragment(part)
111 if err != nil {
112 t.Errorf("Expected nil. Got: %v", err)
113 }
114 for i := 0; i < 1000; i++ {
115 entry, err := f.storage.Get(uint64(i))
116 if err != nil {
117 t.Fatalf("Expected nil. Got: %v", err)
118 }
119 if entry.Key() != testutil.ToKey(i) {
120 t.Fatalf("Expected key: %s. Got: %s", testutil.ToKey(i), entry.Key())
121 }
122 }
123}

Callers

nothing calls this directly

Calls 15

getPartitionByHKeyMethod · 0.95
loadOrCreateFragmentMethod · 0.95
SetKeyMethod · 0.95
loadFragmentMethod · 0.95
NewFunction · 0.92
ToKeyFunction · 0.92
AddMemberMethod · 0.80
NewDMapMethod · 0.65
NewEntryMethod · 0.65
LockMethod · 0.65
PutMethod · 0.65
UnlockMethod · 0.65

Tested by

no test coverage detected