watch/watcher.go
func (w *Watcher) Add(d dep.Dependency) (bool, error) {
	w.Lock()
	defer w.Unlock()

	log.Printf("[DEBUG] (watcher) adding %s", d)

	if _, ok := w.depViewMap[d.String()]; ok {
		log.Printf("[TRACE] (watcher) %s already exists, skipping", d)
		return false, nil
	}

	// Choose the correct retry function based off of the dependency's type.
	var retryFunc RetryFunc
	switch d.Type() {
	case dep.TypeConsul:
		retryFunc = w.retryFuncConsul
	case dep.TypeVault:
		retryFunc = w.retryFuncVault
	default:
		retryFunc = w.retryFuncDefault
	}

	v, err := NewView(&NewViewInput{
		Dependency: d,
		Clients:    w.clients,
		MaxStale:   w.maxStale,
		Once:       w.once,
		RetryFunc:  retryFunc,
		VaultGrace: w.vaultGrace,
	})
	if err != nil {
		return false, errors.Wrap(err, "watcher")
	}

	log.Printf("[TRACE] (watcher) %s starting", d)

	w.depViewMap[d.String()] = v
	go v.poll(w.dataCh, w.errCh)

	return true, nil
}
func (w *Watcher) Add(d dep.Dependency) (bool, error) {
	w.Lock()
	defer w.Unlock()

	log.Printf("[DEBUG] (watcher) adding %s", d)

	if _, ok := w.depViewMap[d.String()]; ok {
		log.Printf("[TRACE] (watcher) %s already exists, skipping", d)
		return false, nil
	}

	// Choose the correct retry function based off of the dependency's type.
	var retryFunc RetryFunc
	switch d.Type() {
	case dep.TypeConsul:
		retryFunc = w.retryFuncConsul
	case dep.TypeVault:
		retryFunc = w.retryFuncVault
	default:
		retryFunc = w.retryFuncDefault
	}

	v, err := NewView(&NewViewInput{
		Dependency: d,
		Clients:    w.clients,
		MaxStale:   w.maxStale,
		Once:       w.once,
		RetryFunc:  retryFunc,
		VaultGrace: w.vaultGrace,
	})
	if err != nil {
		return false, errors.Wrap(err, "watcher")
	}

	log.Printf("[TRACE] (watcher) %s starting", d)

	w.depViewMap[d.String()] = v
	go v.poll(w.dataCh, w.errCh)

	return true, nil
}
func ( w * Watcher ) Add ( d dep . Dependency ) ( bool , error ) { w . Lock ( ) defer w . Unlock ( ) log . Printf ( " " , d ) if _ , ok := w . depViewMap [ d . String ( ) ] ; ok { log . Printf ( " " , d ) return false , nil } // Choose the correct retry function based off of the dependency's type. var retryFunc RetryFunc switch d . Type ( ) { case dep . TypeConsul : retryFunc = w . retryFuncConsul case dep . TypeVault : retryFunc = w . retryFuncVault default : retryFunc = w . retryFuncDefault } v , err := NewView ( & NewViewInput { Dependency : d , Clients : w . clients , MaxStale : w . maxStale , Once : w . once , RetryFunc : retryFunc , VaultGrace : w . vaultGrace , } ) if err != nil { return false , errors . Wrap ( err , " " ) } log . Printf ( " " , d ) w . depViewMap [ d . String ( ) ] = v go v . poll ( w . dataCh , w . errCh ) return true , nil }
// Add adds the given dependency to the list of monitored dependencies
// and start the associated view. If the dependency already exists, no action is
// taken.
//
// If the Dependency already existed, it this function will return false. If the
// view was successfully created, it will return true. If an error occurs while
// creating the view, it will be returned here (but future errors returned by
// the view will happen on the channel).
Add adds the given dependency to the list of monitored dependencies and start the associated view . If the dependency already exists no action is taken . If the Dependency already existed it this function will return false . If the view was successfully created it will return true . If an error occurs while creating the view it will be returned here ( but future errors returned by the view will happen on the channel ) .