MCPcopy
hub / github.com/dgraph-io/badger / TestGetSetDeadlock

Function TestGetSetDeadlock

db_test.go:1403–1444  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1401}
1402
1403func 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
1446func TestWriteDeadlock(t *testing.T) {
1447 dir, err := ioutil.TempDir("", "badger-test")

Callers

nothing calls this directly

Calls 11

removeDirFunction · 0.85
OpenFunction · 0.85
DefaultOptionsFunction · 0.85
NewEntryFunction · 0.85
WithValueLogFileSizeMethod · 0.80
CloseMethod · 0.65
ValueMethod · 0.65
UpdateMethod · 0.45
ReadMethod · 0.45
SetEntryMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…