@@ -1774,11 +1774,7 @@ func needContainerAttributes(rules ExtractionRules) bool {
17741774
17751775func (c * WatchClient ) handleReplicaSetAdd (obj any ) {
17761776 c .telemetryBuilder .OtelsvcK8sReplicasetAdded .Add (context .Background (), 1 )
1777- if replicaset , ok := obj .(* apps_v1.ReplicaSet ); ok {
1778- c .addOrUpdateReplicaSet (replicaset )
1779- } else {
1780- c .logger .Error ("object received was not of type apps_v1.ReplicaSet" , zap .Any ("received" , obj ))
1781- }
1777+ c .addOrUpdateReplicaSet (obj )
17821778}
17831779
17841780func (c * WatchClient ) handleReplicaSetUpdate (_ , newRS any ) {
@@ -1789,39 +1785,72 @@ func (c *WatchClient) handleReplicaSetUpdate(_, newRS any) {
17891785 c .logger .Error ("object received was not of type apps_v1.ReplicaSet" , zap .Any ("received" , newRS ))
17901786 }
17911787}
1792-
17931788func (c * WatchClient ) handleReplicaSetDelete (obj any ) {
17941789 c .telemetryBuilder .OtelsvcK8sReplicasetDeleted .Add (context .Background (), 1 )
1795- if replicaset , ok := ignoreDeletedFinalStateUnknown (obj ).(* apps_v1.ReplicaSet ); ok {
1796- c .m .Lock ()
1797- key := string (replicaset .UID )
1798- delete (c .ReplicaSets , key )
1799- c .m .Unlock ()
1800- } else {
1801- c .logger .Error ("object received was not of type apps_v1.ReplicaSet" , zap .Any ("received" , obj ))
1790+
1791+ // Unwrap DeletedFinalStateUnknown if present
1792+ o := ignoreDeletedFinalStateUnknown (obj )
1793+
1794+ var uid string
1795+ switch rs := o .(type ) {
1796+ case * apps_v1.ReplicaSet :
1797+ uid = string (rs .GetUID ())
1798+ case * meta_v1.PartialObjectMetadata :
1799+ uid = string (rs .GetUID ())
1800+ default :
1801+ c .logger .Error ("object received was not a ReplicaSet (apps_v1 or PartialObjectMetadata)" , zap .Any ("received" , obj ))
1802+ return
18021803 }
1804+
1805+ if uid == "" {
1806+ c .logger .Warn ("received ReplicaSet delete without UID" )
1807+ return
1808+ }
1809+
1810+ c .m .Lock ()
1811+ delete (c .ReplicaSets , uid )
1812+ c .m .Unlock ()
18031813}
18041814
1805- func (c * WatchClient ) addOrUpdateReplicaSet (replicaset * apps_v1.ReplicaSet ) {
1815+ func (c * WatchClient ) addOrUpdateReplicaSet (obj any ) {
1816+ var name , namespace , uid string
1817+ var owners []meta_v1.OwnerReference
1818+
1819+ switch rs := obj .(type ) {
1820+ case * apps_v1.ReplicaSet :
1821+ name = rs .GetName ()
1822+ namespace = rs .GetNamespace ()
1823+ uid = string (rs .GetUID ())
1824+ owners = rs .GetOwnerReferences ()
1825+ case * meta_v1.PartialObjectMetadata :
1826+ name = rs .GetName ()
1827+ namespace = rs .GetNamespace ()
1828+ uid = string (rs .GetUID ())
1829+ owners = rs .GetOwnerReferences ()
1830+ default :
1831+ c .logger .Error ("unexpected ReplicaSet object type" , zap .Any ("received" , obj ))
1832+ return
1833+ }
1834+
18061835 newReplicaSet := & ReplicaSet {
1807- Name : replicaset . Name ,
1808- Namespace : replicaset . Namespace ,
1809- UID : string ( replicaset . UID ) ,
1836+ Name : name ,
1837+ Namespace : namespace ,
1838+ UID : uid ,
18101839 }
18111840
1812- for _ , ownerReference := range replicaset . OwnerReferences {
1813- if ownerReference .Kind == "Deployment" && ownerReference .Controller != nil && * ownerReference .Controller {
1841+ for _ , owner := range owners {
1842+ if owner .Kind == "Deployment" && owner .Controller != nil && * owner .Controller {
18141843 newReplicaSet .Deployment = Deployment {
1815- Name : ownerReference .Name ,
1816- UID : string (ownerReference .UID ),
1844+ Name : owner .Name ,
1845+ UID : string (owner .UID ),
18171846 }
18181847 break
18191848 }
18201849 }
18211850
18221851 c .m .Lock ()
1823- if replicaset . UID != "" {
1824- c .ReplicaSets [string ( replicaset . UID ) ] = newReplicaSet
1852+ if uid != "" {
1853+ c .ReplicaSets [uid ] = newReplicaSet
18251854 }
18261855 c .m .Unlock ()
18271856}
0 commit comments