mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
responder cache fixes
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user