Skip to content

Commit 627e7c4

Browse files
committed
firewalldb: use Bolt's existing Update/View methods
1 parent 5750451 commit 627e7c4

File tree

1 file changed

+16
-56
lines changed

1 file changed

+16
-56
lines changed

firewalldb/kvstores.go

Lines changed: 16 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func (db *DB) GetKVStores(rule string, groupID session.ID,
108108
feature string) KVStores {
109109

110110
return &kvStores{
111-
DB: db,
111+
db: db.DB,
112112
ruleName: rule,
113113
groupID: groupID,
114114
featureName: feature,
@@ -117,25 +117,12 @@ func (db *DB) GetKVStores(rule string, groupID session.ID,
117117

118118
// kvStores implements the rules.KVStores interface.
119119
type kvStores struct {
120-
*DB
120+
db *bbolt.DB
121121
ruleName string
122122
groupID session.ID
123123
featureName string
124124
}
125125

126-
// beginTx starts db transaction. The transaction will be a read or read-write
127-
// transaction depending on the value of the `writable` parameter.
128-
func (s *kvStores) beginTx(writable bool) (*kvStoreTx, error) {
129-
boltTx, err := s.Begin(writable)
130-
if err != nil {
131-
return nil, err
132-
}
133-
return &kvStoreTx{
134-
kvStores: s,
135-
boltTx: boltTx,
136-
}, nil
137-
}
138-
139126
// Update opens a database read/write transaction and executes the function f
140127
// with the transaction passed as a parameter. After f exits, if f did not
141128
// error, the transaction is committed. Otherwise, if f did error, the
@@ -144,30 +131,17 @@ func (s *kvStores) beginTx(writable bool) (*kvStoreTx, error) {
144131
// returned.
145132
//
146133
// NOTE: this is part of the KVStores interface.
147-
func (s *kvStores) Update(ctx context.Context, f func(ctx context.Context,
134+
func (s *kvStores) Update(ctx context.Context, fn func(ctx context.Context,
148135
tx KVStoreTx) error) error {
149136

150-
tx, err := s.beginTx(true)
151-
if err != nil {
152-
return err
153-
}
154-
155-
// Make sure the transaction rolls back in the event of a panic.
156-
defer func() {
157-
if tx != nil {
158-
_ = tx.boltTx.Rollback()
137+
return s.db.Update(func(tx *bbolt.Tx) error {
138+
boltTx := &kvStoreTx{
139+
boltTx: tx,
140+
kvStores: s,
159141
}
160-
}()
161142

162-
err = f(ctx, tx)
163-
if err != nil {
164-
// Want to return the original error, not a rollback error if
165-
// any occur.
166-
_ = tx.boltTx.Rollback()
167-
return err
168-
}
169-
170-
return tx.boltTx.Commit()
143+
return fn(ctx, boltTx)
144+
})
171145
}
172146

173147
// View opens a database read transaction and executes the function f with the
@@ -176,31 +150,17 @@ func (s *kvStores) Update(ctx context.Context, f func(ctx context.Context,
176150
// occur).
177151
//
178152
// NOTE: this is part of the KVStores interface.
179-
func (s *kvStores) View(ctx context.Context, f func(ctx context.Context,
153+
func (s *kvStores) View(ctx context.Context, fn func(ctx context.Context,
180154
tx KVStoreTx) error) error {
181155

182-
tx, err := s.beginTx(false)
183-
if err != nil {
184-
return err
185-
}
186-
187-
// Make sure the transaction rolls back in the event of a panic.
188-
defer func() {
189-
if tx != nil {
190-
_ = tx.boltTx.Rollback()
156+
return s.db.View(func(tx *bbolt.Tx) error {
157+
boltTx := &kvStoreTx{
158+
boltTx: tx,
159+
kvStores: s,
191160
}
192-
}()
193161

194-
err = f(ctx, tx)
195-
rollbackErr := tx.boltTx.Rollback()
196-
if err != nil {
197-
return err
198-
}
199-
200-
if rollbackErr != nil {
201-
return rollbackErr
202-
}
203-
return nil
162+
return fn(ctx, boltTx)
163+
})
204164
}
205165

206166
// getBucketFunc defines the signature of the bucket creation/fetching function

0 commit comments

Comments
 (0)