From 8530c450741a48e8fb3a03928361a8a1958fffaa Mon Sep 17 00:00:00 2001 From: lash Date: Wed, 22 Jan 2025 09:37:11 +0000 Subject: [PATCH] Enable db text/binary mode set in override, config --- config/config.go | 49 ++++++++++++++++++++++++++++---------- storage/conn.go | 12 ++++++++++ storage/parse.go | 9 +++++++ storage/storage_service.go | 6 ++++- 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/config/config.go b/config/config.go index 2a2c9f5..4f2ba23 100644 --- a/config/config.go +++ b/config/config.go @@ -15,12 +15,27 @@ var ( DefaultLanguage string dbConn string dbConnMissing bool + dbConnMode storage.DbMode stateDbConn string + stateDbConnMode storage.DbMode resourceDbConn string + resourceDbConnMode storage.DbMode userDbConn string + userDbConnMode storage.DbMode Languages []string ) +type Override struct { + DbConn *string + DbConnMode storage.DbMode + StateConn *string + StateConnMode storage.DbMode + ResourceConn *string + ResourceConnMode storage.DbMode + UserConn *string + UserConnMode storage.DbMode +} + func setLanguage() error { defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage) languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",") @@ -47,19 +62,24 @@ func setConn() error { return nil } -func ApplyConn(connStr *string, stateConnStr *string, resourceConnStr *string, userConnStr *string) { - logg.Infof("applyconn", "state", stateConnStr, "user", userConnStr) - if connStr != nil { - dbConn = *connStr +func ApplyConn(override *Override) { + if override.DbConn != nil { + dbConn = *override.DbConn + dbConnMode = override.DbConnMode } - if stateConnStr != nil { - stateDbConn = *stateConnStr + if override.StateConn != nil { + stateDbConn = *override.StateConn + stateDbConnMode = override.StateConnMode } - if resourceConnStr != nil { - resourceDbConn = *resourceConnStr + if override.ResourceConn != nil { + resourceDbConn = *override.ResourceConn + resourceDbConnMode = override.ResourceConnMode } - if userConnStr != nil { - userDbConn = *userConnStr + if override.UserConn != nil { + userDbConn = *override.UserConn + if override.UserConnMode != storage.DBMODE_BINARY { + logg.Warnf("user db non-binary mode ignored") + } } if dbConn == "?" { @@ -68,28 +88,31 @@ func ApplyConn(connStr *string, stateConnStr *string, resourceConnStr *string, u if stateDbConn == "?" { stateDbConn = dbConn + stateDbConnMode = dbConnMode } if resourceDbConn == "?" { resourceDbConn = dbConn + resourceDbConnMode = dbConnMode } if userDbConn == "?" { userDbConn = dbConn + //userDbConnMode = dbConnMode } } func GetConns() (storage.Conns, error) { o := storage.NewConns() - c, err := storage.ToConnData(stateDbConn) + c, err := storage.ToConnDataMode(stateDbConn, stateDbConnMode) if err != nil { return o, err } o.Set(c, storage.STORETYPE_STATE) - c, err = storage.ToConnData(resourceDbConn) + c, err = storage.ToConnDataMode(resourceDbConn, resourceDbConnMode) if err != nil { return o, err } o.Set(c, storage.STORETYPE_RESOURCE) - c, err = storage.ToConnData(userDbConn) + c, err = storage.ToConnDataMode(userDbConn, userDbConnMode) if err != nil { return o, err } diff --git a/storage/conn.go b/storage/conn.go index 97daaca..1403db1 100644 --- a/storage/conn.go +++ b/storage/conn.go @@ -5,6 +5,8 @@ import ( "net/url" ) +type DbMode uint8 + const ( DBTYPE_NONE = iota DBTYPE_MEM @@ -13,6 +15,11 @@ const ( DBTYPE_POSTGRES ) +const ( + DBMODE_BINARY DbMode = iota + DBMODE_TEXT +) + const ( STORETYPE_STATE = iota STORETYPE_RESOURCE @@ -52,6 +59,7 @@ type ConnData struct { typ int str string domain string + mode DbMode } func (cd *ConnData) DbType() int { @@ -66,6 +74,10 @@ func (cd *ConnData) Domain() string { return cd.domain } +func (cd *ConnData) Mode() DbMode { + return cd.mode +} + func (cd *ConnData) Path() string { v, _ := url.Parse(cd.str) v.RawQuery = "" diff --git a/storage/parse.go b/storage/parse.go index 119e04f..3bdd802 100644 --- a/storage/parse.go +++ b/storage/parse.go @@ -61,6 +61,15 @@ func probeMem(s string) (string, string, bool) { return "", "", true } +func ToConnDataMode(connStr string, mode DbMode) (ConnData, error) { + o, err := ToConnData(connStr) + if err != nil { + return o, err + } + o.mode = mode + return o, nil +} + func ToConnData(connStr string) (ConnData, error) { var o ConnData diff --git a/storage/storage_service.go b/storage/storage_service.go index d4e409f..18b7854 100644 --- a/storage/storage_service.go +++ b/storage/storage_service.go @@ -105,7 +105,11 @@ func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, section string, if err != nil { return nil, err } - newDb = fsdb.NewFsDb().WithBinary() + fsdbInstance := fsdb.NewFsDb() + if connData.Mode() == DBMODE_BINARY { + fsdbInstance = fsdbInstance.WithBinary() + } + newDb = fsdbInstance } else if dbTyp == DBTYPE_MEM { logg.WarnCtxf(ctx, "using volatile storage (memdb)") newDb = memdb.NewMemDb()