cache refactoring for save and load

This commit is contained in:
Radu Ioan Fericean
2016-06-07 22:43:02 +03:00
parent 95e8230a5c
commit e84e28faae
35 changed files with 736 additions and 605 deletions

View File

@@ -28,7 +28,6 @@ import (
"time"
"github.com/cgrates/cgrates/balancer2go"
"github.com/cgrates/cgrates/cache2go"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
@@ -53,17 +52,17 @@ type Responder struct {
Timeout time.Duration
Timezone string
cnt int64
responseCache *cache2go.ResponseCache
responseCache *ResponseCache
}
func (rs *Responder) SetTimeToLive(timeToLive time.Duration, out *int) error {
rs.responseCache = cache2go.NewResponseCache(timeToLive)
rs.responseCache = NewResponseCache(timeToLive)
return nil
}
func (rs *Responder) getCache() *cache2go.ResponseCache {
func (rs *Responder) getCache() *ResponseCache {
if rs.responseCache == nil {
rs.responseCache = cache2go.NewResponseCache(0)
rs.responseCache = NewResponseCache(0)
}
return rs.responseCache
}
@@ -179,7 +178,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
} else {
r, e := arg.MaxDebit()
if e != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Err: e,
})
return e
@@ -187,7 +186,7 @@ func (rs *Responder) MaxDebit(arg *CallDescriptor, reply *CallCost) (err error)
*reply = *r
}
}
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Value: reply,
Err: err,
})
@@ -218,7 +217,7 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
Subject: arg.Subject,
Context: utils.ALIAS_CONTEXT_RATING,
}, arg, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Err: err,
})
return err
@@ -229,7 +228,7 @@ func (rs *Responder) RefundIncrements(arg *CallDescriptor, reply *float64) (err
} else {
err = arg.RefundIncrements()
}
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Value: reply,
Err: err,
})
@@ -260,7 +259,7 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er
Subject: arg.Subject,
Context: utils.ALIAS_CONTEXT_RATING,
}, arg, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Err: err,
})
return err
@@ -271,7 +270,7 @@ func (rs *Responder) RefundRounding(arg *CallDescriptor, reply *float64) (err er
} else {
err = arg.RefundRounding()
}
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Value: reply,
Err: err,
})
@@ -324,7 +323,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
}
// replace user profile fields
if err := LoadUserProfile(ev, utils.EXTRA_FIELDS); err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
// replace aliases
@@ -338,7 +337,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
Subject: ev.Subject,
Context: utils.ALIAS_CONTEXT_RATING,
}, ev, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
@@ -347,7 +346,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
Account: ev.GetAccount(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT)}
dcs := &utils.DerivedChargers{}
if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
dcs, _ = dcs.AppendDefaultRun()
@@ -368,12 +367,12 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
}
startTime, err := ev.GetSetupTime(utils.META_DEFAULT, rs.Timezone)
if err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
usage, err := ev.GetDuration(utils.META_DEFAULT)
if err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
if usage == 0 {
@@ -396,7 +395,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
err = rs.GetMaxSessionTime(cd, &remainingDuration)
if err != nil {
*reply = 0
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
if utils.IsSliceMember([]string{utils.META_POSTPAID, utils.POSTPAID}, ev.GetReqType(dc.RequestTypeField)) {
@@ -410,7 +409,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *CDR, reply *float64) error {
maxCallDuration = remainingDuration
}
}
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: maxCallDuration})
rs.getCache().Cache(cacheKey, &CacheItem{Value: maxCallDuration})
*reply = maxCallDuration
return nil
}
@@ -453,7 +452,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
//utils.Logger.Info(fmt.Sprintf("Derived chargers for: %+v", attrsDC))
dcs := &utils.DerivedChargers{}
if err := rs.GetDerivedChargers(attrsDC, dcs); err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{
rs.getCache().Cache(cacheKey, &CacheItem{
Err: err,
})
return err
@@ -467,12 +466,12 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
}
startTime, err := ev.GetAnswerTime(dc.AnswerTimeField, rs.Timezone)
if err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return errors.New("Error parsing answer event start time")
}
endTime, err := ev.GetEndTime("", rs.Timezone)
if err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return errors.New("Error parsing answer event end time")
}
extraFields := ev.GetExtraFields()
@@ -499,7 +498,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error {
}
//utils.Logger.Info(fmt.Sprintf("RUNS: %v", len(sesRuns)))
*sRuns = sesRuns
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: sRuns})
rs.getCache().Cache(cacheKey, &CacheItem{Value: sRuns})
return nil
}
@@ -540,12 +539,12 @@ func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) error {
Subject: cd.Subject,
Context: utils.ALIAS_CONTEXT_RATING,
}, cd, utils.EXTRA_FIELDS); err != nil && err != utils.ErrNotFound {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
lcrCost, err := attrs.CallDescriptor.GetLCR(rs.Stats, attrs.Paginator)
if err != nil {
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Err: err})
rs.getCache().Cache(cacheKey, &CacheItem{Err: err})
return err
}
if lcrCost.Entry != nil && lcrCost.Entry.Strategy == LCR_STRATEGY_LOAD {
@@ -553,7 +552,7 @@ func (rs *Responder) GetLCR(attrs *AttrGetLcr, reply *LCRCost) error {
suppl.Cost = -1 // In case of load distribution we don't calculate costs
}
}
rs.getCache().Cache(cacheKey, &cache2go.CacheItem{Value: lcrCost})
rs.getCache().Cache(cacheKey, &CacheItem{Value: lcrCost})
*reply = *lcrCost
return nil
}