A very experimental PLC implementation which uses BFT consensus for decentralization
1package transaction
2
3import "github.com/gbl08ma/stacktrace"
4
5type writeIndexTx struct {
6 db ExtendedDB
7
8 writeIndex *writeIndex
9}
10
11// Commit implements [WriteIndex].
12func (w *writeIndexTx) Commit() error {
13 if w.writeIndex != nil {
14 err := w.writeIndex.Commit()
15 if err != nil {
16 return stacktrace.Propagate(err)
17 }
18 }
19
20 return nil
21}
22
23// Rollback implements [WriteIndex].
24func (w *writeIndexTx) Rollback() error {
25 if w.writeIndex != nil {
26 err := w.writeIndex.Rollback()
27 if err != nil {
28 return stacktrace.Propagate(err)
29 }
30 }
31 return nil
32}
33
34// IndexDB implements [WriteIndex].
35func (w *writeIndexTx) IndexDB() IndexWriter {
36 if w.writeIndex == nil {
37 w.writeIndex = &writeIndex{
38 batch: w.db.NewBatch(),
39 db: w.db,
40 unsavedAdditions: make(map[string][]byte),
41 unsavedRemovals: make(map[string]struct{}),
42 }
43 }
44
45 return w.writeIndex
46}