From fbcd1e91b1cf08a08957b5dc0184e42ddef785be Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Tue, 7 May 2024 11:15:03 +0200 Subject: [PATCH] server: removed lock, added second check to prevent multiple log outputs --- server/service.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/server/service.go b/server/service.go index 14e44695..9b3e2e4b 100644 --- a/server/service.go +++ b/server/service.go @@ -662,17 +662,20 @@ func (m *BoostService) processDenebPayload(w http.ResponseWriter, req *http.Requ headers := map[string]string{HeaderKeySlotUID: currentSlotUID} // Prepare for requests - var wg sync.WaitGroup resultCh := make(chan *builderApi.VersionedSubmitBlindedBlockResponse, len(m.relays)) + var received atomic.Bool + go func() { + // Make sure we receive a response within the timeout + time.Sleep(m.httpClientGetPayload.Timeout) + resultCh <- nil + }() // Prepare the request context, which will be cancelled after the first successful response from a relay requestCtx, requestCtxCancel := context.WithCancel(context.Background()) defer requestCtxCancel() for _, relay := range m.relays { - wg.Add(1) go func(relay types.RelayEntry) { - defer wg.Done() url := relay.GetURI(params.PathGetPayload) log := log.WithField("url", url) log.Debug("calling getPayload") @@ -728,14 +731,16 @@ func (m *BoostService) processDenebPayload(w http.ResponseWriter, req *http.Requ } requestCtxCancel() - resultCh <- responsePayload - log.Info("received payload from relay") + if received.CompareAndSwap(true, true) { + log.Trace("Discarding response, already received a correct response") + } else { + resultCh <- responsePayload + log.Info("received payload from relay") + } }(relay) } - // Wait for all requests to complete... - wg.Wait() - close(resultCh) + // Wait for the first request to complete result := <-resultCh // If no payload has been received from relay, log loudly about withholding!