go-dvote/batch/batch.go
batch/batch.goRaw
1package batch
2
3import (
4 "fmt"
5 "github.com/vocdoni/go-dvote/types"
6 "github.com/vocdoni/go-dvote/db"
7 "encoding/json"
8)
9
10var rdb *db.LevelDbStorage
11var bdb *db.LevelDbStorage
12var BatchSignal chan bool
13var BatchSize int
14var err error
15
16func Setup(l *db.LevelDbStorage) {
17 rdb = l.WithPrefix([]byte("relay_"))
18 bdb = l.WithPrefix([]byte("batch_"))
19}
20
21
22//add (queue for counting)
23func Add(ballot types.Ballot) error {
24 //this is probably adding []
25 //err := bdb.Put(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p)))
26 var b []byte
27 var n []byte
28 var err error
29 b, err = json.Marshal(ballot)
30 n, err = json.Marshal(ballot.Nullifier)
31 err = bdb.Put(n,b)
32 if err != nil {
33 return err
34 }
35
36 //this actually needs to see if it was added
37 if bdb.Count() >= BatchSize {
38 BatchSignal <- true
39 }
40 return nil
41}
42
43//create (return batch)
44//k is []byte 'batch_' + nullifier
45//v is []byte package
46//returns slice of nullifiers, batch json
47func Fetch() ([]string, []string) {
48 var n []string
49 var b []string
50 iter := bdb.Iter()
51 for iter.Next() {
52 k := iter.Key()
53 v := iter.Value()
54 err := iter.Error()
55 if err != nil {
56 panic(err)
57 }
58 n = append(n, string(k[6:]))
59 b = append(b, string(v))
60 }
61 iter.Release()
62// jn, err := json.Marshal(n)
63// if err != nil {
64// panic(err)
65// }
66// jb, err := json.Marshal(b)
67// if err != nil {
68// panic(err)
69// }
70 return n, b
71}
72
73//move from bdb to rdb once pinned
74func Compact(n []string) {
75 for _, k := range n {
76 //fmt.Println(k)
77 v, err := bdb.Get([]byte(k))
78 if err != nil {
79 fmt.Println(err.Error())
80 }
81 rdb.Put([]byte(k), v)
82 bdb.Delete([]byte(k))
83 }
84}