Skip to content

Commit 66599be

Browse files
committed
filterdb: update for batch filter writes
1 parent c0d6775 commit 66599be

File tree

5 files changed

+65
-21
lines changed

5 files changed

+65
-21
lines changed

filterdb/db.go

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ type FilterData struct {
5353
//
5454
// TODO(roasbeef): similar interface for headerfs?
5555
type FilterDatabase interface {
56-
// PutFilter stores a filter to persistent storage.
57-
PutFilter(*FilterData) error
56+
// PutFilters stores a set of filters to persistent storage.
57+
PutFilters(...*FilterData) error
5858

5959
// FetchFilter attempts to fetch a filter with the given hash and type
6060
// from persistent storage. In the case that a filter matching the
@@ -163,27 +163,46 @@ func putFilter(bucket walletdb.ReadWriteBucket, hash *chainhash.Hash,
163163
return bucket.Put(hash[:], bytes)
164164
}
165165

166-
// PutFilter stores a filter with the given hash and type to persistent
167-
// storage.
166+
// PutFilters stores a set of filters to persistent storage.
168167
//
169168
// NOTE: This method is a part of the FilterDatabase interface.
170-
func (f *FilterStore) PutFilter(filterData *FilterData) error {
171-
return walletdb.Update(f.db, func(tx walletdb.ReadWriteTx) error {
169+
func (f *FilterStore) PutFilters(filterList ...*FilterData) error {
170+
var updateErr error
171+
err := walletdb.Batch(f.db, func(tx walletdb.ReadWriteTx) error {
172172
filters := tx.ReadWriteBucket(filterBucket)
173+
regularFilterBkt := filters.NestedReadWriteBucket(regBucket)
174+
175+
for _, filterData := range filterList {
176+
var targetBucket walletdb.ReadWriteBucket
177+
switch filterData.Type {
178+
case RegularFilter:
179+
targetBucket = regularFilterBkt
180+
default:
181+
updateErr = fmt.Errorf("unknown filter "+
182+
"type: %v", filterData.Type)
183+
184+
return nil
185+
}
173186

174-
var targetBucket walletdb.ReadWriteBucket
175-
switch filterData.Type {
176-
case RegularFilter:
177-
targetBucket = filters.NestedReadWriteBucket(regBucket)
178-
default:
179-
return fmt.Errorf("unknown filter type: %v",
180-
filterData.Type)
187+
err := putFilter(
188+
targetBucket, filterData.BlockHash,
189+
filterData.Filter,
190+
)
191+
if err != nil {
192+
return err
193+
}
194+
195+
log.Tracef("Wrote filter for block %s, type %d",
196+
&filterData.BlockHash, filterData.Type)
181197
}
182198

183-
return putFilter(
184-
targetBucket, filterData.BlockHash, filterData.Filter,
185-
)
199+
return nil
186200
})
201+
if err != nil {
202+
return err
203+
}
204+
205+
return updateErr
187206
}
188207

189208
// FetchFilter attempts to fetch a filter with the given hash and type from

filterdb/db_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func TestFilterStorage(t *testing.T) {
9292
Type: RegularFilter,
9393
}
9494

95-
err = database.PutFilter(filter)
95+
err = database.PutFilters(filter)
9696
require.NoError(t, err)
9797

9898
// With the filter stored, we should be able to retrieve the filter

filterdb/log.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package filterdb
2+
3+
import "github.com/btcsuite/btclog"
4+
5+
// log is a logger that is initialized with no output filters. This
6+
// means the package will not perform any logging by default until the caller
7+
// requests it.
8+
var log btclog.Logger
9+
10+
// The default amount of logging is none.
11+
func init() {
12+
DisableLog()
13+
}
14+
15+
// DisableLog disables all library log output. Logging output is disabled
16+
// by default until either UseLogger or SetLogWriter are called.
17+
func DisableLog() {
18+
UseLogger(btclog.Disabled)
19+
}
20+
21+
// UseLogger uses a specified Logger to output package logging info.
22+
// This should be used in preference to SetLogWriter if the caller is also
23+
// using btclog.
24+
func UseLogger(logger btclog.Logger) {
25+
log = logger
26+
}

log.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/btcsuite/btcd/txscript"
99
"github.com/btcsuite/btclog"
1010
"github.com/lightninglabs/neutrino/blockntfns"
11+
"github.com/lightninglabs/neutrino/filterdb"
1112
"github.com/lightninglabs/neutrino/pushtx"
1213
"github.com/lightninglabs/neutrino/query"
1314
)
@@ -41,4 +42,5 @@ func UseLogger(logger btclog.Logger) {
4142
pushtx.UseLogger(logger)
4243
connmgr.UseLogger(logger)
4344
query.UseLogger(logger)
45+
filterdb.UseLogger(logger)
4446
}

query.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -540,13 +540,10 @@ func (q *cfiltersQuery) handleResponse(req, resp wire.Message,
540540
Type: dbFilterType,
541541
}
542542

543-
err = q.cs.FilterDB.PutFilter(filterData)
543+
err = q.cs.FilterDB.PutFilters(filterData)
544544
if err != nil {
545545
log.Warnf("Couldn't write filter to filterDB: %v", err)
546546
}
547-
548-
log.Tracef("Wrote filter for block %s, type %d",
549-
&response.BlockHash, dbFilterType)
550547
}
551548

552549
// We delete the entry for this filter from the headerIndex to indicate

0 commit comments

Comments
 (0)