Use msgpack instead of gob; Added data persistance for badger data store

This commit is contained in:
Pijus Kamandulis
2025-03-13 23:59:07 +02:00
parent 5fe60d831a
commit 97eea30c97
8 changed files with 43 additions and 24 deletions

View File

@@ -1,8 +1,6 @@
package badgerdatastore
import (
"encoding/gob"
"github.com/dgraph-io/badger/v4"
"github.com/pikami/cosmium/internal/logger"
)
@@ -11,10 +9,15 @@ type BadgerDataStore struct {
db *badger.DB
}
func NewBadgerDataStore() *BadgerDataStore {
gob.Register([]interface{}{})
type BadgerDataStoreOptions struct {
PersistDataFilePath string
}
badgerOpts := badger.DefaultOptions("").WithInMemory(true)
func NewBadgerDataStore(options BadgerDataStoreOptions) *BadgerDataStore {
badgerOpts := badger.DefaultOptions(options.PersistDataFilePath)
if options.PersistDataFilePath == "" {
badgerOpts = badgerOpts.WithInMemory(true)
}
db, err := badger.Open(badgerOpts)
if err != nil {

View File

@@ -1,13 +1,11 @@
package badgerdatastore
import (
"bytes"
"encoding/gob"
"github.com/dgraph-io/badger/v4"
"github.com/pikami/cosmium/internal/datastore"
"github.com/pikami/cosmium/internal/logger"
"github.com/pikami/cosmium/internal/resourceid"
"github.com/vmihailenco/msgpack/v5"
)
const (
@@ -92,14 +90,13 @@ func insertKey(txn *badger.Txn, key string, value interface{}) datastore.DataSto
return datastore.Unknown
}
var buf bytes.Buffer
err = gob.NewEncoder(&buf).Encode(value)
buf, err := msgpack.Marshal(value)
if err != nil {
logger.ErrorLn("Error while encoding value:", err)
return datastore.Unknown
}
err = txn.Set([]byte(key), buf.Bytes())
err = txn.Set([]byte(key), buf)
if err != nil {
logger.ErrorLn("Error while setting key:", err)
return datastore.Unknown
@@ -135,7 +132,7 @@ func getKey(txn *badger.Txn, key string, value interface{}) datastore.DataStoreS
return datastore.Unknown
}
err = gob.NewDecoder(bytes.NewReader(val)).Decode(value)
err = msgpack.Unmarshal(val, &value)
if err != nil {
logger.ErrorLn("Error while decoding value:", err)
return datastore.Unknown
@@ -158,7 +155,7 @@ func keyExists(txn *badger.Txn, key string) (bool, error) {
}
func listByPrefix[T any](db *badger.DB, prefix string) ([]T, datastore.DataStoreStatus) {
var results []T
results := make([]T, 0)
err := db.View(func(txn *badger.Txn) error {
opts := badger.DefaultIteratorOptions

View File

@@ -1,12 +1,10 @@
package badgerdatastore
import (
"bytes"
"encoding/gob"
"github.com/dgraph-io/badger/v4"
"github.com/pikami/cosmium/internal/datastore"
"github.com/pikami/cosmium/internal/logger"
"github.com/vmihailenco/msgpack/v5"
)
type BadgerDocumentIterator struct {
@@ -43,7 +41,7 @@ func (i *BadgerDocumentIterator) Next() (datastore.Document, datastore.DataStore
}
current := &datastore.Document{}
err = gob.NewDecoder(bytes.NewReader(val)).Decode(current)
err = msgpack.Unmarshal(val, &current)
if err != nil {
logger.ErrorLn("Error while decoding value:", err)
return datastore.Document{}, datastore.Unknown