fix(poll): fetch task before sleeping to avoid startup delay

- Reorder pollOnce to fetch first and sleep after, matching the
  original rate.Limiter burst=1 behavior where the first poll
  returns immediately
- Remove unused ReportInterval config field that was never shipped
This commit is contained in:
Bo-Yi Wu
2026-04-11 10:27:24 +08:00
parent cce2dd9b9b
commit fc4eef3e0d
2 changed files with 8 additions and 10 deletions

View File

@@ -157,17 +157,16 @@ func addJitter(d time.Duration) time.Duration {
func (p *Poller) pollOnce() {
for {
interval := addJitter(p.calculateInterval())
timer := time.NewTimer(interval)
select {
case <-timer.C:
case <-p.pollingCtx.Done():
timer.Stop()
return
}
task, ok := p.fetchTask(p.pollingCtx)
if !ok {
interval := addJitter(p.calculateInterval())
timer := time.NewTimer(interval)
select {
case <-timer.C:
case <-p.pollingCtx.Done():
timer.Stop()
return
}
continue
}

View File

@@ -32,7 +32,6 @@ type Runner struct {
FetchTimeout time.Duration `yaml:"fetch_timeout"` // FetchTimeout specifies the timeout duration for fetching resources.
FetchInterval time.Duration `yaml:"fetch_interval"` // FetchInterval specifies the interval duration for fetching resources.
FetchIntervalMax time.Duration `yaml:"fetch_interval_max"` // FetchIntervalMax specifies the maximum backoff interval when idle.
ReportInterval time.Duration `yaml:"report_interval"` // Deprecated: use LogReportInterval and StateReportInterval instead.
LogReportInterval time.Duration `yaml:"log_report_interval"` // LogReportInterval specifies the base interval for periodic log flush.
LogReportMaxLatency time.Duration `yaml:"log_report_max_latency"` // LogReportMaxLatency specifies the max time a log row can wait before being sent.
LogReportBatchSize int `yaml:"log_report_batch_size"` // LogReportBatchSize triggers immediate log flush when buffer reaches this size.