diff --git a/pkg/client/cache/controller.go b/pkg/client/cache/controller.go index 59fd52051eb..5ab84b8dd83 100644 --- a/pkg/client/cache/controller.go +++ b/pkg/client/cache/controller.go @@ -29,7 +29,7 @@ import ( type Config struct { // The queue for your objects; either a FIFO or // a DeltaFIFO. Your Process() function should accept - // the output of this Oueue's Pop() method. + // the output of this Queue's Pop() method. Queue // Something that can list and watch your objects. @@ -121,6 +121,11 @@ func (c *Controller) Requeue(obj interface{}) error { // TODO: Consider doing the processing in parallel. This will require a little thought // to make sure that we don't end up processing the same object multiple times // concurrently. +// +// TODO: Plumb through the stopCh here (and down to the queue) so that this can +// actually exit when the controller is stopped. Or just give up on this stuff +// ever being stoppable. Converting this whole package to use Context would +// also be helpful. func (c *Controller) processLoop() { for { obj, err := c.config.Queue.Pop(PopProcessFunc(c.config.Process)) @@ -134,7 +139,7 @@ func (c *Controller) processLoop() { } // ResourceEventHandler can handle notifications for events that happen to a -// resource. The events are informational only, so you can't return an +// resource. The events are informational only, so you can't return an // error. // * OnAdd is called when an object is added. // * OnUpdate is called when an object is modified. Note that oldObj is the diff --git a/pkg/client/cache/controller_test.go b/pkg/client/cache/controller_test.go index ed82cfd47f1..f26c839b808 100644 --- a/pkg/client/cache/controller_test.go +++ b/pkg/client/cache/controller_test.go @@ -283,6 +283,9 @@ func TestHammerController(t *testing.T) { time.Sleep(100 * time.Millisecond) close(stop) + // TODO: Verify that no goroutines were leaked here and that everything shut + // down cleanly. + outputSetLock.Lock() t.Logf("got: %#v", outputSet) } diff --git a/pkg/client/cache/reflector.go b/pkg/client/cache/reflector.go index 5410d29a28c..8a0d05ab479 100644 --- a/pkg/client/cache/reflector.go +++ b/pkg/client/cache/reflector.go @@ -45,7 +45,7 @@ import ( // Reflector watches a specified resource and causes all changes to be reflected in the given store. type Reflector struct { - // name identifies this reflector. By default it will be a file:line if possible. + // name identifies this reflector. By default it will be a file:line if possible. name string // The type of object we expect to place in the store. @@ -108,7 +108,7 @@ func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, return r } -// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common +// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common // call chains to NewReflector, so they'd be low entropy names for reflectors var internalPackages = []string{"kubernetes/pkg/client/cache/", "/runtime/asm_"}