in pkg/maps/loader.go [476:507]
func (m *BpfMap) BulkRefreshMapEntries(newMapContents map[string][]byte) error {
// 1. Update all map entries
err := m.BulkUpdateMapEntry(newMapContents)
if err != nil {
log.Errorf("refresh map failed: during update %v", err)
return err
}
// 2. Read all map entries
retrievedMapKeyList, err := m.GetAllMapKeys()
if err != nil {
log.Errorf("get all map keys failed: during Refresh %v", err)
return err
}
// 3. Delete stale Keys
log.Infof("Check for stale entries and got %d entries from BPF map", len(retrievedMapKeyList))
for _, key := range retrievedMapKeyList {
log.Infof("Checking if key %s is deletable", key)
if _, ok := newMapContents[key]; !ok {
log.Infof("This can be deleted, not needed anymore...")
deletableKeyByte := []byte(key)
deletableKeyBytePtr := uintptr(unsafe.Pointer(&deletableKeyByte[0]))
err = m.DeleteMapEntry(deletableKeyBytePtr)
if err != nil {
log.Infof("Unable to delete entry %s but will continue and err %v", key, err)
}
}
}
return nil
}