implemented kyoto cabinet storage

This commit is contained in:
Radu Ioan Fericean
2012-01-25 15:38:26 +02:00
parent 5b0af828be
commit 2aabb38e5c
8 changed files with 79 additions and 29 deletions

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>cgrates</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.googlecode.goclipse.goBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>goclipse.goNature</nature>
</natures>
</projectDescription>

View File

@@ -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")
}

View File

@@ -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))
}

View File

@@ -4,5 +4,7 @@ TARG=rater
GOFILES=\
rater.go\
registration/registration.go\
storage/interface.go\
storage/kyoto_storage.go\
include $(GOROOT)/src/Make.cmd

View File

@@ -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)

View File

@@ -0,0 +1,7 @@
package main
type StorageGetter interface {
Open(string) error
Close()
Get(key string) (string, error)
}

View File

@@ -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)
}

View File

@@ -0,0 +1,7 @@
package main
import (
)