p2p/discover: expose timeout in lookupFailed

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>

# Conflicts:
#	p2p/discover/lookup.go
This commit is contained in:
Csaba Kiraly 2025-09-16 14:03:11 +02:00
parent 0643427965
commit 3589c0d59b
No known key found for this signature in database
GPG key ID: 0FE274EE8C95166E

View file

@ -189,7 +189,7 @@ func (it *lookupIterator) Next() bool {
if it.lookup.empty() { if it.lookup.empty() {
// If the lookup is empty right after creation, it means the local table // If the lookup is empty right after creation, it means the local table
// is in a degraded state, and we need to wait for it to fill again. // is in a degraded state, and we need to wait for it to fill again.
it.lookupFailed(it.lookup.tab) it.lookupFailed(1 * time.Minute)
it.lookup = nil it.lookup = nil
continue continue
} }
@ -209,30 +209,30 @@ func (it *lookupIterator) Next() bool {
// lookupFailed handles failed lookup attempts. This can be called when the table has // lookupFailed handles failed lookup attempts. This can be called when the table has
// exited, or when it runs out of nodes. // exited, or when it runs out of nodes.
func (it *lookupIterator) lookupFailed(tab *Table) { func (it *lookupIterator) lookupFailed(timeout time.Duration) {
timeout, cancel := context.WithTimeout(it.ctx, 1*time.Minute) ctx, cancel := context.WithTimeout(it.ctx, timeout)
defer cancel() defer cancel()
// Wait for Table initialization to complete, in case it is still in progress. // Wait for Table initialization to complete, in case it is still in progress.
select { select {
case <-tab.initDone: case <-it.lookup.tab.initDone:
case <-timeout.Done(): case <-ctx.Done():
return return
} }
// Wait for ongoing refresh operation, or trigger one. // Wait for ongoing refresh operation, or trigger one.
if it.tabRefreshing == nil { if it.tabRefreshing == nil {
it.tabRefreshing = tab.refresh() it.tabRefreshing = it.lookup.tab.refresh()
} }
select { select {
case <-it.tabRefreshing: case <-it.tabRefreshing:
it.tabRefreshing = nil it.tabRefreshing = nil
case <-timeout.Done(): case <-ctx.Done():
return return
} }
// Wait for the table to fill. // Wait for the table to fill.
tab.waitForNodes(timeout, 1) it.lookup.tab.waitForNodes(ctx, 1)
} }
// Close ends the iterator. // Close ends the iterator.