From 2aabb38e5c186cd0a6216990ad1d09d1d287c39c Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 25 Jan 2012 15:38:26 +0200 Subject: [PATCH] implemented kyoto cabinet storage --- .project | 17 ----------------- src/inquirer/inquirer.go | 5 ++--- src/loader/kyoto_loader.go | 19 +++++++++++++++++++ src/rater/Makefile | 2 ++ src/rater/rater.go | 27 ++++++++++++++++++--------- src/rater/storage/interface.go | 7 +++++++ src/rater/storage/kyoto_storage.go | 24 ++++++++++++++++++++++++ src/rater/storage/redis_storage.go | 7 +++++++ 8 files changed, 79 insertions(+), 29 deletions(-) delete mode 100644 .project create mode 100644 src/loader/kyoto_loader.go create mode 100644 src/rater/storage/interface.go create mode 100644 src/rater/storage/kyoto_storage.go create mode 100644 src/rater/storage/redis_storage.go diff --git a/.project b/.project deleted file mode 100644 index 57a888450..000000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - cgrates - - - - - - com.googlecode.goclipse.goBuilder - - - - - - goclipse.goNature - - diff --git a/src/inquirer/inquirer.go b/src/inquirer/inquirer.go index 442b71a79..8ec2c3a0c 100644 --- a/src/inquirer/inquirer.go +++ b/src/inquirer/inquirer.go @@ -20,12 +20,11 @@ func handler(w http.ResponseWriter, r *http.Request) { } func callRater() { - var reply float64 - arg := 9.0 + var reply string err := errors.New("") //not nil value for err != nil { client:= <-raterList.Balancer - err = client.Call("Sumer.Square", arg, &reply) + err = client.Call("Storage.Get", "test", &reply) if err != nil { log.Print("Got en error from rater... recovering") } diff --git a/src/loader/kyoto_loader.go b/src/loader/kyoto_loader.go new file mode 100644 index 000000000..13d41a3a7 --- /dev/null +++ b/src/loader/kyoto_loader.go @@ -0,0 +1,19 @@ +package main + +import ( + "fmt" + "github.com/fsouza/gokabinet/kc" + "flag" +) + +var ( + fileName = flag.String("fileName", "storage.kch", "kyoto storage file") +) +func main() { + flag.Parse() + db, _ := kc.Open(*fileName, kc.WRITE) + defer db.Close() + + db.SetInt("test", 12121)) +} + diff --git a/src/rater/Makefile b/src/rater/Makefile index 1bfe527f8..211f7241b 100644 --- a/src/rater/Makefile +++ b/src/rater/Makefile @@ -4,5 +4,7 @@ TARG=rater GOFILES=\ rater.go\ registration/registration.go\ + storage/interface.go\ + storage/kyoto_storage.go\ include $(GOROOT)/src/Make.cmd diff --git a/src/rater/rater.go b/src/rater/rater.go index 155cb0b5f..720108832 100644 --- a/src/rater/rater.go +++ b/src/rater/rater.go @@ -3,7 +3,6 @@ package main import ( "flag" "log" - "math" "net" "net/rpc" "os" @@ -12,19 +11,29 @@ import ( var ( server = flag.String("server", "127.0.0.1:2000", "target host:port") listen = flag.String("listen", "127.0.0.1:1234", "target host:port") + storage Storage ) -type Sumer int - -func (t *Sumer) Square(n float64, reply *float64) error { - *reply = math.Sqrt(n) - return nil +type Storage struct { + sg StorageGetter } -func main() { +func NewStorage(nsg StorageGetter) *Storage{ + s := &Storage{sg: nsg} + s.sg.Open("storage.kch") + return s +} + +func (s *Storage) Get(args string, reply *string) (err error) { + *reply, err = s.sg.Get(args) + return err +} + +func main() { flag.Parse() - arith := new(Sumer) - rpc.Register(arith) + kyoto := KyotoStorage{} + storage := NewStorage(kyoto) + rpc.Register(storage) rpc.HandleHTTP() go RegisterToServer(server, listen) go StopSingnalHandler(server, listen) diff --git a/src/rater/storage/interface.go b/src/rater/storage/interface.go new file mode 100644 index 000000000..43214e274 --- /dev/null +++ b/src/rater/storage/interface.go @@ -0,0 +1,7 @@ +package main + +type StorageGetter interface { + Open(string) error + Close() + Get(key string) (string, error) +} diff --git a/src/rater/storage/kyoto_storage.go b/src/rater/storage/kyoto_storage.go new file mode 100644 index 000000000..eecccba5b --- /dev/null +++ b/src/rater/storage/kyoto_storage.go @@ -0,0 +1,24 @@ +package main + +import ( + "github.com/fsouza/gokabinet/kc" +) + +type KyotoStorage struct { + db *kc.DB +} + +func (ks KyotoStorage) Open(fileName string) error { + db, err := kc.Open(fileName, kc.READ) + ks.db = db + return err +} + +func (ks KyotoStorage) Close() { + ks.db.Close() +} + +func (ks KyotoStorage) Get(key string) (value string, err error) { + return ks.db.Get(key) +} + diff --git a/src/rater/storage/redis_storage.go b/src/rater/storage/redis_storage.go new file mode 100644 index 000000000..b1833b55c --- /dev/null +++ b/src/rater/storage/redis_storage.go @@ -0,0 +1,7 @@ +package main + +import ( + +) + +