// Creates a cacher based given storageConfig. func StorageWithCacher( storageConfig *storagebackend.Config, capacity int, objectType runtime.Object, resourcePrefix string, scopeStrategy rest.NamespaceScopedStrategy, newListFunc func() runtime.Object, triggerFunc storage.TriggerPublisherFunc) storage.Interface { // TODO: we would change this later to make storage always have cacher and hide low level KV layer inside. // Currently it has two layers of same storage interface -- cacher and low level kv. cacherConfig := storage.CacherConfig{ CacheCapacity: capacity, Storage: generic.NewRawStorage(storageConfig), Versioner: etcdstorage.APIObjectVersioner{}, Type: objectType, ResourcePrefix: resourcePrefix, NewListFunc: newListFunc, TriggerPublisherFunc: triggerFunc, Codec: storageConfig.Codec, } if scopeStrategy.NamespaceScoped() { cacherConfig.KeyFunc = func(obj runtime.Object) (string, error) { return storage.NamespaceKeyFunc(resourcePrefix, obj) } } else { cacherConfig.KeyFunc = func(obj runtime.Object) (string, error) { return storage.NoNamespaceKeyFunc(resourcePrefix, obj) } } return storage.NewCacherFromConfig(cacherConfig) }
// Create a new Cacher responsible from service WATCH and LIST requests from its // internal cache and updating its cache in the background based on the given // configuration. func NewCacher( storage Interface, capacity int, versioner Versioner, objectType runtime.Object, resourcePrefix string, scopeStrategy rest.NamespaceScopedStrategy, newListFunc func() runtime.Object) Interface { config := CacherConfig{ CacheCapacity: capacity, Storage: storage, Versioner: versioner, Type: objectType, ResourcePrefix: resourcePrefix, NewListFunc: newListFunc, } if scopeStrategy.NamespaceScoped() { config.KeyFunc = func(obj runtime.Object) (string, error) { return NamespaceKeyFunc(resourcePrefix, obj) } } else { config.KeyFunc = func(obj runtime.Object) (string, error) { return NoNamespaceKeyFunc(resourcePrefix, obj) } } return NewCacherFromConfig(config) }
// Creates a cacher on top of the given 'storageInterface'. func StorageWithCacher( storageInterface storage.Interface, capacity int, objectType runtime.Object, resourcePrefix string, scopeStrategy rest.NamespaceScopedStrategy, newListFunc func() runtime.Object, triggerFunc storage.TriggerPublisherFunc) storage.Interface { config := storage.CacherConfig{ CacheCapacity: capacity, Storage: storageInterface, Versioner: etcdstorage.APIObjectVersioner{}, Type: objectType, ResourcePrefix: resourcePrefix, NewListFunc: newListFunc, TriggerPublisherFunc: triggerFunc, } if scopeStrategy.NamespaceScoped() { config.KeyFunc = func(obj runtime.Object) (string, error) { return storage.NamespaceKeyFunc(resourcePrefix, obj) } } else { config.KeyFunc = func(obj runtime.Object) (string, error) { return storage.NoNamespaceKeyFunc(resourcePrefix, obj) } } return storage.NewCacherFromConfig(config) }