MCPcopy Index your code
hub / github.com/ByteStorage/FlyDB / TestDB_ConcurrentPut

Function TestDB_ConcurrentPut

engine/db_test.go:95–209  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

93}
94
95func TestDB_ConcurrentPut(t *testing.T) {
96 opts := config.DefaultOptions
97 dir, _ := os.MkdirTemp("", "flydb-ConcurrentPut")
98 opts.DirPath = dir
99 opts.DataFileSize = 64 * 1024 * 1024
100 db, err := NewDB(opts)
101 defer destroyDB(db)
102 assert.Nil(t, err)
103 assert.NotNil(t, db)
104
105 var wg sync.WaitGroup
106
107 putTestWorker := func(id int, db *DB) {
108 defer func() {
109 // fmt.Printf("put Worker %d done\n", id)
110 wg.Done()
111 }()
112 // fmt.Printf("Worker %d processing\n", id)
113 err = db.Put(randkv.GetTestKey(id), randkv.GetTestKey(id))
114 assert.Nil(t, err)
115 // fmt.Printf("Worker %d resumed\n", id)
116 }
117
118 getTestWorker := func(id int, db *DB) {
119 defer func() {
120 wg.Done()
121 }()
122 val, err := db.Get(randkv.GetTestKey(id))
123 assert.Nil(t, err)
124 assert.NotNil(t, val)
125 assert.Equal(t, randkv.GetTestKey(id), val)
126 }
127
128 var workerNum = 100
129
130 // Put workerNum data in parallel
131 wg.Add(workerNum)
132 go func() {
133 for i := 0; i < workerNum; i++ {
134 go putTestWorker(i, db)
135 }
136 }()
137
138 // Parallel Put workerNum to the same data as the previous parallel process
139 wg.Add(workerNum)
140 go func() {
141 for i := 0; i < workerNum; i++ {
142 go putTestWorker(i, db)
143 }
144 }()
145
146 // Wait for all Put to be completed and perform subsequent tests
147 wg.Wait()
148
149 // Get all the previously inserted data in parallel
150 wg.Add(workerNum)
151 go func() {
152 for i := 0; i < workerNum; i++ {

Callers

nothing calls this directly

Calls 10

PutMethod · 0.95
GetMethod · 0.95
CloseMethod · 0.95
GetTestKeyFunction · 0.92
RandomValueFunction · 0.92
NewDBFunction · 0.85
destroyDBFunction · 0.85
DoneMethod · 0.80
AddMethod · 0.80
WaitMethod · 0.80

Tested by

no test coverage detected