Skip to content

Commit

Permalink
Made suggested changes.
Browse files Browse the repository at this point in the history
Signed-off-by: Cody Littley <[email protected]>
  • Loading branch information
cody-littley committed Oct 4, 2024
1 parent 3921d4a commit ca76d4c
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 28 deletions.
28 changes: 14 additions & 14 deletions common/kvstore/tablestore/table_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func TestTableCount(t *testing.T) {
assert.NoError(t, err)

base := mapstore.NewStore()
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

// table count needs to fit into 32 bytes, and two tables are reserved for internal use
Expand Down Expand Up @@ -69,7 +69,7 @@ func TestTableList(t *testing.T) {

base, err := leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

tables := store.GetTables()
Expand Down Expand Up @@ -123,7 +123,7 @@ func TestTableList(t *testing.T) {

base, err = leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err = Wrapper(logger, base)
store, err = wrapper(logger, base)
assert.NoError(t, err)

tables = store.GetTables()
Expand Down Expand Up @@ -152,7 +152,7 @@ func TestTableList(t *testing.T) {

base, err = leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err = Wrapper(logger, base)
store, err = wrapper(logger, base)
assert.NoError(t, err)

tables = store.GetTables()
Expand Down Expand Up @@ -196,7 +196,7 @@ func TestUniqueKeySpace(t *testing.T) {
assert.NoError(t, err)

base := mapstore.NewStore()
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

table1, err := store.GetTable("table1")
Expand Down Expand Up @@ -237,7 +237,7 @@ func TestBatchOperations(t *testing.T) {
assert.NoError(t, err)

base := mapstore.NewStore()
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

table1, err := store.GetTable("table1")
Expand Down Expand Up @@ -413,7 +413,7 @@ func TestDropTable(t *testing.T) {
assert.NoError(t, err)

base := mapstore.NewStore()
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

table1, err := store.GetTable("table1")
Expand Down Expand Up @@ -530,7 +530,7 @@ func TestIteration(t *testing.T) {
assert.NoError(t, err)

base := mapstore.NewStore()
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

table1, err := store.GetTable("table1")
Expand Down Expand Up @@ -685,7 +685,7 @@ func TestRestart(t *testing.T) {

base, err := leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

table1, err := store.GetTable("table1")
Expand Down Expand Up @@ -716,7 +716,7 @@ func TestRestart(t *testing.T) {

base, err = leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err = Wrapper(logger, base)
store, err = wrapper(logger, base)
assert.NoError(t, err)

table1, err = store.GetTable("table1")
Expand Down Expand Up @@ -765,7 +765,7 @@ func TestRandomOperations(t *testing.T) {

base, err := leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err := Wrapper(logger, base)
store, err := wrapper(logger, base)
assert.NoError(t, err)

tables := make(map[string]kvstore.Table)
Expand All @@ -782,7 +782,7 @@ func TestRandomOperations(t *testing.T) {

base, err = leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err = Wrapper(logger, base)
store, err = wrapper(logger, base)
assert.NoError(t, err)

for tableName := range tables {
Expand Down Expand Up @@ -929,7 +929,7 @@ func TestInterruptedTableDeletion(t *testing.T) {
deletionsRemaining: 50,
}

store, err := Wrapper(logger, explodingBase)
store, err := wrapper(logger, explodingBase)
assert.NoError(t, err)

// Create a few tables
Expand Down Expand Up @@ -964,7 +964,7 @@ func TestInterruptedTableDeletion(t *testing.T) {
// Restart the store. The table should be gone by the time the method returns.
base, err = leveldb.NewStore(logger, dbPath)
assert.NoError(t, err)
store, err = Wrapper(logger, base)
store, err = wrapper(logger, base)
assert.NoError(t, err)

tables := store.GetTables()
Expand Down
37 changes: 35 additions & 2 deletions common/kvstore/tablestore/table_store_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"errors"
"fmt"
"github.com/Layr-Labs/eigenda/common/kvstore"
"github.com/Layr-Labs/eigenda/common/kvstore/leveldb"
"github.com/Layr-Labs/eigenda/common/kvstore/mapstore"
"github.com/Layr-Labs/eigensdk-go/logging"
"math"
"sort"
Expand Down Expand Up @@ -37,6 +39,34 @@ var _ kvstore.TableStore = &tableStore{}
// ERR_TABLE_LIMIT_EXCEEDED is returned when the maximum number of tables has been reached.
var ERR_TABLE_LIMIT_EXCEEDED = errors.New("table limit exceeded")

// StoreType describes the underlying store implementation.
type StoreType int

const (
// LevelDB is a LevelDB-backed store.
LevelDB StoreType = iota
// MapStore is an in-memory store. This store does not preserve data across restarts.
MapStore
)

// New creates a new TableStore of the given type. Any data written to disk by the TableStore will be stored in
// the given path. Can be used to create a new store or to load an existing store from disk.
func (t StoreType) New(logger logging.Logger, path string) (kvstore.TableStore, error) {
switch t {
case LevelDB:
store, err := leveldb.NewStore(logger, path)
if err != nil {
return nil, fmt.Errorf("error creating LevelDB store: %w", err)
}
return wrapper(logger, store)
case MapStore:
store := mapstore.NewStore()
return wrapper(logger, store)
default:
return nil, fmt.Errorf("unknown store type: %d", t)
}
}

// tableStore is an implementation of TableStore that wraps a Store.
type tableStore struct {
logger logging.Logger
Expand All @@ -60,12 +90,15 @@ type tableStore struct {
namespaceTable kvstore.Table
}

// Wrapper wraps the given Store to create a TableStore.
// Future work: if we ever decide to permit third parties to provide custom store implementations, we will need
// to make wrapper() into a public function.

// wrapper wraps the given Store to create a TableStore.
//
// WARNING: it is not safe to access the wrapped store directly while the TableStore is in use. The TableStore uses
// special key formatting, and direct access to the wrapped store may violate the TableStore's invariants, resulting
// in undefined behavior.
func Wrapper(logger logging.Logger, base kvstore.Store) (kvstore.TableStore, error) {
func wrapper(logger logging.Logger, base kvstore.Store) (kvstore.TableStore, error) {

tableIDMap := make(map[string]uint32)
tableIdSet := make(map[uint32]bool)
Expand Down
6 changes: 3 additions & 3 deletions common/kvstore/tablestore/table_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

var _ kvstore.Table = &tableView{}

// tableView allows table in a TableStore to be accessed as if it were a Store.
// tableView allows table in a New to be accessed as if it were a Store.
type tableView struct {
// base is the underlying store.
base kvstore.Store
Expand All @@ -19,7 +19,7 @@ type tableView struct {
prefix uint32
}

// NewTableView creates a new view into a table in a TableStore.
// NewTableView creates a new view into a table in a New.
func newTableView(
base kvstore.Store,
name string,
Expand Down Expand Up @@ -135,7 +135,7 @@ func (t *tableView) Destroy() error {
return t.base.Destroy()
}

// tableBatch is a batch for a table in a TableStore.
// tableBatch is a batch for a table in a New.
type tableBatch struct {
table kvstore.Table
batch kvstore.Batch[[]byte]
Expand Down
13 changes: 4 additions & 9 deletions common/kvstore/test/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,27 +36,22 @@ var storeBuilders = []func(logger logging.Logger, path string) (kvstore.Store, e
return ttl.TTLWrapper(context.Background(), logger, store, 0), nil
},
func(logger logging.Logger, path string) (kvstore.Store, error) {
store := mapstore.NewStore()
tableStore, err := tablestore.Wrapper(logger, store)
tableStore, err := tablestore.MapStore.New(logger, path)
if err != nil {
return nil, err
}
store, err = tableStore.GetTable("test")
store, err := tableStore.GetTable("test")
if err != nil {
return nil, err
}
return store, nil
},
func(logger logging.Logger, path string) (kvstore.Store, error) {
store, err := leveldb.NewStore(logger, path)
if err != nil {
return nil, err
}
tableStore, err := tablestore.Wrapper(logger, store)
tableStore, err := tablestore.LevelDB.New(logger, path)
if err != nil {
return nil, err
}
store, err = tableStore.GetTable("test")
store, err := tableStore.GetTable("test")
if err != nil {
return nil, err
}
Expand Down

0 comments on commit ca76d4c

Please sign in to comment.