func()

in pkg/datasource/sql/datasource/base/meta_cache.go [90:130]


func (c *BaseTableMetaCache) refresh(ctx context.Context) {
	f := func() {
		if c.db == nil || c.cfg == nil || c.cache == nil || len(c.cache) == 0 {
			return
		}

		tables := make([]string, 0, len(c.cache))
		for table := range c.cache {
			tables = append(tables, table)
		}
		conn, err := c.db.Conn(ctx)
		if err != nil {
			return
		}
		v, err := c.trigger.LoadAll(ctx, c.cfg.DBName, conn, tables...)
		if err != nil {
			return
		}

		c.lock.Lock()
		defer c.lock.Unlock()

		for i := range v {
			tm := v[i]
			upperTableName := strings.ToUpper(tm.TableName)
			if _, ok := c.cache[upperTableName]; ok {
				c.cache[upperTableName] = &entry{
					value: tm,
				}
			}
		}
	}

	f()

	ticker := time.NewTicker(time.Duration(1 * time.Minute))
	defer ticker.Stop()
	for range ticker.C {
		f()
	}
}