github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/libkb/memdb.go (about)

     1  package libkb
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"sync"
     7  
     8  	lru "github.com/hashicorp/golang-lru"
     9  )
    10  
    11  type MemDb struct {
    12  	sync.Mutex
    13  	lru *lru.Cache
    14  }
    15  
    16  var _ LocalDb = (*MemDb)(nil)
    17  
    18  func NewMemDb(size int) *MemDb {
    19  	c, _ := lru.New(size)
    20  	return &MemDb{
    21  		lru: c,
    22  	}
    23  }
    24  
    25  func (m *MemDb) Open() error   { return nil }
    26  func (m *MemDb) Stats() string { return "" }
    27  func (m *MemDb) CompactionStats() (bool, bool, error) {
    28  	return false, false, nil
    29  }
    30  func (m *MemDb) ForceOpen() error { return nil }
    31  func (m *MemDb) Close() error {
    32  	m.lru.Purge()
    33  	return nil
    34  }
    35  func (m *MemDb) Nuke() (string, error) {
    36  	m.lru.Purge()
    37  	return "", nil
    38  }
    39  func (m *MemDb) Clean(force bool) error {
    40  	return nil
    41  }
    42  func (m *MemDb) OpenTransaction() (res LocalDbTransaction, err error) {
    43  	return res, errors.New("not implemented")
    44  }
    45  
    46  func (m *MemDb) Put(id DbKey, aliases []DbKey, value []byte) error {
    47  	m.Lock()
    48  	defer m.Unlock()
    49  	m.lru.Add(id, value)
    50  	for _, a := range aliases {
    51  		m.lru.Add(a, value)
    52  	}
    53  	return nil
    54  }
    55  
    56  func (m *MemDb) Delete(id DbKey) error {
    57  	m.Lock()
    58  	defer m.Unlock()
    59  	m.lru.Remove(id)
    60  	return nil
    61  }
    62  
    63  func (m *MemDb) Get(id DbKey) ([]byte, bool, error) {
    64  	m.Lock()
    65  	defer m.Unlock()
    66  	val, ok := m.lru.Get(id)
    67  	if !ok {
    68  		return nil, false, nil
    69  	}
    70  	return val.([]byte), true, nil
    71  }
    72  
    73  func (m *MemDb) Lookup(alias DbKey) ([]byte, bool, error) {
    74  	return m.Get(alias)
    75  }
    76  
    77  func (m *MemDb) KeysWithPrefixes(prefixes ...[]byte) (DBKeySet, error) {
    78  	return nil, fmt.Errorf("unimplemented on memdb")
    79  }