From 623c634848e366b9e849b411f371865fd01d3842 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 29 Feb 2012 20:56:57 +0200 Subject: [PATCH] created a new encoder for every write --- cmd/loader/loader.go | 24 ------------------------ timespans/activationperiod_test.go | 20 +++++++++++++++++++- timespans/kyoto_storage.go | 9 ++++----- timespans/redis_storage.go | 15 ++++++--------- timespans/test.kch | Bin 6300264 -> 6299992 bytes 5 files changed, 29 insertions(+), 39 deletions(-) diff --git a/cmd/loader/loader.go b/cmd/loader/loader.go index 1a2dd75f1..46c04ecfc 100644 --- a/cmd/loader/loader.go +++ b/cmd/loader/loader.go @@ -18,8 +18,6 @@ along with this program. If not, see package main import ( - "bytes" - //"encoding/gob" "encoding/json" "flag" "github.com/rif/cgrates/timespans" @@ -41,27 +39,6 @@ var ( ubfile = flag.String("ubfile", "ub.json", "User budgets file") ) -func testGob(key string, aps []*timespans.ActivationPeriod) { - var buf bytes.Buffer - enc := json.NewEncoder(&buf) - dec := json.NewDecoder(&buf) - - enc.Encode(aps) - result := buf.String() - - aps1 := make([]*timespans.ActivationPeriod, 0) - buf.Reset() - buf.WriteString(result) - err := dec.Decode(&aps1) - log.Print("Err: ", err) - - buf.Reset() - enc.Encode(aps1) - result1 := buf.String() - - log.Print("Equal? ", result == result1, len(result), len(result1)) -} - func writeToStorage(storage timespans.StorageGetter, callDescriptors []*timespans.CallDescriptor, destinations []*timespans.Destination, @@ -70,7 +47,6 @@ func writeToStorage(storage timespans.StorageGetter, for _, cd := range callDescriptors { storage.SetActivationPeriods(cd.GetKey(), cd.ActivationPeriods) log.Printf("Storing activation periods for %q", cd.GetKey()) - testGob(cd.GetKey(), cd.ActivationPeriods) } for _, d := range destinations { storage.SetDestination(d) diff --git a/timespans/activationperiod_test.go b/timespans/activationperiod_test.go index 04a0b80e9..ed07645c4 100644 --- a/timespans/activationperiod_test.go +++ b/timespans/activationperiod_test.go @@ -22,6 +22,24 @@ import ( //"log" ) -func TestApStoreRestore(t *testing.T) { +func TestApRestoreKyoto(t *testing.T) { + getter, _ := NewKyotoStorage("test.kch") + defer getter.Close() + cd := &CallDescriptor{CstmId: "vdf", Subject: "rif", DestinationPrefix: "0257", storageGetter: getter} + cd.SearchStorageForPrefix() + if len(cd.ActivationPeriods) != 2 { + t.Error("Error restoring activation periods: ", cd.ActivationPeriods) + } +} + +func TestApRestoreRedis(t *testing.T) { + getter, _ := NewRedisStorage("tcp:127.0.0.1:6379", 10) + defer getter.Close() + + cd := &CallDescriptor{CstmId: "vdf", Subject: "rif", DestinationPrefix: "0257", storageGetter: getter} + cd.SearchStorageForPrefix() + if len(cd.ActivationPeriods) != 2 { + t.Error("Error restoring activation periods: ", cd.ActivationPeriods) + } } diff --git a/timespans/kyoto_storage.go b/timespans/kyoto_storage.go index 6a9d299ca..7987b4d7a 100644 --- a/timespans/kyoto_storage.go +++ b/timespans/kyoto_storage.go @@ -28,7 +28,6 @@ import ( type KyotoStorage struct { db *kc.DB buf bytes.Buffer - enc *gob.Encoder dec *gob.Decoder mux sync.Mutex // we need norma lock because we reset the buf variable } @@ -36,7 +35,6 @@ type KyotoStorage struct { func NewKyotoStorage(filaName string) (*KyotoStorage, error) { ndb, err := kc.Open(filaName, kc.WRITE) ks := &KyotoStorage{db: ndb} - ks.enc = gob.NewEncoder(&ks.buf) ks.dec = gob.NewDecoder(&ks.buf) return ks, err } @@ -49,9 +47,10 @@ func (ks *KyotoStorage) SetActivationPeriods(key string, aps []*ActivationPeriod ks.mux.Lock() defer ks.mux.Unlock() - ks.buf.Reset() - ks.enc.Encode(aps) - return ks.db.Set(key, ks.buf.String()) + var writeBuf bytes.Buffer + encoder := gob.NewEncoder(&writeBuf) + encoder.Encode(aps) + return ks.db.Set(key, writeBuf.String()) } func (ks *KyotoStorage) GetActivationPeriods(key string) (aps []*ActivationPeriod, err error) { diff --git a/timespans/redis_storage.go b/timespans/redis_storage.go index 8987d9865..a7520decb 100644 --- a/timespans/redis_storage.go +++ b/timespans/redis_storage.go @@ -21,7 +21,7 @@ import ( "bytes" "encoding/gob" "github.com/simonz05/godis" - "log" + // "log" "sync" ) @@ -29,7 +29,6 @@ type RedisStorage struct { dbNb int db *godis.Client buf bytes.Buffer - enc *gob.Encoder dec *gob.Decoder mux sync.Mutex } @@ -38,7 +37,6 @@ func NewRedisStorage(address string, db int) (*RedisStorage, error) { ndb := godis.New(address, db, "") rs := &RedisStorage{db: ndb, dbNb: db} - rs.enc = gob.NewEncoder(&rs.buf) rs.dec = gob.NewDecoder(&rs.buf) return rs, nil } @@ -51,10 +49,10 @@ func (rs *RedisStorage) SetActivationPeriods(key string, aps []*ActivationPeriod //.db.Select(rs.dbNb) rs.mux.Lock() defer rs.mux.Unlock() - - rs.buf.Reset() - rs.enc.Encode(aps) - return rs.db.Set(key, rs.buf.Bytes()) + var writeBuf bytes.Buffer + encoder := gob.NewEncoder(&writeBuf) + encoder.Encode(aps) + return rs.db.Set(key, writeBuf.Bytes()) } func (rs *RedisStorage) GetActivationPeriods(key string) (aps []*ActivationPeriod, err error) { @@ -66,8 +64,7 @@ func (rs *RedisStorage) GetActivationPeriods(key string) (aps []*ActivationPerio rs.buf.Reset() rs.buf.Write(elem.Bytes()) - e := rs.dec.Decode(&aps) - log.Print(e) + rs.dec.Decode(&aps) return } diff --git a/timespans/test.kch b/timespans/test.kch index 4c956cefe1ac22db6bafd814151f081339ae56f8..9078a713fc61b13efe80eab14cbc971b9a0b6dae 100644 GIT binary patch delta 619 zcmaEHq=EUyp$6s&dQ6HDje)I!j9UYloF-08P-Ny|egYGi+0D$uA_3z$O>9iqn!s2) zAE>0UF>q@j| zBM>_Qu`>|60I@3&y8*E~5PJZzClGr9u{RL=0I@F+`)#)@@;5JGVt#-y7G{65CeS)( zOmXC}+nA6m0t^jKWL3cEc_PbnhHZP5M8Z5q*)t5tfTuaQEG5mVC^OBxvl*L#8TiU|3Q4*eT|lK;SxFYSSnE(pm+hgJv1tqx4VKx4>d zy_N);X}ZzS-UDdOU6|QZ?SP_OFdoR6nC5SE`1=^BN)*2;Y&yZ7KI#Ir@CQOO(5I&D zmPPhJ>;S}$K&Oqz}#I8W>2E^__>;c4{KHCepmjc&;>cmQ(ScV4=p$`pRlw*uBFl8fZ+n$Q!aT-_W*)L<7?ER~r_re_CC#cR zGtJ7t$kcqgn{>jV`geElg4IO5d*_>@Hv7w%MD?c1MRMd zSRM