(mgr *cbgt.Manager)
| 1168 | } |
| 1169 | |
| 1170 | func RunRecentInfoCache(mgr *cbgt.Manager) { |
| 1171 | cfg := mgr.Cfg() |
| 1172 | |
| 1173 | cfgChangedCh := make(chan struct{}, 10) |
| 1174 | |
| 1175 | var indexDefsChanged uint32 |
| 1176 | |
| 1177 | go func() { // Debounce cfg events to feed into the cfgChangedCh. |
| 1178 | ech := make(chan cbgt.CfgEvent) |
| 1179 | cfg.Subscribe(cbgt.PLAN_PINDEXES_DIRECTORY_STAMP, ech) |
| 1180 | cfg.Subscribe(cbgt.INDEX_DEFS_KEY, ech) |
| 1181 | cfg.Subscribe(cbgt.CfgNodeDefsKey(cbgt.NODE_DEFS_WANTED), ech) |
| 1182 | |
| 1183 | for { |
| 1184 | ev := <-ech // First, wait for a cfg event. |
| 1185 | |
| 1186 | // check whether it is an index defn update. |
| 1187 | if ev.Key == cbgt.INDEX_DEFS_KEY { |
| 1188 | atomic.StoreUint32(&indexDefsChanged, 1) |
| 1189 | } |
| 1190 | |
| 1191 | debounceTimeCh := time.After(500 * time.Millisecond) |
| 1192 | |
| 1193 | DEBOUNCE_LOOP: |
| 1194 | for { |
| 1195 | select { |
| 1196 | case ev = <-ech: |
| 1197 | // check whether it is an index defn update. |
| 1198 | if ev.Key == cbgt.INDEX_DEFS_KEY { |
| 1199 | atomic.StoreUint32(&indexDefsChanged, 1) |
| 1200 | } |
| 1201 | // NO-OP when there are more, spammy cfg events. |
| 1202 | |
| 1203 | case <-debounceTimeCh: |
| 1204 | break DEBOUNCE_LOOP |
| 1205 | } |
| 1206 | } |
| 1207 | |
| 1208 | cfgChangedCh <- struct{}{} |
| 1209 | } |
| 1210 | }() |
| 1211 | |
| 1212 | tickCh := time.Tick(1 * time.Second) |
| 1213 | |
| 1214 | memStatsLoggingInterval, _ := strconv.Atoi(mgr.Options()["memStatsLoggingInterval"]) |
| 1215 | logMemStatCh := time.Tick(time.Duration(memStatsLoggingInterval) * time.Second) |
| 1216 | |
| 1217 | var prevMemoryUsed uint64 |
| 1218 | var curMemoryUsed uint64 |
| 1219 | |
| 1220 | var nodeDefs *cbgt.NodeDefs |
| 1221 | var planPIndexes *cbgt.PlanPIndexes |
| 1222 | |
| 1223 | indexDefs, indexDefsMap, err := mgr.GetIndexDefs(false) |
| 1224 | if err == nil { |
| 1225 | nodeDefs, _, err = cbgt.CfgGetNodeDefs(cfg, cbgt.NODE_DEFS_WANTED) |
| 1226 | if err == nil { |
| 1227 | planPIndexes, _, err = cbgt.CfgGetPlanPIndexes(cfg) |
no test coverage detected