Skip to content

Commit 2c9bcc2

Browse files
committed
restructure conditionals
1 parent 8ac8fbd commit 2c9bcc2

File tree

1 file changed

+68
-61
lines changed

1 file changed

+68
-61
lines changed

server/get_header.go

Lines changed: 68 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -205,79 +205,86 @@ func (m *BoostService) handleTimingGamesGetHeader(
205205
}
206206
}
207207

208+
if relayConfig.FrequencyGetHeaderMs == 0 {
209+
// in the case if frequency is not set, send only one getHeader request
210+
return m.sendGetHeaderRequest(log, relay, url, slotUID, userAgent, proposerAcceptContentTypes, timeoutLeftMs)
211+
}
212+
208213
// send multiple requests at frequency intervals
209-
if relayConfig.FrequencyGetHeaderMs > 0 { //nolint:nestif
210-
log.WithFields(logrus.Fields{
211-
"frequencyMs": relayConfig.FrequencyGetHeaderMs,
212-
"timeoutLeftMs": timeoutLeftMs,
213-
}).Debug("sending multiple header requests via timing games")
214+
log.WithFields(logrus.Fields{
215+
"frequencyMs": relayConfig.FrequencyGetHeaderMs,
216+
"timeoutLeftMs": timeoutLeftMs,
217+
}).Debug("sending multiple header requests via timing games")
214218

215-
var bidResults []bidResult
216-
var mu sync.Mutex
217-
var wg sync.WaitGroup
219+
var (
220+
bidResults []bidResult
221+
mu sync.Mutex
222+
wg sync.WaitGroup
223+
)
218224

219-
// helper to send a request with the remaining timeout budget
220-
sendTimedRequest := func(timeoutMs uint64) {
221-
defer wg.Done()
222-
bid, contentType := m.sendGetHeaderRequest(log, relay, url, slotUID, userAgent, proposerAcceptContentTypes, timeoutMs)
223-
if bid != nil {
224-
mu.Lock()
225-
bidResults = append(bidResults, bidResult{
226-
bid: bid,
227-
contentType: contentType,
228-
timestamp: time.Now(),
229-
})
230-
mu.Unlock()
231-
}
225+
// helper to send a request with the remaining timeout budget
226+
sendTimedRequest := func(timeoutMs uint64) {
227+
defer wg.Done()
228+
bid, contentType := m.sendGetHeaderRequest(log, relay, url, slotUID, userAgent, proposerAcceptContentTypes, timeoutMs)
229+
if bid != nil {
230+
mu.Lock()
231+
bidResults = append(bidResults, bidResult{
232+
bid: bid,
233+
contentType: contentType,
234+
timestamp: time.Now(),
235+
})
236+
mu.Unlock()
232237
}
238+
}
233239

234-
// send first request asap
235-
wg.Add(1)
236-
go sendTimedRequest(timeoutLeftMs)
237-
238-
ticker := time.NewTicker(time.Duration(relayConfig.FrequencyGetHeaderMs) * time.Millisecond)
239-
defer ticker.Stop()
240-
timeoutCh := time.After(time.Duration(timeoutLeftMs) * time.Millisecond)
241-
242-
// send subsequent requests at regular intervals until timeout
243-
loop:
244-
for {
245-
select {
246-
case <-ticker.C:
247-
// dec the remaining timeout budget and send request
248-
if timeoutLeftMs > relayConfig.FrequencyGetHeaderMs {
249-
timeoutLeftMs -= relayConfig.FrequencyGetHeaderMs
250-
wg.Add(1)
251-
go sendTimedRequest(timeoutLeftMs)
252-
}
253-
case <-timeoutCh:
254-
break loop
240+
// send first request asap
241+
wg.Add(1)
242+
go sendTimedRequest(timeoutLeftMs)
243+
244+
ticker := time.NewTicker(time.Duration(relayConfig.FrequencyGetHeaderMs) * time.Millisecond)
245+
defer ticker.Stop()
246+
timeoutCh := time.After(time.Duration(timeoutLeftMs) * time.Millisecond)
247+
248+
// send subsequent requests at regular intervals until timeout
249+
loop:
250+
for {
251+
select {
252+
case <-ticker.C:
253+
// dec the remaining timeout budget and send request
254+
if timeoutLeftMs > relayConfig.FrequencyGetHeaderMs {
255+
timeoutLeftMs -= relayConfig.FrequencyGetHeaderMs
256+
wg.Add(1)
257+
go sendTimedRequest(timeoutLeftMs)
255258
}
259+
case <-timeoutCh:
260+
break loop
256261
}
262+
}
257263

258-
wg.Wait()
259-
260-
// select only the bid which was most recently received
261-
if len(bidResults) > 0 {
262-
log.WithField("totalBids", len(bidResults)).Debug("received headers from relay via timing games")
263-
var latestBid *builderSpec.VersionedSignedBuilderBid
264-
var latestContentType string
265-
var latestTime time.Time
266-
for _, br := range bidResults {
267-
if latestBid == nil || br.timestamp.After(latestTime) {
268-
latestBid = br.bid
269-
latestContentType = br.contentType
270-
latestTime = br.timestamp
271-
}
272-
}
273-
return latestBid, latestContentType
274-
}
264+
wg.Wait()
265+
266+
// if no bids were received return an empty bid
267+
if len(bidResults) == 0 {
275268
log.Warn("no headers received via timing games")
276269
return nil, ""
277270
}
278271

279-
// in the case if frequency is not set, send only one getHeader request
280-
return m.sendGetHeaderRequest(log, relay, url, slotUID, userAgent, proposerAcceptContentTypes, timeoutLeftMs)
272+
var (
273+
latestBid *builderSpec.VersionedSignedBuilderBid
274+
latestContentType string
275+
latestTime time.Time
276+
)
277+
// select only the bid which was most recently received and return it
278+
log.WithField("totalBids", len(bidResults)).Debug("received headers from relay via timing games")
279+
280+
for _, br := range bidResults {
281+
if latestBid == nil || br.timestamp.After(latestTime) {
282+
latestBid = br.bid
283+
latestContentType = br.contentType
284+
latestTime = br.timestamp
285+
}
286+
}
287+
return latestBid, latestContentType
281288
}
282289

283290
// sendGetHeaderRequest sends a single getHeader request to a relay and returns the bid and content type

0 commit comments

Comments
 (0)