responder cache fixes

This commit is contained in:
Radu Ioan Fericean
2015-12-02 21:25:20 +02:00
parent fda36a6569
commit faefc9d86e
4 changed files with 15 additions and 8 deletions

View File

@@ -52,7 +52,7 @@ func (self *ApierV1) AddRatingSubjectAliases(attrs AttrAddRatingSubjectAliases,
als := engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Context: utils.ALIAS_CONTEXT_RATING,
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY,
Pairs: engine.AliasPairs{"Account": map[string]string{alias: attrs.Subject}, "Subject": map[string]string{alias: attrs.Subject}}, Weight: 10.0}}}
if err := aliases.Call("AliasesV1.SetAlias", &als, &ignr); err != nil {
if err := aliases.Call("AliasesV1.SetAlias", &engine.AttrAddAlias{Alias: &als}, &ignr); err != nil {
return utils.NewErrServerError(err)
}
}
@@ -104,7 +104,7 @@ func (self *ApierV1) AddAccountAliases(attrs AttrAddAccountAliases, reply *strin
als := engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Context: utils.ALIAS_CONTEXT_RATING,
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY,
Pairs: engine.AliasPairs{"Account": map[string]string{alias: attrs.Account}, "Subject": map[string]string{alias: attrs.Account}}, Weight: 10.0}}}
if err := aliases.Call("AliasesV1.SetAlias", &als, &ignr); err != nil {
if err := aliases.Call("AliasesV1.SetAlias", &engine.AttrAddAlias{Alias: &als}, &ignr); err != nil {
return utils.NewErrServerError(err)
}
}

View File

@@ -54,10 +54,16 @@ func (rc *ResponseCache) Get(key string) (*CacheItem, error) {
if rc.ttl == 0 {
return nil, utils.ErrNotImplemented
}
rc.mu.RLock()
item, ok := rc.cache[key]
rc.mu.RUnlock()
if ok {
return item, nil
}
rc.wait(key) // wait for other goroutine processsing this key
rc.mu.RLock()
defer rc.mu.RUnlock()
item, ok := rc.cache[key]
item, ok = rc.cache[key]
if !ok {
return nil, ErrNotFound
}

View File

@@ -239,7 +239,7 @@ func startRater(internalRaterChan chan *engine.Responder, cacheDoneChan chan str
}
responder := &engine.Responder{Bal: bal, ExitChan: exitChan, Stats: cdrStats}
responder.SetTimeToLive(cfg.ResponseCacheTTL)
responder.SetTimeToLive(cfg.ResponseCacheTTL, nil)
apierRpcV1 := &v1.ApierV1{StorDb: loadDb, RatingDb: ratingDb, AccountDb: accountDb, CdrDb: cdrDb, LogDb: logDb, Sched: sched,
Config: cfg, Responder: responder, CdrStatsSrv: cdrStats, Users: userServer}
apierRpcV2 := &v2.ApierV2{

View File

@@ -57,8 +57,9 @@ type Responder struct {
responseCache *cache2go.ResponseCache
}
func (rs *Responder) SetTimeToLive(timeToLive time.Duration) {
func (rs *Responder) SetTimeToLive(timeToLive time.Duration, out *int) error {
rs.responseCache = cache2go.NewResponseCache(timeToLive)
return nil
}
func (rs *Responder) getCache() *cache2go.ResponseCache {
@@ -263,7 +264,7 @@ func (rs *Responder) GetMaxSessionTime(arg *CallDescriptor, reply *float64) (err
func (rs *Responder) GetDerivedMaxSessionTime(ev *StoredCdr, reply *float64) error {
cacheKey := "GetDerivedMaxSessionTime" + ev.CgrId
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
*reply = *(item.Value.(*float64))
*reply = item.Value.(float64)
return item.Err
}
if rs.Bal != nil {
@@ -367,7 +368,7 @@ func (rs *Responder) GetDerivedMaxSessionTime(ev *StoredCdr, reply *float64) err
func (rs *Responder) GetSessionRuns(ev *StoredCdr, sRuns *[]*SessionRun) error {
cacheKey := "GetSessionRuns" + ev.CgrId
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
*sRuns = *(item.Value.(*[]*SessionRun))
*sRuns = item.Value.([]*SessionRun)
return item.Err
}
if rs.Bal != nil {
@@ -446,7 +447,7 @@ func (rs *Responder) GetDerivedChargers(attrs *utils.AttrDerivedChargers, dcs *u
func (rs *Responder) ProcessCdr(cdr *StoredCdr, reply *string) error {
cacheKey := "ProcessCdr" + cdr.CgrId
if item, err := rs.getCache().Get(cacheKey); err == nil && item != nil {
*reply = *(item.Value.(*string))
*reply = item.Value.(string)
return item.Err
}
if rs.CdrSrv == nil {