no precaching for loader (precache parameter)

This commit is contained in:
Radu Ioan Fericean
2013-11-05 20:16:39 +02:00
parent 68a010a476
commit 455ed9e547
7 changed files with 31 additions and 27 deletions

View File

@@ -312,7 +312,7 @@ func main() {
var logDb engine.LogStorage
var loadDb engine.LoadStorage
var cdrDb engine.CdrStorage
dataDb, err = engine.ConfigureDataStorage(cfg.DataDBType, cfg.DataDBHost, cfg.DataDBPort, cfg.DataDBName, cfg.DataDBUser, cfg.DataDBPass, cfg.DBDataEncoding)
dataDb, err = engine.ConfigureDataStorage(cfg.DataDBType, cfg.DataDBHost, cfg.DataDBPort, cfg.DataDBName, cfg.DataDBUser, cfg.DataDBPass, cfg.DBDataEncoding, true)
if err != nil { // Cannot configure getter database, show stopper
engine.Logger.Crit(fmt.Sprintf("Could not configure dataDb: %s exiting!", err))
return

View File

@@ -72,12 +72,12 @@ func main() {
var storDb engine.LoadStorage
// Init necessary db connections
if *fromStorDb {
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding)
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding, false)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
} else if *toStorDb { // Import from csv files to storDb
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
} else { // Default load from csv files to dataDb
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding)
dataDb, errDataDb = engine.ConfigureDataStorage(*data_db_type, *data_db_host, *data_db_port, *data_db_name, *data_db_user, *data_db_pass, *dbdata_encoding, false)
}
// Defer databases opened to be closed when we are done
for _, db := range []engine.Storage{dataDb, storDb} {

View File

@@ -134,7 +134,7 @@ func init() {
csvr.LoadActionTriggers()
csvr.LoadAccountActions()
csvr.WriteToDatabase(false, false)
storageGetter.PreCache()
storageGetter.PreCache(nil, nil)
}
func TestLoadDestinations(t *testing.T) {

View File

@@ -62,7 +62,7 @@ Interface for storage providers.
*/
type DataStorage interface {
Storage
PreCache() error
PreCache([]string, []string) error
GetRatingPlan(string) (*RatingPlan, error)
SetRatingPlan(*RatingPlan) error
GetRatingProfile(string) (*RatingProfile, error)

View File

@@ -44,7 +44,7 @@ func (ms *MapStorage) Flush() error {
return nil
}
func (ms *MapStorage) PreCache() error {
func (ms *MapStorage) PreCache(dKeys, rppKeys []string) error {
for k, _ := range ms.dict {
if strings.HasPrefix(k, DESTINATION_PREFIX) {
if _, err := ms.GetDestination(k[len(DESTINATION_PREFIX):]); err != nil {

View File

@@ -80,26 +80,28 @@ func (rs *RedisStorage) Flush() (err error) {
return
}
func (rs *RedisStorage) PreCache() error {
if keys, err := rs.db.Keys(DESTINATION_PREFIX + "*"); err == nil {
for _, key := range keys {
if _, err = rs.GetDestination(key[len(DESTINATION_PREFIX):]); err != nil {
return err
}
func (rs *RedisStorage) PreCache(dKeys, rpKeys []string) (err error) {
if dKeys == nil {
if dKeys, err = rs.db.Keys(DESTINATION_PREFIX + "*"); err != nil {
return
}
} else {
return err
}
if keys, err := rs.db.Keys(RATING_PLAN_PREFIX + "*"); err == nil {
for _, key := range keys {
if _, err = rs.GetRatingPlan(key[len(RATING_PLAN_PREFIX):]); err != nil {
return err
}
for _, key := range dKeys {
if _, err = rs.GetDestination(key[len(DESTINATION_PREFIX):]); err != nil {
return err
}
} else {
return err
}
return nil
if rpKeys == nil {
if rpKeys, err = rs.db.Keys(RATING_PLAN_PREFIX + "*"); err != nil {
return
}
}
for _, key := range rpKeys {
if _, err = rs.GetRatingPlan(key[len(RATING_PLAN_PREFIX):]); err != nil {
return err
}
}
return
}
func (rs *RedisStorage) GetRatingPlan(key string) (rp *RatingPlan, err error) {

View File

@@ -27,7 +27,7 @@ import (
// Various helpers to deal with database
func ConfigureDataStorage(db_type, host, port, name, user, pass, marshaler string) (db DataStorage, err error) {
func ConfigureDataStorage(db_type, host, port, name, user, pass, marshaler string, precache bool) (db DataStorage, err error) {
var d Storage
switch db_type {
case utils.REDIS:
@@ -42,11 +42,13 @@ func ConfigureDataStorage(db_type, host, port, name, user, pass, marshaler strin
}
d, err = NewRedisStorage(host, db_nb, pass, marshaler)
db = d.(DataStorage)
Logger.Info("Started redis pre-caching...")
if err := db.PreCache(); err != nil {
Logger.Err(fmt.Sprintf("Pre-caching error: %v", err))
if precache {
Logger.Info("Started redis pre-caching...")
if err := db.PreCache(nil, nil); err != nil {
Logger.Err(fmt.Sprintf("Pre-caching error: %v", err))
}
Logger.Info("Pre-caching done!")
}
Logger.Info("Pre-caching done!")
case utils.MONGO:
d, err = NewMongoStorage(host, port, name, user, pass)
db = d.(DataStorage)