@@ -53,8 +53,8 @@ type FilterData struct {
5353//
5454// TODO(roasbeef): similar interface for headerfs?
5555type 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
0 commit comments