From a4148c1476e522c836d2c20de4a7c6c335a366b1 Mon Sep 17 00:00:00 2001 From: alin104n Date: Mon, 20 Mar 2017 18:32:26 +0200 Subject: [PATCH 1/2] OrderID counter --- engine/storage_mongo_datadb.go | 2 ++ engine/storage_mongo_stordb.go | 2 +- engine/stordb_it_test.go | 4 ++-- utils/coreutils.go | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index c21f41efa..04aad0010 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -112,6 +112,7 @@ func NewMongoStorage(host, port, db, user, pass, storageType string, cdrsIndexes return nil, err } } + ms.Counter = utils.NewCounterGen(1000) return } @@ -123,6 +124,7 @@ type MongoStorage struct { cacheCfg *config.CacheConfig loadHistorySize int cdrsIndexes []string + Counter *utils.CounterGen } func (ms *MongoStorage) conn(col string) (*mgo.Session, *mgo.Collection) { diff --git a/engine/storage_mongo_stordb.go b/engine/storage_mongo_stordb.go index 3694e3673..55318ab95 100644 --- a/engine/storage_mongo_stordb.go +++ b/engine/storage_mongo_stordb.go @@ -883,7 +883,7 @@ func (ms *MongoStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix stri func (ms *MongoStorage) SetCDR(cdr *CDR, allowUpdate bool) (err error) { if cdr.OrderID == 0 { - cdr.OrderID = time.Now().UnixNano() + cdr.OrderID = time.Now().UnixNano() + ms.Counter.Gen() } session, col := ms.conn(utils.TBL_CDRS) defer session.Close() diff --git a/engine/stordb_it_test.go b/engine/stordb_it_test.go index 03c5a2a7c..3561ca55d 100644 --- a/engine/stordb_it_test.go +++ b/engine/stordb_it_test.go @@ -1519,7 +1519,7 @@ func testStorDBitCRUDCDRs(t *testing.T) { &CDR{ CGRID: "88ed9c38005f07576a1e1af293063833b60edcc6", RunID: "1", - OrderID: 1, + OrderID: 0, OriginHost: "host1", OriginID: "1", CostDetails: &CallCost{Timespans: TimeSpans{}}, @@ -1528,7 +1528,7 @@ func testStorDBitCRUDCDRs(t *testing.T) { &CDR{ CGRID: "88ed9c38005f07576a1e1af293063833b60edcc2", RunID: "2", - OrderID: 2, + OrderID: 0, OriginHost: "host2", OriginID: "2", CostDetails: &CallCost{Timespans: TimeSpans{}}, diff --git a/utils/coreutils.go b/utils/coreutils.go index b19563a80..bdd1d6624 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -36,9 +36,29 @@ import ( "runtime" "strconv" "strings" + "sync" "time" ) +func NewCounterGen(limit int64) *CounterGen { + return &CounterGen{limit: limit} +} + +type CounterGen struct { + cnt, limit int64 + sync.Mutex +} + +func (cg *CounterGen) Gen() int64 { + cg.Lock() + defer cg.Unlock() + cg.cnt += 1 + if cg.cnt > cg.limit { + cg.cnt = 0 + } + return cg.cnt +} + // Returns first non empty string out of vals. Useful to extract defaults func FirstNonEmpty(vals ...string) string { for _, val := range vals { From ce2dfabf0330746663eb4f327b83620bcf0339f8 Mon Sep 17 00:00:00 2001 From: alin104n Date: Mon, 20 Mar 2017 18:49:44 +0200 Subject: [PATCH 2/2] Mongo counter private --- engine/storage_mongo_datadb.go | 4 ++-- engine/storage_mongo_stordb.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 04aad0010..7889d7a26 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -112,7 +112,7 @@ func NewMongoStorage(host, port, db, user, pass, storageType string, cdrsIndexes return nil, err } } - ms.Counter = utils.NewCounterGen(1000) + ms.cnter = utils.NewCounterGen(1000) return } @@ -124,7 +124,7 @@ type MongoStorage struct { cacheCfg *config.CacheConfig loadHistorySize int cdrsIndexes []string - Counter *utils.CounterGen + cnter *utils.CounterGen } func (ms *MongoStorage) conn(col string) (*mgo.Session, *mgo.Collection) { diff --git a/engine/storage_mongo_stordb.go b/engine/storage_mongo_stordb.go index 55318ab95..3791d60d7 100644 --- a/engine/storage_mongo_stordb.go +++ b/engine/storage_mongo_stordb.go @@ -883,7 +883,7 @@ func (ms *MongoStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix stri func (ms *MongoStorage) SetCDR(cdr *CDR, allowUpdate bool) (err error) { if cdr.OrderID == 0 { - cdr.OrderID = time.Now().UnixNano() + ms.Counter.Gen() + cdr.OrderID = time.Now().UnixNano() + ms.cnter.Gen() } session, col := ms.conn(utils.TBL_CDRS) defer session.Close()