From 1b1f5f197aa4619ecb68425656c299c316e861e1 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 8 May 2018 20:42:06 -0700 Subject: [PATCH] routing/chainview/neutrino: cache filter entries This commit alters the neutrino chainview such that it caches the filter entries corresponding to watched outpoints at the moment they are added to the filter. Previously, we would rederive each filter entry when reconstructing the relevant filter entries, which would lead to unnecessary work on the gc. Now, each is created at most once, and reused across subsequent reconstructions. --- routing/chainview/neutrino.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/routing/chainview/neutrino.go b/routing/chainview/neutrino.go index 6b98f598e..cf622739b 100644 --- a/routing/chainview/neutrino.go +++ b/routing/chainview/neutrino.go @@ -42,7 +42,7 @@ type CfFilteredChainView struct { // chainFilter is the filterMtx sync.RWMutex - chainFilter map[wire.OutPoint]struct{} + chainFilter map[wire.OutPoint][]byte quit chan struct{} wg sync.WaitGroup @@ -62,7 +62,7 @@ func NewCfFilteredChainView(node *neutrino.ChainService) (*CfFilteredChainView, blockQueue: newBlockEventQueue(), quit: make(chan struct{}), rescanErrChan: make(chan error), - chainFilter: make(map[wire.OutPoint]struct{}), + chainFilter: make(map[wire.OutPoint][]byte), p2pNode: node, }, nil } @@ -250,9 +250,8 @@ func (c *CfFilteredChainView) FilterBlock(blockHash *chainhash.Hash) (*FilteredB // filters. c.filterMtx.RLock() relevantPoints := make([][]byte, 0, len(c.chainFilter)) - for op := range c.chainFilter { - opBytes := builder.OutPointToFilterEntry(op) - relevantPoints = append(relevantPoints, opBytes) + for _, filterEntry := range c.chainFilter { + relevantPoints = append(relevantPoints, filterEntry) } c.filterMtx.RUnlock() @@ -324,7 +323,7 @@ func (c *CfFilteredChainView) UpdateFilter(ops []wire.OutPoint, // UTXO's, ignoring duplicates in the process. c.filterMtx.Lock() for _, op := range ops { - c.chainFilter[op] = struct{}{} + c.chainFilter[op] = builder.OutPointToFilterEntry(op) } c.filterMtx.Unlock()