diff --git a/sessions/session.go b/sessions/session.go index f1f31afe5..f175f8fbb 100644 --- a/sessions/session.go +++ b/sessions/session.go @@ -112,7 +112,6 @@ func (s Session) Clone() (cln *Session) { } func (s *Session) AsExternalSessions(tmz, nodeID string) (aSs []*ExternalSession) { - s.RLock() aSs = make([]*ExternalSession, len(s.SRuns)) for i, sr := range s.SRuns { aSs[i] = &ExternalSession{ @@ -143,11 +142,9 @@ func (s *Session) AsExternalSessions(tmz, nodeID string) (aSs []*ExternalSession aSs[i].MaxCostSoFar = sr.CD.MaxCostSoFar } } - s.RUnlock() return } func (s *Session) AsExternalSession(sr *SRun, tmz, nodeID string) (aS *ExternalSession) { - s.RLock() aS = &ExternalSession{ CGRID: s.CGRID, RunID: sr.Event.GetStringIgnoreErrors(utils.RunID), @@ -175,7 +172,6 @@ func (s *Session) AsExternalSession(sr *SRun, tmz, nodeID string) (aS *ExternalS aS.MaxRateUnit = sr.CD.MaxRateUnit aS.MaxCostSoFar = sr.CD.MaxCostSoFar } - s.RUnlock() return } diff --git a/sessions/sessions.go b/sessions/sessions.go index 2bbba0bdf..3561e9326 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -354,14 +354,12 @@ func (sS *SessionS) setSTerminator(s *Session) { go func() { select { case <-s.sTerminator.timer.C: - s.Lock() endUsage := s.sTerminator.ttl if s.sTerminator.ttlUsage != nil { endUsage = *s.sTerminator.ttlUsage } sS.forceSTerminate(s, endUsage, s.sTerminator.ttlLastUsed) - s.Unlock() case <-endChan: s.sTerminator.timer.Stop() } @@ -2524,12 +2522,14 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.RpcClientConnection, time.Sleep(time.Duration(fib()) * time.Millisecond) continue } + if s, err = sS.initSession(args.CGREvent.Tenant, ev, sS.biJClntID(clnt), ev.GetStringIgnoreErrors(utils.OriginID), dbtItvl, args.ArgDispatcher); err != nil { return utils.NewErrRALs(err) } + } if err = sS.endSession(s, ev.GetDurationPtrIgnoreErrors(utils.Usage), diff --git a/sessions/sessions_data_it_test.go b/sessions/sessions_data_it_test.go index a04d1b7e5..45277ed82 100644 --- a/sessions/sessions_data_it_test.go +++ b/sessions/sessions_data_it_test.go @@ -559,6 +559,7 @@ func TestSessionsDataTTLExpired(t *testing.T) { } func TestSessionsDataTTLExpMultiUpdates(t *testing.T) { + var acnt *engine.Account acntAttrs := &utils.AttrGetAccount{ Tenant: "cgrates.org", diff --git a/sessions/sessions_it_test.go b/sessions/sessions_it_test.go index 69613845f..8be8d6227 100644 --- a/sessions/sessions_it_test.go +++ b/sessions/sessions_it_test.go @@ -126,16 +126,15 @@ func TestSessionsItTerminatUnexist(t *testing.T) { if err := sItRPC.Call(utils.SessionSv1TerminateSession, termArgs, &rpl); err != nil || rpl != utils.OK { t.Error(err) } - time.Sleep(10 * time.Millisecond) + time.Sleep(100 * time.Millisecond) - eAcntVal = 9.40 + eAcntVal = 9.299800 if err := sItRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil { t.Error(err) } else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal { t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue()) } time.Sleep(100 * time.Millisecond) - if err := sItRPC.Call(utils.SessionSv1ProcessCDR, termArgs.CGREvent, &rpl); err != nil { t.Error(err) } else if rpl != utils.OK { @@ -155,6 +154,9 @@ func TestSessionsItTerminatUnexist(t *testing.T) { if cdrs[0].Usage != "2m0s" { t.Errorf("Unexpected CDR Usage received, cdr: %v %+v ", cdrs[0].Usage, cdrs[0]) } + if cdrs[0].Cost != 0.7002 { + t.Errorf("Unexpected CDR Usage received, cdr: %v %+v ", cdrs[0].Cost, cdrs[0]) + } } } @@ -162,7 +164,7 @@ func TestSessionsItTerminatUnexist(t *testing.T) { func TestSessionsItUpdateUnexist(t *testing.T) { var acnt *engine.Account attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"} - eAcntVal := 9.4 + eAcntVal := 9.299800 if err := sItRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil { t.Error(err) } else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal { @@ -203,7 +205,7 @@ func TestSessionsItUpdateUnexist(t *testing.T) { time.Sleep(10 * time.Millisecond) - eAcntVal = 8.099800 + eAcntVal = 8.582900 if err := sItRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil { t.Error(err) } else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {