Przeglądaj źródła

trim managed fields to reduce memory footprint on cached objects (#3025)

Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
Co-authored-by: Alex Meijer <ameijer@users.noreply.github.com>
Amir Alavi 1 rok temu
rodzic
commit
7a3cd27bea
1 zmienionych plików z 12 dodań i 3 usunięć
  1. 12 3
      pkg/clustercache/watchcontroller.go

+ 12 - 3
pkg/clustercache/watchcontroller.go

@@ -6,7 +6,7 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/opencost/opencost/core/pkg/log"
 	"github.com/opencost/opencost/core/pkg/log"
-
+	"k8s.io/apimachinery/pkg/api/meta"
 	"k8s.io/apimachinery/pkg/fields"
 	"k8s.io/apimachinery/pkg/fields"
 	rt "k8s.io/apimachinery/pkg/runtime"
 	rt "k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/util/runtime"
 	"k8s.io/apimachinery/pkg/util/runtime"
@@ -55,7 +55,7 @@ type CachingWatchController struct {
 func NewCachingWatcher(restClient rest.Interface, resource string, resourceType rt.Object, namespace string, fieldSelector fields.Selector) WatchController {
 func NewCachingWatcher(restClient rest.Interface, resource string, resourceType rt.Object, namespace string, fieldSelector fields.Selector) WatchController {
 	resourceCache := cache.NewListWatchFromClient(restClient, resource, namespace, fieldSelector)
 	resourceCache := cache.NewListWatchFromClient(restClient, resource, namespace, fieldSelector)
 	queue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
 	queue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
-	indexer, informer := cache.NewIndexerInformer(resourceCache, resourceType, 0, cache.ResourceEventHandlerFuncs{
+	indexer, informer := cache.NewTransformingIndexerInformer(resourceCache, resourceType, 0, cache.ResourceEventHandlerFuncs{
 		AddFunc: func(obj interface{}) {
 		AddFunc: func(obj interface{}) {
 			key, err := cache.MetaNamespaceKeyFunc(obj)
 			key, err := cache.MetaNamespaceKeyFunc(obj)
 			if err == nil {
 			if err == nil {
@@ -76,7 +76,7 @@ func NewCachingWatcher(restClient rest.Interface, resource string, resourceType
 				queue.Add(key)
 				queue.Add(key)
 			}
 			}
 		},
 		},
-	}, cache.Indexers{})
+	}, cache.Indexers{}, trimUnwantedFields)
 
 
 	return &CachingWatchController{
 	return &CachingWatchController{
 		indexer:      indexer,
 		indexer:      indexer,
@@ -206,3 +206,12 @@ func (c *CachingWatchController) runWorker() {
 	for c.processNextItem() {
 	for c.processNextItem() {
 	}
 	}
 }
 }
+
+// trimUnwantedFields removes unwanted fields from the object
+// - managedFields as this metadata can be quite large
+func trimUnwantedFields(obj interface{}) (interface{}, error) {
+	if accessor, err := meta.Accessor(obj); err == nil {
+		accessor.SetManagedFields(nil)
+	}
+	return obj, nil
+}