mirror of
				https://github.com/taigrr/bitcask
				synced 2025-01-18 04:03:17 -08:00 
			
		
		
		
	Add a few more test cases for concurrent operations
This commit is contained in:
		
							parent
							
								
									c0c0b5369a
								
							
						
					
					
						commit
						5e01d6d098
					
				| @ -1406,6 +1406,92 @@ func TestConcurrent(t *testing.T) { | ||||
| 			wg.Wait() | ||||
| 		}) | ||||
| 
 | ||||
| 		// Test concurrent Put() with concurrent Scan() | ||||
| 		t.Run("PutScan", func(t *testing.T) { | ||||
| 			doPut := func(wg *sync.WaitGroup, x int) { | ||||
| 				defer func() { | ||||
| 					wg.Done() | ||||
| 				}() | ||||
| 				for i := 0; i <= 100; i++ { | ||||
| 					if i%x == 0 { | ||||
| 						key := []byte(fmt.Sprintf("k%d", i)) | ||||
| 						value := []byte(fmt.Sprintf("v%d", i)) | ||||
| 						err := db.Put(key, value) | ||||
| 						assert.NoError(err) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			doScan := func(wg *sync.WaitGroup, x int) { | ||||
| 				defer func() { | ||||
| 					wg.Done() | ||||
| 				}() | ||||
| 				for i := 0; i <= 100; i++ { | ||||
| 					if i%x == 0 { | ||||
| 						err := db.Scan([]byte("k"), func(key []byte) error { | ||||
| 							return nil | ||||
| 						}) | ||||
| 						assert.NoError(err) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			wg := &sync.WaitGroup{} | ||||
| 			wg.Add(6) | ||||
| 
 | ||||
| 			go doPut(wg, 2) | ||||
| 			go doPut(wg, 3) | ||||
| 			go doPut(wg, 5) | ||||
| 			go doScan(wg, 1) | ||||
| 			go doScan(wg, 2) | ||||
| 			go doScan(wg, 4) | ||||
| 
 | ||||
| 			wg.Wait() | ||||
| 		}) | ||||
| 
 | ||||
| 		// XXX: This has data races | ||||
| 		/* Test concurrent Scan() with concurrent Merge() | ||||
| 		t.Run("ScanMerge", func(t *testing.T) { | ||||
| 			doScan := func(wg *sync.WaitGroup, x int) { | ||||
| 				defer func() { | ||||
| 					wg.Done() | ||||
| 				}() | ||||
| 				for i := 0; i <= 100; i++ { | ||||
| 					if i%x == 0 { | ||||
| 						err := db.Scan([]byte("k"), func(key []byte) error { | ||||
| 							return nil | ||||
| 						}) | ||||
| 						assert.NoError(err) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			doMerge := func(wg *sync.WaitGroup, x int) { | ||||
| 				defer func() { | ||||
| 					wg.Done() | ||||
| 				}() | ||||
| 				for i := 0; i <= 100; i++ { | ||||
| 					if i%x == 0 { | ||||
| 						err := db.Merge() | ||||
| 						assert.NoError(err) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			wg := &sync.WaitGroup{} | ||||
| 			wg.Add(6) | ||||
| 
 | ||||
| 			go doScan(wg, 2) | ||||
| 			go doScan(wg, 3) | ||||
| 			go doScan(wg, 5) | ||||
| 			go doMerge(wg, 1) | ||||
| 			go doMerge(wg, 2) | ||||
| 			go doMerge(wg, 4) | ||||
| 
 | ||||
| 			wg.Wait() | ||||
| 		}) | ||||
| 		*/ | ||||
| 
 | ||||
| 		t.Run("Close", func(t *testing.T) { | ||||
| 			err = db.Close() | ||||
| 			assert.NoError(err) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user