@@ -429,10 +429,10 @@ func (p *Propagator) processEvent() {
429
429
// DeleteOptions.OrphanDependents=true.
430
430
type GarbageCollector struct {
431
431
restMapper meta.RESTMapper
432
- // compressingClientPool uses the compressing codec, which removes fields
433
- // except for apiVersion, kind, and metadata when decode .
434
- compressingClientPool dynamic.ClientPool
435
- // clientPool uses the regular dynamic.Codec . We need it to update
432
+ // metaOnlyClientPool uses a special codec, which removes fields except for
433
+ // apiVersion, kind, and metadata during decoding .
434
+ metaOnlyClientPool dynamic.ClientPool
435
+ // clientPool uses the regular dynamicCodec . We need it to update
436
436
// finalizers. It can be removed if we support patching finalizers.
437
437
clientPool dynamic.ClientPool
438
438
dirtyQueue * workqueue.Type
@@ -466,28 +466,38 @@ func gcListWatcher(client *dynamic.Client, resource unversioned.GroupVersionReso
466
466
}
467
467
}
468
468
469
- func monitorFor (p * Propagator , clientPool dynamic.ClientPool , resource unversioned.GroupVersionResource ) (monitor , error ) {
469
+ func monitorFor (p * Propagator , clientPool dynamic.ClientPool , resource unversioned.GroupVersionResource , kind unversioned. GroupVersionKind ) (monitor , error ) {
470
470
// TODO: consider store in one storage.
471
471
glog .V (6 ).Infof ("create storage for resource %s" , resource )
472
472
var monitor monitor
473
- client , err := p .gc .compressingClientPool .ClientForGroupVersion (resource .GroupVersion ())
473
+ client , err := p .gc .metaOnlyClientPool .ClientForGroupVersion (resource .GroupVersion ())
474
474
if err != nil {
475
475
return monitor , err
476
476
}
477
+ setObjectTypeMeta := func (obj interface {}) {
478
+ runtimeObject , ok := obj .(runtime.Object )
479
+ if ! ok {
480
+ utilruntime .HandleError (fmt .Errorf ("expected runtime.Object, got %#v" , obj ))
481
+ }
482
+ runtimeObject .GetObjectKind ().SetGroupVersionKind (kind )
483
+ }
477
484
monitor .store , monitor .controller = framework .NewInformer (
478
485
gcListWatcher (client , resource ),
479
486
nil ,
480
487
ResourceResyncTime ,
481
488
framework.ResourceEventHandlerFuncs {
482
489
// add the event to the propagator's eventQueue.
483
490
AddFunc : func (obj interface {}) {
491
+ setObjectTypeMeta (obj )
484
492
event := event {
485
493
eventType : addEvent ,
486
494
obj : obj ,
487
495
}
488
496
p .eventQueue .Add (event )
489
497
},
490
498
UpdateFunc : func (oldObj , newObj interface {}) {
499
+ setObjectTypeMeta (newObj )
500
+ setObjectTypeMeta (oldObj )
491
501
event := event {updateEvent , newObj , oldObj }
492
502
p .eventQueue .Add (event )
493
503
},
@@ -496,6 +506,7 @@ func monitorFor(p *Propagator, clientPool dynamic.ClientPool, resource unversion
496
506
if deletedFinalStateUnknown , ok := obj .(cache.DeletedFinalStateUnknown ); ok {
497
507
obj = deletedFinalStateUnknown .Obj
498
508
}
509
+ setObjectTypeMeta (obj )
499
510
event := event {
500
511
eventType : deleteEvent ,
501
512
obj : obj ,
@@ -514,12 +525,12 @@ var ignoredResources = map[unversioned.GroupVersionResource]struct{}{
514
525
unversioned.GroupVersionResource {Group : "" , Version : "v1" , Resource : "events" }: {},
515
526
}
516
527
517
- func NewGarbageCollector (compressingClientPool dynamic.ClientPool , clientPool dynamic.ClientPool , resources []unversioned.GroupVersionResource ) (* GarbageCollector , error ) {
528
+ func NewGarbageCollector (metaOnlyClientPool dynamic.ClientPool , clientPool dynamic.ClientPool , resources []unversioned.GroupVersionResource ) (* GarbageCollector , error ) {
518
529
gc := & GarbageCollector {
519
- compressingClientPool : compressingClientPool ,
520
- clientPool : clientPool ,
521
- dirtyQueue : workqueue .New (),
522
- orphanQueue : workqueue .New (),
530
+ metaOnlyClientPool : metaOnlyClientPool ,
531
+ clientPool : clientPool ,
532
+ dirtyQueue : workqueue .New (),
533
+ orphanQueue : workqueue .New (),
523
534
// TODO: should use a dynamic RESTMapper built from the discovery results.
524
535
restMapper : registered .RESTMapper (),
525
536
}
@@ -536,7 +547,11 @@ func NewGarbageCollector(compressingClientPool dynamic.ClientPool, clientPool dy
536
547
glog .V (6 ).Infof ("ignore resource %#v" , resource )
537
548
continue
538
549
}
539
- monitor , err := monitorFor (gc .propagator , gc .clientPool , resource )
550
+ kind , err := gc .restMapper .KindFor (resource )
551
+ if err != nil {
552
+ return nil , err
553
+ }
554
+ monitor , err := monitorFor (gc .propagator , gc .clientPool , resource , kind )
540
555
if err != nil {
541
556
return nil , err
542
557
}
0 commit comments