From 2324675a9c58629e321e245a7f436a90cbc98c3d Mon Sep 17 00:00:00 2001 From: axtloss Date: Mon, 12 Feb 2024 22:45:56 +0100 Subject: Optimize database writes --- verifysetup/core/storage.go | 48 ++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) (limited to 'verifysetup/core/storage.go') diff --git a/verifysetup/core/storage.go b/verifysetup/core/storage.go index 831d637..56d32af 100644 --- a/verifysetup/core/storage.go +++ b/verifysetup/core/storage.go @@ -11,6 +11,11 @@ import ( var TotalReadBlocks = 0 func ReadBlock(start int, end int, device *bytes.Reader) ([]byte, error) { + if end-start < 0 { + return []byte{}, fmt.Errorf("ERROR: tried creating byte slice with negative length. %d to %d total %d\n", start, end, end-start) + } else if end-start > 2000 { + return []byte{}, fmt.Errorf("ERROR: tried creating byte slice with length over 2000. %d to %d total %d\n", start, end, end-start) + } block := make([]byte, end-start) _, err := device.Seek(int64(start), 0) if err != nil { @@ -21,7 +26,7 @@ func ReadBlock(start int, end int, device *bytes.Reader) ([]byte, error) { return block, err } -func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Node) (verify.Node, error) { +func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Node, n string) (verify.Node, error) { node := verify.Node{} node.BlockStart = blockStart node.BlockEnd = blockEnd @@ -37,39 +42,24 @@ func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Nod return verify.Node{}, err } } else { - prevNodeHash = "Entrypoint" + prevNodeHash = "Entrypoint" + n } node.PrevNodeSum = prevNodeHash return node, nil } -func AddNode(node verify.Node, db *bolt.DB, dbPath string) error { - var err error - var deferDB bool - if db == nil { - db, err = bolt.Open(dbPath, 0777, nil) - if err != nil { - return err - } - deferDB = true - } else if db.IsReadOnly() { - return fmt.Errorf("Error: database is opened read only, unable to add nodes") - } - err = db.Update(func(tx *bolt.Tx) error { - nodes, err := tx.CreateBucketIfNotExists([]byte("Nodes")) - if err != nil { - return err - } - if buf, err := json.Marshal(node); err != nil { - return err - } else if err := nodes.Put([]byte(node.PrevNodeSum), buf); err != nil { - return err - } +func AddNode(node verify.Node, tx *bolt.Tx) error { + if node.BlockStart == node.BlockEnd { return nil - - }) - if deferDB { - defer db.Close() } - return err + nodes, err := tx.CreateBucketIfNotExists([]byte("Nodes")) + if err != nil { + return err + } + if buf, err := json.Marshal(node); err != nil { + return err + } else if err := nodes.Put([]byte(node.PrevNodeSum), buf); err != nil { + return err + } + return nil } -- cgit v1.2.3