Files
cloud-services/pkg/dbc/models/invalid_id_cache.go

48 lines
1015 B
Go

package models
import (
"fmt"
"sync"
"fiskerinc.com/modules/cache"
"fiskerinc.com/modules/utils/envtool"
)
var (
max_invalid_cache = envtool.GetEnvInt("MAX_INVALID_CANID_CACHE", 100)
invalidCANIDOnce sync.Once
invalidCANIDInstance InvalidCANIDCacheInterface
)
func NewInvalidCANIDCache() InvalidCANIDCacheInterface {
return &InvalidCANIDCache{
ringMap: cache.NewRingMap(max_invalid_cache),
}
}
func GetInvalidCANIDCache() InvalidCANIDCacheInterface {
invalidCANIDOnce.Do(func() {
if invalidCANIDInstance == nil {
invalidCANIDInstance = NewInvalidCANIDCache()
}
})
return invalidCANIDInstance
}
func SetInvalidCANIDCache(instance InvalidCANIDCacheInterface) {
invalidCANIDInstance = instance
}
type InvalidCANIDCacheInterface interface {
Exists(dbc string, can_id int32) bool
}
type InvalidCANIDCache struct {
ringMap *cache.RingMap
}
func (i *InvalidCANIDCache) Exists(dbc string, can_id int32) bool {
return !i.ringMap.Set(fmt.Sprintf("%s:%d", dbc[0:4], can_id), false)
}