func (d *DedupManager) createSession(client *consulapi.Client) {
START:
	log.Printf("[INFO] (dedup) attempting to create session")
	session := client.Session()
	sessionCh := make(chan struct{})
	ttl := fmt.Sprintf("%.6fs", float64(*d.config.TTL)/float64(time.Second))
	se := &consulapi.SessionEntry{
		Name:     "Consul-Template de-duplication",
		Behavior: "delete",
		TTL:      ttl,
	}
	id, _, err := session.Create(se, nil)
	if err != nil {
		log.Printf("[ERR] (dedup) failed to create session: %v", err)
		goto WAIT
	}
	log.Printf("[INFO] (dedup) created session %s", id)

	// Attempt to lock each template
	for _, t := range d.templates {
		d.wg.Add(1)
		go d.attemptLock(client, id, sessionCh, t)
	}

	// Renew our session periodically
	if err := session.RenewPeriodic("15s", id, nil, d.stopCh); err != nil {
		log.Printf("[ERR] (dedup) failed to renew session: %v", err)
	}
	close(sessionCh)
	d.wg.Wait()

WAIT:
	select {
	case <-time.After(sessionCreateRetry):
		goto START
	case <-d.stopCh:
		return
	}
}
func (d *DedupManager) createSession(client *consulapi.Client) {
START:
	log.Printf("[INFO] (dedup) attempting to create session")
	session := client.Session()
	sessionCh := make(chan struct{})
	ttl := fmt.Sprintf("%.6fs", float64(*d.config.TTL)/float64(time.Second))
	se := &consulapi.SessionEntry{
		Name:     "Consul-Template de-duplication",
		Behavior: "delete",
		TTL:      ttl,
	}
	id, _, err := session.Create(se, nil)
	if err != nil {
		log.Printf("[ERR] (dedup) failed to create session: %v", err)
		goto WAIT
	}
	log.Printf("[INFO] (dedup) created session %s", id)

	
	for _, t := range d.templates {
		d.wg.Add(1)
		go d.attemptLock(client, id, sessionCh, t)
	}

	
	if err := session.RenewPeriodic("15s", id, nil, d.stopCh); err != nil {
		log.Printf("[ERR] (dedup) failed to renew session: %v", err)
	}
	close(sessionCh)
	d.wg.Wait()

WAIT:
	select {
	case <-time.After(sessionCreateRetry):
		goto START
	case <-d.stopCh:
		return
	}
}
func ( d * DedupManager ) createSession ( client * consulapi . Client ) { START : log . Printf ( " " ) session := client . Session ( ) sessionCh := make ( chan struct { } ) ttl := fmt . Sprintf ( " " , float64 ( * d . config . TTL ) / float64 ( time . Second ) ) se := & consulapi . SessionEntry { Name : " " , Behavior : " " , TTL : ttl , } id , _ , err := session . Create ( se , nil ) if err != nil { log . Printf ( " " , err ) goto WAIT } log . Printf ( " " , id ) // Attempt to lock each template for _ , t := range d . templates { d . wg . Add ( 1 ) go d . attemptLock ( client , id , sessionCh , t ) } // Renew our session periodically if err := session . RenewPeriodic ( " " , id , nil , d . stopCh ) ; err != nil { log . Printf ( " " , err ) } close ( sessionCh ) d . wg . Wait ( ) WAIT : select { case <- time . After ( sessionCreateRetry ) : goto START case <- d . stopCh : return } }
// createSession is used to create and maintain a session to Consul
createSession is used to create and maintain a session to Consul