arnaucube
arnaucube/go-dvotePublic Self-hosted repository
go-dvote/batch/batch.go
batch/batch.goRaw
 1package batch
 2
 3import (
 4	"fmt"
 5	"github.com/vocdoni/dvote-relay/types"
 6	"github.com/vocdoni/dvote-relay/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 Create() ([]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}