diff --git a/README.md b/README.md index a7946e4..9da20da 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ To disable SSL and run Cosmium on HTTP instead, you can use the `-DisableTls` fl - **-Persist**: Saves data to the given path on application exit (When `-InitialData` argument is not supplied, it will try to load data from path supplied in `-Persist`) - **-Port**: Listen port (default 8081) - **-LogLevel**: Sets the logging level (one of: debug, info, error, silent) (default info) +- **-DataStore**: Allows selecting [storage backend](#data-storage-backends) (default "json") These arguments allow you to configure various aspects of Cosmium's behavior according to your requirements. @@ -99,6 +100,18 @@ All mentioned arguments can also be set using environment variables: - **COSMIUM_PORT** for `-Port` - **COSMIUM_LOGLEVEL** for `-LogLevel` +### Data Storage Backends + +Cosmium supports multiple storage backends for saving, loading, and managing data at runtime. + +| Backend | Storage Location | Write Behavior | Memory Usage | Supports Initial JSON Load | +|----------|--------------------------|--------------------------|----------------------|----------------------------| +| `json` (default) | JSON file on disk 📄 | On application exit ⏳ | 🛑 More than Badger | ✅ Yes | +| `badger` | BadgerDB database on disk ⚡ | Immediately on write 🚀 | ✅ Less than JSON | ❌ No | + + +The `badger` backend is generally recommended as it uses less memory and writes data to disk immediately. However, if you need to load initial data from a JSON file, use the `json` backend. + # License This project is [MIT licensed](./LICENSE). diff --git a/api/config/config.go b/api/config/config.go index 787b978..e57d3d6 100644 --- a/api/config/config.go +++ b/api/config/config.go @@ -16,7 +16,7 @@ const ( ) const ( - DataStoreMap = "map" + DataStoreJson = "json" DataStoreBadger = "badger" ) @@ -33,8 +33,8 @@ func ParseFlags() ServerConfig { persistDataPath := flag.String("Persist", "", "Saves data to given path on application exit") logLevel := NewEnumValue("info", []string{"debug", "info", "error", "silent"}) flag.Var(logLevel, "LogLevel", fmt.Sprintf("Sets the logging level %s", logLevel.AllowedValuesList())) - dataStore := NewEnumValue("map", []string{DataStoreMap, DataStoreBadger}) - flag.Var(dataStore, "DataStore", fmt.Sprintf("Sets the data store %s, (badger is currently in the experimental phase)", dataStore.AllowedValuesList())) + dataStore := NewEnumValue("json", []string{DataStoreJson, DataStoreBadger}) + flag.Var(dataStore, "DataStore", fmt.Sprintf("Sets the data store %s", dataStore.AllowedValuesList())) flag.Parse() setFlagsFromEnvironment() @@ -79,8 +79,8 @@ func (c *ServerConfig) PopulateCalculatedFields() { if c.PersistDataFilePath != "" { fileInfo, _ := os.Stat(c.PersistDataFilePath) - if c.DataStore == DataStoreMap && fileInfo.IsDir() { - logger.ErrorLn("--Persist cannot be a directory when using default data store") + if c.DataStore == DataStoreJson && fileInfo.IsDir() { + logger.ErrorLn("--Persist cannot be a directory when using json data store") os.Exit(1) } diff --git a/api/tests/collections_test.go b/api/tests/collections_test.go index 251ed57..e9cbc3d 100644 --- a/api/tests/collections_test.go +++ b/api/tests/collections_test.go @@ -13,7 +13,7 @@ import ( ) func Test_Collections(t *testing.T) { - presets := []testPreset{PresetMapStore, PresetBadgerStore} + presets := []testPreset{PresetJsonStore, PresetBadgerStore} setUp := func(ts *TestServer, client *azcosmos.Client) *azcosmos.DatabaseClient { ts.DataStore.CreateDatabase(datastore.Database{ID: testDatabaseName}) diff --git a/api/tests/config_test.go b/api/tests/config_test.go index c9c5628..5ac8922 100644 --- a/api/tests/config_test.go +++ b/api/tests/config_test.go @@ -10,7 +10,7 @@ import ( "github.com/pikami/cosmium/api/config" "github.com/pikami/cosmium/internal/datastore" badgerdatastore "github.com/pikami/cosmium/internal/datastore/badger_datastore" - mapdatastore "github.com/pikami/cosmium/internal/datastore/map_datastore" + jsondatastore "github.com/pikami/cosmium/internal/datastore/json_datastore" "github.com/pikami/cosmium/internal/logger" "github.com/stretchr/testify/assert" ) @@ -26,7 +26,7 @@ func getDefaultTestServerConfig() *config.ServerConfig { AccountKey: config.DefaultAccountKey, ExplorerPath: "/tmp/nothing", ExplorerBaseUrlLocation: config.ExplorerBaseUrlLocation, - DataStore: "map", + DataStore: "json", } } @@ -34,9 +34,9 @@ func runTestServerCustomConfig(configuration *config.ServerConfig) *TestServer { var dataStore datastore.DataStore switch configuration.DataStore { case config.DataStoreBadger: - dataStore = badgerdatastore.NewBadgerDataStore() + dataStore = badgerdatastore.NewBadgerDataStore(badgerdatastore.BadgerDataStoreOptions{}) default: - dataStore = mapdatastore.NewMapDataStore(mapdatastore.MapDataStoreOptions{}) + dataStore = jsondatastore.NewJsonDataStore(jsondatastore.JsonDataStoreOptions{}) } api := api.NewApiServer(dataStore, configuration) @@ -71,7 +71,7 @@ type testFunc func(t *testing.T, ts *TestServer, cosmosClient *azcosmos.Client) type testPreset string const ( - PresetMapStore testPreset = "MapDS" + PresetJsonStore testPreset = "JsonDS" PresetBadgerStore testPreset = "BadgerDS" ) @@ -84,8 +84,8 @@ func runTestsWithPreset(t *testing.T, name string, testPreset testPreset, f test switch testPreset { case PresetBadgerStore: serverConfig.DataStore = config.DataStoreBadger - case PresetMapStore: - serverConfig.DataStore = config.DataStoreMap + case PresetJsonStore: + serverConfig.DataStore = config.DataStoreJson } ts := runTestServerCustomConfig(serverConfig) diff --git a/api/tests/databases_test.go b/api/tests/databases_test.go index 323e4da..f94959a 100644 --- a/api/tests/databases_test.go +++ b/api/tests/databases_test.go @@ -13,7 +13,7 @@ import ( ) func Test_Databases(t *testing.T) { - presets := []testPreset{PresetMapStore, PresetBadgerStore} + presets := []testPreset{PresetJsonStore, PresetBadgerStore} runTestsWithPresets(t, "Database Create", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) { t.Run("Should create database", func(t *testing.T) { diff --git a/api/tests/documents_test.go b/api/tests/documents_test.go index e3988f0..b2431d8 100644 --- a/api/tests/documents_test.go +++ b/api/tests/documents_test.go @@ -81,7 +81,7 @@ func documents_InitializeDb(t *testing.T, ts *TestServer) *azcosmos.ContainerCli } func Test_Documents(t *testing.T) { - presets := []testPreset{PresetMapStore, PresetBadgerStore} + presets := []testPreset{PresetJsonStore, PresetBadgerStore} runTestsWithPresets(t, "Test_Documents", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) { collectionClient := documents_InitializeDb(t, ts) diff --git a/cmd/server/server.go b/cmd/server/server.go index 3c47440..c087361 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -9,7 +9,7 @@ import ( "github.com/pikami/cosmium/api/config" "github.com/pikami/cosmium/internal/datastore" badgerdatastore "github.com/pikami/cosmium/internal/datastore/badger_datastore" - mapdatastore "github.com/pikami/cosmium/internal/datastore/map_datastore" + jsondatastore "github.com/pikami/cosmium/internal/datastore/json_datastore" "github.com/pikami/cosmium/internal/logger" ) @@ -24,7 +24,7 @@ func main() { }) logger.InfoLn("Using Badger data store") default: - dataStore = mapdatastore.NewMapDataStore(mapdatastore.MapDataStoreOptions{ + dataStore = jsondatastore.NewJsonDataStore(jsondatastore.JsonDataStoreOptions{ InitialDataFilePath: configuration.InitialDataFilePath, PersistDataFilePath: configuration.PersistDataFilePath, }) diff --git a/go.mod b/go.mod index 139abea..efe78ee 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/gin-gonic/gin v1.10.0 github.com/google/uuid v1.6.0 github.com/stretchr/testify v1.10.0 + github.com/vmihailenco/msgpack/v5 v5.4.1 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 ) @@ -44,7 +45,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect - github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect diff --git a/internal/datastore/map_datastore/array_document_iterator.go b/internal/datastore/json_datastore/array_document_iterator.go similarity index 95% rename from internal/datastore/map_datastore/array_document_iterator.go rename to internal/datastore/json_datastore/array_document_iterator.go index 7796609..0691566 100644 --- a/internal/datastore/map_datastore/array_document_iterator.go +++ b/internal/datastore/json_datastore/array_document_iterator.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import "github.com/pikami/cosmium/internal/datastore" diff --git a/internal/datastore/map_datastore/collections.go b/internal/datastore/json_datastore/collections.go similarity index 84% rename from internal/datastore/map_datastore/collections.go rename to internal/datastore/json_datastore/collections.go index fd8a240..505279b 100644 --- a/internal/datastore/map_datastore/collections.go +++ b/internal/datastore/json_datastore/collections.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -11,7 +11,7 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllCollections(databaseId string) ([]datastore.Collection, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllCollections(databaseId string) ([]datastore.Collection, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -22,7 +22,7 @@ func (r *MapDataStore) GetAllCollections(databaseId string) ([]datastore.Collect return maps.Values(r.storeState.Collections[databaseId]), datastore.StatusOk } -func (r *MapDataStore) GetCollection(databaseId string, collectionId string) (datastore.Collection, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetCollection(databaseId string, collectionId string) (datastore.Collection, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -37,7 +37,7 @@ func (r *MapDataStore) GetCollection(databaseId string, collectionId string) (da return r.storeState.Collections[databaseId][collectionId], datastore.StatusOk } -func (r *MapDataStore) DeleteCollection(databaseId string, collectionId string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteCollection(databaseId string, collectionId string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -58,7 +58,7 @@ func (r *MapDataStore) DeleteCollection(databaseId string, collectionId string) return datastore.StatusOk } -func (r *MapDataStore) CreateCollection(databaseId string, newCollection datastore.Collection) (datastore.Collection, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateCollection(databaseId string, newCollection datastore.Collection) (datastore.Collection, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() diff --git a/internal/datastore/map_datastore/databases.go b/internal/datastore/json_datastore/databases.go similarity index 81% rename from internal/datastore/map_datastore/databases.go rename to internal/datastore/json_datastore/databases.go index 3f451b5..6386398 100644 --- a/internal/datastore/map_datastore/databases.go +++ b/internal/datastore/json_datastore/databases.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -10,14 +10,14 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllDatabases() ([]datastore.Database, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllDatabases() ([]datastore.Database, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() return maps.Values(r.storeState.Databases), datastore.StatusOk } -func (r *MapDataStore) GetDatabase(id string) (datastore.Database, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetDatabase(id string) (datastore.Database, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -28,7 +28,7 @@ func (r *MapDataStore) GetDatabase(id string) (datastore.Database, datastore.Dat return datastore.Database{}, datastore.StatusNotFound } -func (r *MapDataStore) DeleteDatabase(id string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteDatabase(id string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -46,7 +46,7 @@ func (r *MapDataStore) DeleteDatabase(id string) datastore.DataStoreStatus { return datastore.StatusOk } -func (r *MapDataStore) CreateDatabase(newDatabase datastore.Database) (datastore.Database, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateDatabase(newDatabase datastore.Database) (datastore.Database, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() diff --git a/internal/datastore/map_datastore/documents.go b/internal/datastore/json_datastore/documents.go similarity index 80% rename from internal/datastore/map_datastore/documents.go rename to internal/datastore/json_datastore/documents.go index 109a226..d9884a2 100644 --- a/internal/datastore/map_datastore/documents.go +++ b/internal/datastore/json_datastore/documents.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -10,7 +10,7 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllDocuments(databaseId string, collectionId string) ([]datastore.Document, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllDocuments(databaseId string, collectionId string) ([]datastore.Document, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -25,7 +25,7 @@ func (r *MapDataStore) GetAllDocuments(databaseId string, collectionId string) ( return maps.Values(r.storeState.Documents[databaseId][collectionId]), datastore.StatusOk } -func (r *MapDataStore) GetDocument(databaseId string, collectionId string, documentId string) (datastore.Document, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetDocument(databaseId string, collectionId string, documentId string) (datastore.Document, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -44,7 +44,7 @@ func (r *MapDataStore) GetDocument(databaseId string, collectionId string, docum return r.storeState.Documents[databaseId][collectionId][documentId], datastore.StatusOk } -func (r *MapDataStore) DeleteDocument(databaseId string, collectionId string, documentId string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteDocument(databaseId string, collectionId string, documentId string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -65,7 +65,7 @@ func (r *MapDataStore) DeleteDocument(databaseId string, collectionId string, do return datastore.StatusOk } -func (r *MapDataStore) CreateDocument(databaseId string, collectionId string, document map[string]interface{}) (datastore.Document, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateDocument(databaseId string, collectionId string, document map[string]interface{}) (datastore.Document, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() @@ -100,7 +100,7 @@ func (r *MapDataStore) CreateDocument(databaseId string, collectionId string, do return document, datastore.StatusOk } -func (r *MapDataStore) GetDocumentIterator(databaseId string, collectionId string) (datastore.DocumentIterator, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetDocumentIterator(databaseId string, collectionId string) (datastore.DocumentIterator, datastore.DataStoreStatus) { documents, status := r.GetAllDocuments(databaseId, collectionId) if status != datastore.StatusOk { return nil, status diff --git a/internal/datastore/map_datastore/map_datastore.go b/internal/datastore/json_datastore/map_datastore.go similarity index 82% rename from internal/datastore/map_datastore/map_datastore.go rename to internal/datastore/json_datastore/map_datastore.go index fd3121b..39c962f 100644 --- a/internal/datastore/map_datastore/map_datastore.go +++ b/internal/datastore/json_datastore/map_datastore.go @@ -1,21 +1,21 @@ -package mapdatastore +package jsondatastore import "github.com/pikami/cosmium/internal/datastore" -type MapDataStore struct { +type JsonDataStore struct { storeState State initialDataFilePath string persistDataFilePath string } -type MapDataStoreOptions struct { +type JsonDataStoreOptions struct { InitialDataFilePath string PersistDataFilePath string } -func NewMapDataStore(options MapDataStoreOptions) *MapDataStore { - dataStore := &MapDataStore{ +func NewJsonDataStore(options JsonDataStoreOptions) *JsonDataStore { + dataStore := &JsonDataStore{ storeState: State{ Databases: make(map[string]datastore.Database), Collections: make(map[string]map[string]datastore.Collection), diff --git a/internal/datastore/map_datastore/partition_key_ranges.go b/internal/datastore/json_datastore/partition_key_ranges.go similarity index 88% rename from internal/datastore/map_datastore/partition_key_ranges.go rename to internal/datastore/json_datastore/partition_key_ranges.go index 81c383f..f6d7742 100644 --- a/internal/datastore/map_datastore/partition_key_ranges.go +++ b/internal/datastore/json_datastore/partition_key_ranges.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -9,7 +9,7 @@ import ( ) // I have no idea what this is tbh -func (r *MapDataStore) GetPartitionKeyRanges(databaseId string, collectionId string) ([]datastore.PartitionKeyRange, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetPartitionKeyRanges(databaseId string, collectionId string) ([]datastore.PartitionKeyRange, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() diff --git a/internal/datastore/map_datastore/state.go b/internal/datastore/json_datastore/state.go similarity index 94% rename from internal/datastore/map_datastore/state.go rename to internal/datastore/json_datastore/state.go index 7cb3749..166ea43 100644 --- a/internal/datastore/map_datastore/state.go +++ b/internal/datastore/json_datastore/state.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "encoding/json" @@ -33,7 +33,7 @@ type State struct { UserDefinedFunctions map[string]map[string]map[string]datastore.UserDefinedFunction `json:"udfs"` } -func (r *MapDataStore) InitializeDataStore() { +func (r *JsonDataStore) InitializeDataStore() { if r.initialDataFilePath != "" { r.LoadStateFS(r.initialDataFilePath) return @@ -55,7 +55,7 @@ func (r *MapDataStore) InitializeDataStore() { } } -func (r *MapDataStore) LoadStateFS(filePath string) { +func (r *JsonDataStore) LoadStateFS(filePath string) { data, err := os.ReadFile(filePath) if err != nil { log.Fatalf("Error reading state JSON file: %v", err) @@ -68,7 +68,7 @@ func (r *MapDataStore) LoadStateFS(filePath string) { } } -func (r *MapDataStore) LoadStateJSON(jsonData string) error { +func (r *JsonDataStore) LoadStateJSON(jsonData string) error { r.storeState.Lock() defer r.storeState.Unlock() @@ -94,7 +94,7 @@ func (r *MapDataStore) LoadStateJSON(jsonData string) error { return nil } -func (r *MapDataStore) SaveStateFS(filePath string) { +func (r *JsonDataStore) SaveStateFS(filePath string) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -115,7 +115,7 @@ func (r *MapDataStore) SaveStateFS(filePath string) { logger.Infof("User defined functions: %d\n", getLength(r.storeState.UserDefinedFunctions)) } -func (r *MapDataStore) DumpToJson() (string, error) { +func (r *JsonDataStore) DumpToJson() (string, error) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -129,7 +129,7 @@ func (r *MapDataStore) DumpToJson() (string, error) { } -func (r *MapDataStore) Close() { +func (r *JsonDataStore) Close() { if r.persistDataFilePath != "" { r.SaveStateFS(r.persistDataFilePath) } @@ -163,7 +163,7 @@ func getLength(v interface{}) int { return count } -func (r *MapDataStore) ensureStoreStateNoNullReferences() { +func (r *JsonDataStore) ensureStoreStateNoNullReferences() { if r.storeState.Databases == nil { r.storeState.Databases = make(map[string]datastore.Database) } diff --git a/internal/datastore/map_datastore/stored_procedures.go b/internal/datastore/json_datastore/stored_procedures.go similarity index 79% rename from internal/datastore/map_datastore/stored_procedures.go rename to internal/datastore/json_datastore/stored_procedures.go index 52b7605..de18258 100644 --- a/internal/datastore/map_datastore/stored_procedures.go +++ b/internal/datastore/json_datastore/stored_procedures.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -10,14 +10,14 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllStoredProcedures(databaseId string, collectionId string) ([]datastore.StoredProcedure, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllStoredProcedures(databaseId string, collectionId string) ([]datastore.StoredProcedure, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() return maps.Values(r.storeState.StoredProcedures[databaseId][collectionId]), datastore.StatusOk } -func (r *MapDataStore) GetStoredProcedure(databaseId string, collectionId string, spId string) (datastore.StoredProcedure, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetStoredProcedure(databaseId string, collectionId string, spId string) (datastore.StoredProcedure, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -36,7 +36,7 @@ func (r *MapDataStore) GetStoredProcedure(databaseId string, collectionId string return datastore.StoredProcedure{}, datastore.StatusNotFound } -func (r *MapDataStore) DeleteStoredProcedure(databaseId string, collectionId string, spId string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteStoredProcedure(databaseId string, collectionId string, spId string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -57,7 +57,7 @@ func (r *MapDataStore) DeleteStoredProcedure(databaseId string, collectionId str return datastore.StatusOk } -func (r *MapDataStore) CreateStoredProcedure(databaseId string, collectionId string, sp datastore.StoredProcedure) (datastore.StoredProcedure, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateStoredProcedure(databaseId string, collectionId string, sp datastore.StoredProcedure) (datastore.StoredProcedure, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() diff --git a/internal/datastore/map_datastore/triggers.go b/internal/datastore/json_datastore/triggers.go similarity index 80% rename from internal/datastore/map_datastore/triggers.go rename to internal/datastore/json_datastore/triggers.go index 390e0fb..11b8f31 100644 --- a/internal/datastore/map_datastore/triggers.go +++ b/internal/datastore/json_datastore/triggers.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -10,14 +10,14 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllTriggers(databaseId string, collectionId string) ([]datastore.Trigger, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllTriggers(databaseId string, collectionId string) ([]datastore.Trigger, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() return maps.Values(r.storeState.Triggers[databaseId][collectionId]), datastore.StatusOk } -func (r *MapDataStore) GetTrigger(databaseId string, collectionId string, triggerId string) (datastore.Trigger, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetTrigger(databaseId string, collectionId string, triggerId string) (datastore.Trigger, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -36,7 +36,7 @@ func (r *MapDataStore) GetTrigger(databaseId string, collectionId string, trigge return datastore.Trigger{}, datastore.StatusNotFound } -func (r *MapDataStore) DeleteTrigger(databaseId string, collectionId string, triggerId string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteTrigger(databaseId string, collectionId string, triggerId string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -57,7 +57,7 @@ func (r *MapDataStore) DeleteTrigger(databaseId string, collectionId string, tri return datastore.StatusOk } -func (r *MapDataStore) CreateTrigger(databaseId string, collectionId string, trigger datastore.Trigger) (datastore.Trigger, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateTrigger(databaseId string, collectionId string, trigger datastore.Trigger) (datastore.Trigger, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() diff --git a/internal/datastore/map_datastore/user_defined_functions.go b/internal/datastore/json_datastore/user_defined_functions.go similarity index 78% rename from internal/datastore/map_datastore/user_defined_functions.go rename to internal/datastore/json_datastore/user_defined_functions.go index 6bb6673..d4a4a2a 100644 --- a/internal/datastore/map_datastore/user_defined_functions.go +++ b/internal/datastore/json_datastore/user_defined_functions.go @@ -1,4 +1,4 @@ -package mapdatastore +package jsondatastore import ( "fmt" @@ -10,14 +10,14 @@ import ( "golang.org/x/exp/maps" ) -func (r *MapDataStore) GetAllUserDefinedFunctions(databaseId string, collectionId string) ([]datastore.UserDefinedFunction, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetAllUserDefinedFunctions(databaseId string, collectionId string) ([]datastore.UserDefinedFunction, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() return maps.Values(r.storeState.UserDefinedFunctions[databaseId][collectionId]), datastore.StatusOk } -func (r *MapDataStore) GetUserDefinedFunction(databaseId string, collectionId string, udfId string) (datastore.UserDefinedFunction, datastore.DataStoreStatus) { +func (r *JsonDataStore) GetUserDefinedFunction(databaseId string, collectionId string, udfId string) (datastore.UserDefinedFunction, datastore.DataStoreStatus) { r.storeState.RLock() defer r.storeState.RUnlock() @@ -36,7 +36,7 @@ func (r *MapDataStore) GetUserDefinedFunction(databaseId string, collectionId st return datastore.UserDefinedFunction{}, datastore.StatusNotFound } -func (r *MapDataStore) DeleteUserDefinedFunction(databaseId string, collectionId string, udfId string) datastore.DataStoreStatus { +func (r *JsonDataStore) DeleteUserDefinedFunction(databaseId string, collectionId string, udfId string) datastore.DataStoreStatus { r.storeState.Lock() defer r.storeState.Unlock() @@ -57,7 +57,7 @@ func (r *MapDataStore) DeleteUserDefinedFunction(databaseId string, collectionId return datastore.StatusOk } -func (r *MapDataStore) CreateUserDefinedFunction(databaseId string, collectionId string, udf datastore.UserDefinedFunction) (datastore.UserDefinedFunction, datastore.DataStoreStatus) { +func (r *JsonDataStore) CreateUserDefinedFunction(databaseId string, collectionId string, udf datastore.UserDefinedFunction) (datastore.UserDefinedFunction, datastore.DataStoreStatus) { r.storeState.Lock() defer r.storeState.Unlock() diff --git a/sharedlibrary/sharedlibrary.go b/sharedlibrary/sharedlibrary.go index beac3e4..111256f 100644 --- a/sharedlibrary/sharedlibrary.go +++ b/sharedlibrary/sharedlibrary.go @@ -13,7 +13,7 @@ import ( "github.com/pikami/cosmium/api/config" "github.com/pikami/cosmium/internal/datastore" badgerdatastore "github.com/pikami/cosmium/internal/datastore/badger_datastore" - mapdatastore "github.com/pikami/cosmium/internal/datastore/map_datastore" + jsondatastore "github.com/pikami/cosmium/internal/datastore/json_datastore" ) //export CreateServerInstance @@ -41,7 +41,7 @@ func CreateServerInstance(serverName *C.char, configurationJSON *C.char) int { PersistDataFilePath: configuration.PersistDataFilePath, }) default: - dataStore = mapdatastore.NewMapDataStore(mapdatastore.MapDataStoreOptions{ + dataStore = jsondatastore.NewJsonDataStore(jsondatastore.JsonDataStoreOptions{ InitialDataFilePath: configuration.InitialDataFilePath, PersistDataFilePath: configuration.PersistDataFilePath, }) @@ -96,8 +96,8 @@ func LoadServerInstanceState(serverName *C.char, stateJSON *C.char) int { stateJSONStr := C.GoString(stateJSON) if serverInstance, ok := getInstance(serverNameStr); ok { - if mapDS, ok := serverInstance.dataStore.(*mapdatastore.MapDataStore); ok { - err := mapDS.LoadStateJSON(stateJSONStr) + if jsonDS, ok := serverInstance.dataStore.(*jsondatastore.JsonDataStore); ok { + err := jsonDS.LoadStateJSON(stateJSONStr) if err != nil { return ResponseFailedToLoadState }