From 49924fc210e4d4dfa559684ec57c032bee5cbc34 Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 15 Dec 2016 12:54:41 +0100 Subject: [PATCH] SMGeneric using cloning for replication to avoid concurrency --- engine/onstor_it_test.go | 4 ++++ sessionmanager/smgeneric.go | 5 ++++- utils/coreutils_test.go | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 023f07d15..767fbb1d3 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -597,3 +597,7 @@ func testOnStorITCacheAlias(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", als, rcv) } } + +func testOnStorITCacheResourceLimit(t *testing.T) { + +} diff --git a/sessionmanager/smgeneric.go b/sessionmanager/smgeneric.go index 5f3d59606..94cc7e6f0 100644 --- a/sessionmanager/smgeneric.go +++ b/sessionmanager/smgeneric.go @@ -450,7 +450,10 @@ func (smg *SMGeneric) replicateSessions(cgrID string) (err error) { return } smg.aSessionsMux.RLock() - aSessions := smg.activeSessions[cgrID] + var aSessions []*SMGSession + if err = utils.Clone(smg.activeSessions[cgrID], &aSessions); err != nil { + return + } smg.aSessionsMux.RUnlock() var wg sync.WaitGroup for _, rplConn := range smg.smgReplConns { diff --git a/utils/coreutils_test.go b/utils/coreutils_test.go index bfd82db9f..1abd0e5b4 100644 --- a/utils/coreutils_test.go +++ b/utils/coreutils_test.go @@ -630,6 +630,15 @@ func TestClone(t *testing.T) { if b != a { t.Error("Expected:", a, ", received:", b) } + // Clone from an interface + c := "mystr" + ifaceC := interface{}(c) + clndIface := reflect.Indirect(reflect.New(reflect.TypeOf(ifaceC))).Interface().(string) + if err := Clone(ifaceC, &clndIface); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(ifaceC, clndIface) { + t.Errorf("Expecting: %+v, received: %+v", ifaceC, clndIface) + } } func TestIntPointer(t *testing.T) {