From 842019f080768b6aa3bd94542467260463c6209a Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 25 May 2016 14:46:40 +0200 Subject: [PATCH] SMGeneric fix for no reply from RALs --- sessionmanager/smgeneric.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/sessionmanager/smgeneric.go b/sessionmanager/smgeneric.go index b81c79d95..53c0d66a7 100644 --- a/sessionmanager/smgeneric.go +++ b/sessionmanager/smgeneric.go @@ -171,12 +171,12 @@ func (self *SMGeneric) getSession(uuid string) []*SMGSession { // Handle a new session, pass the connectionId so we can communicate on disconnect request func (self *SMGeneric) sessionStart(evStart SMGenericEvent, connId string) error { sessionId := evStart.GetUUID() - _, err := self.guard.Guard(func() (interface{}, error) { // Lock it on UUID level + processed, err := self.guard.Guard(func() (interface{}, error) { // Lock it on UUID level var sessionRuns []*engine.SessionRun if err := self.rater.Call("Responder.GetSessionRuns", evStart.AsStoredCdr(self.cgrCfg, self.timezone), &sessionRuns); err != nil { - return nil, err + return true, err } else if len(sessionRuns) == 0 { - return nil, nil + return true, nil } stopDebitChan := make(chan struct{}) for _, sessionRun := range sessionRuns { @@ -189,8 +189,12 @@ func (self *SMGeneric) sessionStart(evStart SMGenericEvent, connId string) error go s.debitLoop(self.cgrCfg.SmGenericConfig.DebitInterval) } } - return nil, nil + return true, nil }, time.Duration(2)*time.Second, sessionId) + if processed == nil || processed == false { + utils.Logger.Err(" Cannot start session, empty reply") + return utils.ErrServerError + } return err } @@ -322,7 +326,12 @@ func (self *SMGeneric) SessionUpdate(gev SMGenericEvent, clnt *rpc2.Client) (tim } return nilDuration, err } - for _, s := range self.getSession(gev.GetUUID()) { + aSessions := self.getSession(gev.GetUUID()) + if len(aSessions) == 0 { + utils.Logger.Err(fmt.Sprintf(" SessionUpdate with no active sessions for event: <%s>", gev.GetUUID())) + return nilDuration, utils.ErrServerError + } + for _, s := range aSessions { if maxDur, err := s.debit(evMaxUsage, lastUsed); err != nil { return nilDuration, err } else if maxDur < evMaxUsage {