scrape/scrape.go
func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error {
	targetScrapePoolReloads.Inc()
	start := time.Now()

	sp.mtx.Lock()
	defer sp.mtx.Unlock()

	client, err := config_util.NewClientFromConfig(cfg.HTTPClientConfig, cfg.JobName)
	if err != nil {
		targetScrapePoolReloadsFailed.Inc()
		return errors.Wrap(err, "error creating HTTP client")
	}
	sp.config = cfg
	oldClient := sp.client
	sp.client = client

	var (
		wg              sync.WaitGroup
		interval        = time.Duration(sp.config.ScrapeInterval)
		timeout         = time.Duration(sp.config.ScrapeTimeout)
		limit           = int(sp.config.SampleLimit)
		honorLabels     = sp.config.HonorLabels
		honorTimestamps = sp.config.HonorTimestamps
		mrc             = sp.config.MetricRelabelConfigs
	)

	for fp, oldLoop := range sp.loops {
		var (
			t       = sp.activeTargets[fp]
			s       = &targetScraper{Target: t, client: sp.client, timeout: timeout}
			newLoop = sp.newLoop(scrapeLoopOptions{
				target:          t,
				scraper:         s,
				limit:           limit,
				honorLabels:     honorLabels,
				honorTimestamps: honorTimestamps,
				mrc:             mrc,
			})
		)
		wg.Add(1)

		go func(oldLoop, newLoop loop) {
			oldLoop.stop()
			wg.Done()

			go newLoop.run(interval, timeout, nil)
		}(oldLoop, newLoop)

		sp.loops[fp] = newLoop
	}

	wg.Wait()
	oldClient.CloseIdleConnections()
	targetReloadIntervalLength.WithLabelValues(interval.String()).Observe(
		time.Since(start).Seconds(),
	)
	return nil
}
func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error {
	targetScrapePoolReloads.Inc()
	start := time.Now()

	sp.mtx.Lock()
	defer sp.mtx.Unlock()

	client, err := config_util.NewClientFromConfig(cfg.HTTPClientConfig, cfg.JobName)
	if err != nil {
		targetScrapePoolReloadsFailed.Inc()
		return errors.Wrap(err, "error creating HTTP client")
	}
	sp.config = cfg
	oldClient := sp.client
	sp.client = client

	var (
		wg              sync.WaitGroup
		interval        = time.Duration(sp.config.ScrapeInterval)
		timeout         = time.Duration(sp.config.ScrapeTimeout)
		limit           = int(sp.config.SampleLimit)
		honorLabels     = sp.config.HonorLabels
		honorTimestamps = sp.config.HonorTimestamps
		mrc             = sp.config.MetricRelabelConfigs
	)

	for fp, oldLoop := range sp.loops {
		var (
			t       = sp.activeTargets[fp]
			s       = &targetScraper{Target: t, client: sp.client, timeout: timeout}
			newLoop = sp.newLoop(scrapeLoopOptions{
				target:          t,
				scraper:         s,
				limit:           limit,
				honorLabels:     honorLabels,
				honorTimestamps: honorTimestamps,
				mrc:             mrc,
			})
		)
		wg.Add(1)

		go func(oldLoop, newLoop loop) {
			oldLoop.stop()
			wg.Done()

			go newLoop.run(interval, timeout, nil)
		}(oldLoop, newLoop)

		sp.loops[fp] = newLoop
	}

	wg.Wait()
	oldClient.CloseIdleConnections()
	targetReloadIntervalLength.WithLabelValues(interval.String()).Observe(
		time.Since(start).Seconds(),
	)
	return nil
}
func ( sp * scrapePool ) reload ( cfg * config . ScrapeConfig ) error { targetScrapePoolReloads . Inc ( ) start := time . Now ( ) sp . mtx . Lock ( ) defer sp . mtx . Unlock ( ) client , err := config_util . NewClientFromConfig ( cfg . HTTPClientConfig , cfg . JobName ) if err != nil { targetScrapePoolReloadsFailed . Inc ( ) return errors . Wrap ( err , " " ) } sp . config = cfg oldClient := sp . client sp . client = client var ( wg sync . WaitGroup interval = time . Duration ( sp . config . ScrapeInterval ) timeout = time . Duration ( sp . config . ScrapeTimeout ) limit = int ( sp . config . SampleLimit ) honorLabels = sp . config . HonorLabels honorTimestamps = sp . config . HonorTimestamps mrc = sp . config . MetricRelabelConfigs ) for fp , oldLoop := range sp . loops { var ( t = sp . activeTargets [ fp ] s = & targetScraper { Target : t , client : sp . client , timeout : timeout } newLoop = sp . newLoop ( scrapeLoopOptions { target : t , scraper : s , limit : limit , honorLabels : honorLabels , honorTimestamps : honorTimestamps , mrc : mrc , } ) ) wg . Add ( 1 ) go func ( oldLoop , newLoop loop ) { oldLoop . stop ( ) wg . Done ( ) go newLoop . run ( interval , timeout , nil ) } ( oldLoop , newLoop ) sp . loops [ fp ] = newLoop } wg . Wait ( ) oldClient . CloseIdleConnections ( ) targetReloadIntervalLength . WithLabelValues ( interval . String ( ) ) . Observe ( time . Since ( start ) . Seconds ( ) , ) return nil }
// reload the scrape pool with the given scrape configuration. The target state is preserved
// but all scrape loops are restarted with the new scrape configuration.
// This method returns after all scrape loops that were stopped have stopped scraping.
reload the scrape pool with the given scrape configuration . The target state is preserved but all scrape loops are restarted with the new scrape configuration . This method returns after all scrape loops that were stopped have stopped scraping .