You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
1.6 KiB

package batch
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 err error
func Setup(l *db.LevelDbStorage) {
rdb = l.WithPrefix([]byte("relay_"))
bdb = l.WithPrefix([]byte("batch_"))
}
//add (queue for counting)
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
if bdb.Count() >= BatchSize {
BatchSignal <- true
}
return nil
}
//create (return batch)
//k is []byte 'batch_' + nullifier
//v is []byte package
//returns slice of nullifiers, batch json
func Fetch() ([]string, []string) {
var n []string
var b []string
iter := bdb.Iter()
for iter.Next() {
k := iter.Key()
v := iter.Value()
err := iter.Error()
if err != nil {
panic(err)
}
n = append(n, string(k[6:]))
b = append(b, string(v))
}
iter.Release()
// 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))
}
}