arnaucube
arnaucube/go-dvotePublic Self-hosted repository
changed serialization logic to json strings, added batch compaction
imw imw@0x539.lol
Thu, 20 Dec 2018 12:21:11 +0100
commit

b4b687eeda137bbe95dcf74efb2250830cdcf38d

parent

6cce8cb242fc07f6e136e82550ae521be30c9626

4 files changed, 66 insertions(+), 20 deletions(-)

jump to
M batch/batch.go → batch/batch.go

@@ -4,13 +4,13 @@ import (

"fmt" "github.com/vocdoni/dvote-relay/types" "github.com/vocdoni/dvote-relay/db" + "encoding/json" ) var rdb *db.LevelDbStorage var bdb *db.LevelDbStorage var BatchSignal chan bool var BatchSize int -var currentBatchSize int var err error func Setup(l *db.LevelDbStorage) {

@@ -20,27 +20,33 @@ }

//add (queue for counting) -func Add(p types.Ballot) error { - err := bdb.Put([]byte(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p))) +func Add(ballot types.Ballot) error { + //this is probably adding [] + //err := bdb.Put(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p))) + var b []byte + var n []byte + var err error + b, err = json.Marshal(ballot) + n, err = json.Marshal(ballot.Nullifier) + err = bdb.Put(n,b) if err != nil { return err } //this actually needs to see if it was added - currentBatchSize++ - fmt.Println(bdb.Info()) - if currentBatchSize >= BatchSize { + if bdb.Count() >= BatchSize { BatchSignal <- true } return nil } //create (return batch) -//k is []byte nullifier +//k is []byte 'batch_' + nullifier //v is []byte package -func Create() []byte { - var b []byte - var i int +//returns slice of nullifiers, batch json +func Create() ([]string, []string) { + var n []string + var b []string iter := bdb.Iter() for iter.Next() { k := iter.Key()

@@ -49,14 +55,30 @@ err := iter.Error()

if err != nil { panic(err) } - fmt.Println(i) - fmt.Println(string(k)) - fmt.Println(string(v)) - i++ - //put p in batch - //rdb.Put(iter.Key(), iter.Val(), nil) - //bdb.Delete(iter.Key(), nil) + n = append(n, string(k[6:])) + b = append(b, string(v)) } iter.Release() - return b +// jn, err := json.Marshal(n) +// if err != nil { +// panic(err) +// } +// jb, err := json.Marshal(b) +// if err != nil { +// panic(err) +// } + return n, b +} + +//move from bdb to rdb once pinned +func Compact(n []string) { + for _, k := range n { + fmt.Println(k) + v, err := bdb.Get([]byte(k)) + if err != nil { + fmt.Println(err.Error()) + } + rdb.Put([]byte(k), v) + bdb.Delete([]byte(k)) + } }
M db/leveldb.go → db/leveldb.go

@@ -33,10 +33,26 @@ type storageInfo struct {

KeyCount int } +func (l *LevelDbStorage) Count() int { + + keycount := 0 + db := l.ldb + iter := db.NewIterator(util.BytesPrefix(l.prefix), nil) + for iter.Next() { + keycount++ + } + iter.Release() + if err := iter.Error(); err != nil { + panic(err) + } + return keycount +} + func (l *LevelDbStorage) Info() string { keycount := 0 - iter := l.ldb.NewIterator(nil, nil) + db := l.ldb + iter := db.NewIterator(util.BytesPrefix(l.prefix), nil) for iter.Next() { keycount++ }
M main.go → main.go

@@ -45,7 +45,12 @@ //replace with chain link

case signal := <-batchSignal: if signal == true { fmt.Println("Signal triggered") - batch.Create() + n, b := batch.Create() + fmt.Println("Nullifiers:") + fmt.Println(n) + fmt.Println("Batch:") + fmt.Println(b) + batch.Compact(n) } default: continue
M net/net.go → net/net.go

@@ -45,6 +45,9 @@ panic(err)

} j, err := json.Marshal(e) + if err != nil { + panic(err) + } io.WriteString(rw, string(j)) }