(t *testing.T)
| 1401 | } |
| 1402 | |
| 1403 | func TestGetSetDeadlock(t *testing.T) { |
| 1404 | dir, err := ioutil.TempDir("", "badger-test") |
| 1405 | fmt.Println(dir) |
| 1406 | require.NoError(t, err) |
| 1407 | defer removeDir(dir) |
| 1408 | |
| 1409 | db, err := Open(DefaultOptions(dir).WithValueLogFileSize(1 << 20)) |
| 1410 | require.NoError(t, err) |
| 1411 | defer db.Close() |
| 1412 | |
| 1413 | val := make([]byte, 1<<19) |
| 1414 | key := []byte("key1") |
| 1415 | require.NoError(t, db.Update(func(txn *Txn) error { |
| 1416 | rand.Read(val) |
| 1417 | require.NoError(t, txn.SetEntry(NewEntry(key, val))) |
| 1418 | return nil |
| 1419 | })) |
| 1420 | |
| 1421 | timeout, done := time.After(10*time.Second), make(chan bool) |
| 1422 | |
| 1423 | go func() { |
| 1424 | db.Update(func(txn *Txn) error { |
| 1425 | item, err := txn.Get(key) |
| 1426 | require.NoError(t, err) |
| 1427 | err = item.Value(nil) // This take a RLock on file |
| 1428 | require.NoError(t, err) |
| 1429 | |
| 1430 | rand.Read(val) |
| 1431 | require.NoError(t, txn.SetEntry(NewEntry(key, val))) |
| 1432 | require.NoError(t, txn.SetEntry(NewEntry([]byte("key2"), val))) |
| 1433 | return nil |
| 1434 | }) |
| 1435 | done <- true |
| 1436 | }() |
| 1437 | |
| 1438 | select { |
| 1439 | case <-timeout: |
| 1440 | t.Fatal("db.Update did not finish within 10s, assuming deadlock.") |
| 1441 | case <-done: |
| 1442 | t.Log("db.Update finished.") |
| 1443 | } |
| 1444 | } |
| 1445 | |
| 1446 | func TestWriteDeadlock(t *testing.T) { |
| 1447 | dir, err := ioutil.TempDir("", "badger-test") |
nothing calls this directly
no test coverage detected
searching dependent graphs…