From 169b5500d3a8a4c0a287cbf61971e2142e998927 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Thu, 29 Aug 2024 12:22:14 +0300 Subject: [PATCH] Revise err handling for CSV storage constructor NewFileCSVStorage() now returns an error besides the storage struct itself, which is logged and returned instead of calling log.Fatal() which was causing the engine to crash. Fixed compilation errors by creating the CSVStorage separately and passing it as an argument to the TpReader constructor. Fixes #3962 --- cmd/cgr-loader/cgr-loader.go | 9 +++------ engine/libtest.go | 6 +++++- engine/storage_csv.go | 6 +++--- engine/z_loader_it_test.go | 14 ++++++++++---- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 348df518c..48f7380a2 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -274,17 +274,14 @@ func loadConfig() (ldrCfg *config.CGRConfig) { return } -func getLoader(cfg *config.CGRConfig) (loader engine.LoadReader, err error) { - +func getLoader(cfg *config.CGRConfig) (engine.LoadReader, error) { if gprefix := utils.MetaGoogleAPI + utils.ConcatenatedKeySep; strings.HasPrefix(*dataPath, gprefix) { // Default load from csv files to dataDb return engine.NewGoogleCSVStorage(cfg.LoaderCgrCfg().FieldSeparator, strings.TrimPrefix(*dataPath, gprefix)) } if !utils.IsURL(*dataPath) { - loader = engine.NewFileCSVStorage(cfg.LoaderCgrCfg().FieldSeparator, *dataPath) - return + return engine.NewFileCSVStorage(cfg.LoaderCgrCfg().FieldSeparator, *dataPath) } - loader = engine.NewURLCSVStorage(cfg.LoaderCgrCfg().FieldSeparator, *dataPath) - return + return engine.NewURLCSVStorage(cfg.LoaderCgrCfg().FieldSeparator, *dataPath), nil } func main() { diff --git a/engine/libtest.go b/engine/libtest.go index c0dafe11b..73f6870fc 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -172,7 +172,11 @@ func StopStartEngine(cfgPath string, waitEngine int) (*exec.Cmd, error) { func LoadTariffPlanFromFolder(tpPath, timezone string, dm *DataManager, disableReverse bool, cacheConns, schedConns []string) error { - loader, err := NewTpReader(dm.dataDB, NewFileCSVStorage(utils.CSVSep, tpPath), "", + csvStorage, err := NewFileCSVStorage(utils.CSVSep, tpPath) + if err != nil { + return utils.NewErrServerError(err) + } + loader, err := NewTpReader(dm.dataDB, csvStorage, "", timezone, cacheConns, schedConns, false) if err != nil { return utils.NewErrServerError(err) diff --git a/engine/storage_csv.go b/engine/storage_csv.go index 9175292b5..0ba516a79 100644 --- a/engine/storage_csv.go +++ b/engine/storage_csv.go @@ -86,10 +86,10 @@ func NewCSVStorage(sep rune, } // NewFileCSVStorage returns a csv storage that uses all files from the folder -func NewFileCSVStorage(sep rune, dataPath string) *CSVStorage { +func NewFileCSVStorage(sep rune, dataPath string) (*CSVStorage, error) { allFoldersPath, err := getAllFolders(dataPath) if err != nil { - log.Fatal(err) + return nil, fmt.Errorf("could not retrieve any folders from %q: %v", dataPath, err) } resourcesPaths := appendName(allFoldersPath, utils.ResourcesCsv) statsPaths := appendName(allFoldersPath, utils.StatsCsv) @@ -120,7 +120,7 @@ func NewFileCSVStorage(sep rune, dataPath string) *CSVStorage { rateProfilesFn, actionProfilesFn, accountsFn, - ) + ), nil } // NewStringCSVStorage creates a csv storage from strings diff --git a/engine/z_loader_it_test.go b/engine/z_loader_it_test.go index 034688419..b5223c82b 100644 --- a/engine/z_loader_it_test.go +++ b/engine/z_loader_it_test.go @@ -120,8 +120,11 @@ func testLoaderITRemoveLoad(t *testing.T) { t.Error("Failed validating data: ", err.Error()) } }*/ - loader, err = NewTpReader(dataDbCsv.DataDB(), NewFileCSVStorage(utils.CSVSep, - path.Join(*utils.DataDir, "tariffplans", *tpCsvScenario)), "", "", + csvStorage, err := NewFileCSVStorage(utils.CSVSep, path.Join(*utils.DataDir, "tariffplans", *tpCsvScenario)) + if err != nil { + t.Fatal(err) + } + loader, err = NewTpReader(dataDbCsv.DataDB(), csvStorage, "", "", []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}, nil, false) if err != nil { t.Error(err) @@ -169,8 +172,11 @@ func testLoaderITLoadFromCSV(t *testing.T) { t.Error("Failed validating data: ", err.Error()) } }*/ - loader, err = NewTpReader(dataDbCsv.DataDB(), NewFileCSVStorage(utils.CSVSep, - path.Join(*utils.DataDir, "tariffplans", *tpCsvScenario)), "", "", + csvStorage, err := NewFileCSVStorage(utils.CSVSep, path.Join(*utils.DataDir, "tariffplans", *tpCsvScenario)) + if err != nil { + t.Fatal(err) + } + loader, err = NewTpReader(dataDbCsv.DataDB(), csvStorage, "", "", []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}, nil, false) if err != nil { t.Error(err)