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()
}
}