A very experimental PLC implementation which uses BFT consensus for decentralization
at main 46 lines 883 B view raw
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}