func NewRotatingTable()

in go/connection-refresh/btrefresh/bigtable_rotator.go [52:81]


func NewRotatingTable(dialer BtDialer, table string, refresh time.Duration) (*RotatingTable, error) {
	client, err := dialer()
	errors := make(chan error, 1)
	if err != nil {
		return nil, err
	}
	tbl := client.Open(table)
	warmTable(tbl)
	ticker := time.NewTicker(refresh)
	rt := &RotatingTable{tbl, client, ticker, errors}
	go func() {
		for range ticker.C {
			// Close the old client after waiting a bit
			go func() {
				oldC := rt.client
				time.Sleep(lameduckTime)
				oldC.Close()
			}()
			client, err := dialer()
			if err != nil {
				errors <- err
				continue
			}
			tbl := client.Open(table)
			warmTable(tbl)
			rt.Table = tbl
		}
	}()
	return rt, nil
}