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,6 +157,8 @@ func addJitter(d time.Duration) time.Duration {
func (p *Poller) pollOnce() { func (p *Poller) pollOnce() {
for { for {
task, ok := p.fetchTask(p.pollingCtx)
if !ok {
interval := addJitter(p.calculateInterval()) interval := addJitter(p.calculateInterval())
timer := time.NewTimer(interval) timer := time.NewTimer(interval)
select { select {
@@ -165,9 +167,6 @@ func (p *Poller) pollOnce() {
timer.Stop() timer.Stop()
return return
} }
task, ok := p.fetchTask(p.pollingCtx)
if !ok {
continue continue
} }

View File

@@ -32,7 +32,6 @@ type Runner struct {
FetchTimeout time.Duration `yaml:"fetch_timeout"` // FetchTimeout specifies the timeout duration for fetching resources. 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. 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. 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. 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. 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. LogReportBatchSize int `yaml:"log_report_batch_size"` // LogReportBatchSize triggers immediate log flush when buffer reaches this size.