diff --git a/pkg/client/cache/store.go b/pkg/client/cache/store.go index 47d70971c0..22e9ffd2ad 100644 --- a/pkg/client/cache/store.go +++ b/pkg/client/cache/store.go @@ -37,6 +37,7 @@ type Store interface { Update(obj interface{}) error Delete(obj interface{}) error List() []interface{} + ListKeys() []string Get(obj interface{}) (item interface{}, exists bool, err error) GetByKey(key string) (item interface{}, exists bool, err error) @@ -195,6 +196,18 @@ func (c *cache) List() []interface{} { return list } +// ListKeys returns a list of all the keys of the objects currently +// in the cache. +func (c *cache) ListKeys() []string { + c.lock.RLock() + defer c.lock.RUnlock() + list := make([]string, 0, len(c.items)) + for key := range c.items { + list = append(list, key) + } + return list +} + // Index returns a list of items that match on the index function // Index is thread-safe so long as you treat all items as immutable func (c *cache) Index(indexName string, obj interface{}) ([]interface{}, error) { diff --git a/pkg/client/cache/undelta_store.go b/pkg/client/cache/undelta_store.go index 70adda90c3..1c4c39ecb7 100644 --- a/pkg/client/cache/undelta_store.go +++ b/pkg/client/cache/undelta_store.go @@ -49,6 +49,7 @@ func (u *UndeltaStore) Add(obj interface{}) error { u.PushFunc(u.ActualStore.List()) return nil } + func (u *UndeltaStore) Update(obj interface{}) error { if err := u.ActualStore.Update(obj); err != nil { return err @@ -56,6 +57,7 @@ func (u *UndeltaStore) Update(obj interface{}) error { u.PushFunc(u.ActualStore.List()) return nil } + func (u *UndeltaStore) Delete(obj interface{}) error { if err := u.ActualStore.Delete(obj); err != nil { return err @@ -63,15 +65,23 @@ func (u *UndeltaStore) Delete(obj interface{}) error { u.PushFunc(u.ActualStore.List()) return nil } + func (u *UndeltaStore) List() []interface{} { return u.ActualStore.List() } + +func (u *UndeltaStore) ListKeys() []string { + return u.ActualStore.ListKeys() +} + func (u *UndeltaStore) Get(obj interface{}) (item interface{}, exists bool, err error) { return u.ActualStore.Get(obj) } + func (u *UndeltaStore) GetByKey(key string) (item interface{}, exists bool, err error) { return u.ActualStore.GetByKey(key) } + func (u *UndeltaStore) Replace(list []interface{}) error { if err := u.ActualStore.Replace(list); err != nil { return err