apimachinery: k8s.io/apimachinery/pkg/watch Index | Files

package watch

import "k8s.io/apimachinery/pkg/watch"

Package watch contains a generic watchable interface, and a fake for testing code that uses the watch interface.

Index

Package Files

doc.go filter.go mux.go streamwatcher.go watch.go zz_generated.deepcopy.go

Constants

const (
    Added    EventType = "ADDED"
    Modified EventType = "MODIFIED"
    Deleted  EventType = "DELETED"
    Bookmark EventType = "BOOKMARK"
    Error    EventType = "ERROR"

    DefaultChanSize int32 = 100
)

type Broadcaster Uses

type Broadcaster struct {
    // contains filtered or unexported fields
}

Broadcaster distributes event notifications among any number of watchers. Every event is delivered to every watcher.

func NewBroadcaster Uses

func NewBroadcaster(queueLength int, fullChannelBehavior FullChannelBehavior) *Broadcaster

NewBroadcaster creates a new Broadcaster. queueLength is the maximum number of events to queue per watcher. It is guaranteed that events will be distributed in the order in which they occur, but the order in which a single event is distributed among all of the watchers is unspecified.

func (*Broadcaster) Action Uses

func (m *Broadcaster) Action(action EventType, obj runtime.Object)

Action distributes the given event among all watchers.

func (*Broadcaster) Shutdown Uses

func (m *Broadcaster) Shutdown()

Shutdown disconnects all watchers (but any queued events will still be distributed). You must not call Action or Watch* after calling Shutdown. This call blocks until all events have been distributed through the outbound channels. Note that since they can be buffered, this means that the watchers might not have received the data yet as it can remain sitting in the buffered channel.

func (*Broadcaster) Watch Uses

func (m *Broadcaster) Watch() Interface

Watch adds a new watcher to the list and returns an Interface for it. Note: new watchers will only receive new events. They won't get an entire history of previous events.

func (*Broadcaster) WatchWithPrefix Uses

func (m *Broadcaster) WatchWithPrefix(queuedEvents []Event) Interface

WatchWithPrefix adds a new watcher to the list and returns an Interface for it. It sends queuedEvents down the new watch before beginning to send ordinary events from Broadcaster. The returned watch will have a queue length that is at least large enough to accommodate all of the items in queuedEvents.

type Decoder Uses

type Decoder interface {
    // Decode should return the type of event, the decoded object, or an error.
    // An error will cause StreamWatcher to call Close(). Decode should block until
    // it has data or an error occurs.
    Decode() (action EventType, object runtime.Object, err error)

    // Close should close the underlying io.Reader, signalling to the source of
    // the stream that it is no longer being watched. Close() must cause any
    // outstanding call to Decode() to return with an error of some sort.
    Close()
}

Decoder allows StreamWatcher to watch any stream for which a Decoder can be written.

type Event Uses

type Event struct {
    Type EventType

    // Object is:
    //  * If Type is Added or Modified: the new state of the object.
    //  * If Type is Deleted: the state of the object immediately before deletion.
    //  * If Type is Bookmark: the object (instance of a type being watched) where
    //    only ResourceVersion field is set. On successful restart of watch from a
    //    bookmark resourceVersion, client is guaranteed to not get repeat event
    //    nor miss any events.
    //  * If Type is Error: *api.Status is recommended; other types may make sense
    //    depending on context.
    Object runtime.Object
}

Event represents a single event to a watched resource. +k8s:deepcopy-gen=true

func (*Event) DeepCopy Uses

func (in *Event) DeepCopy() *Event

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Event.

func (*Event) DeepCopyInto Uses

func (in *Event) DeepCopyInto(out *Event)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type EventType Uses

type EventType string

EventType defines the possible types of events.

type FakeWatcher Uses

type FakeWatcher struct {
    Stopped bool
    sync.Mutex
    // contains filtered or unexported fields
}

FakeWatcher lets you test anything that consumes a watch.Interface; threadsafe.

func NewFake Uses

func NewFake() *FakeWatcher

func NewFakeWithChanSize Uses

func NewFakeWithChanSize(size int, blocking bool) *FakeWatcher

func (*FakeWatcher) Action Uses

func (f *FakeWatcher) Action(action EventType, obj runtime.Object)

Action sends an event of the requested type, for table-based testing.

func (*FakeWatcher) Add Uses

func (f *FakeWatcher) Add(obj runtime.Object)

Add sends an add event.

func (*FakeWatcher) Delete Uses

func (f *FakeWatcher) Delete(lastValue runtime.Object)

Delete sends a delete event.

func (*FakeWatcher) Error Uses

func (f *FakeWatcher) Error(errValue runtime.Object)

Error sends an Error event.

func (*FakeWatcher) IsStopped Uses

func (f *FakeWatcher) IsStopped() bool

func (*FakeWatcher) Modify Uses

func (f *FakeWatcher) Modify(obj runtime.Object)

Modify sends a modify event.

func (*FakeWatcher) Reset Uses

func (f *FakeWatcher) Reset()

Reset prepares the watcher to be reused.

func (*FakeWatcher) ResultChan Uses

func (f *FakeWatcher) ResultChan() <-chan Event

func (*FakeWatcher) Stop Uses

func (f *FakeWatcher) Stop()

Stop implements Interface.Stop().

type FilterFunc Uses

type FilterFunc func(in Event) (out Event, keep bool)

FilterFunc should take an event, possibly modify it in some way, and return the modified event. If the event should be ignored, then return keep=false.

type FullChannelBehavior Uses

type FullChannelBehavior int

FullChannelBehavior controls how the Broadcaster reacts if a watcher's watch channel is full.

const (
    WaitIfChannelFull FullChannelBehavior = iota
    DropIfChannelFull
)

type Interface Uses

type Interface interface {
    // Stops watching. Will close the channel returned by ResultChan(). Releases
    // any resources used by the watch.
    Stop()

    // Returns a chan which will receive all the events. If an error occurs
    // or Stop() is called, this channel will be closed, in which case the
    // watch should be completely cleaned up.
    ResultChan() <-chan Event
}

Interface can be implemented by anything that knows how to watch and report changes.

func Filter Uses

func Filter(w Interface, f FilterFunc) Interface

Filter passes all events through f before allowing them to pass on. Putting a filter on a watch, as an unavoidable side-effect due to the way go channels work, effectively causes the watch's event channel to have its queue length increased by one.

WARNING: filter has a fatal flaw, in that it can't properly update the Type field (Add/Modified/Deleted) to reflect items beginning to pass the filter when they previously didn't.

func NewEmptyWatch Uses

func NewEmptyWatch() Interface

NewEmptyWatch returns a watch interface that returns no results and is closed. May be used in certain error conditions where no information is available but an error is not warranted.

type ProxyWatcher Uses

type ProxyWatcher struct {
    // contains filtered or unexported fields
}

ProxyWatcher lets you wrap your channel in watch Interface. Threadsafe.

func NewProxyWatcher Uses

func NewProxyWatcher(ch chan Event) *ProxyWatcher

NewProxyWatcher creates new ProxyWatcher by wrapping a channel

func (*ProxyWatcher) ResultChan Uses

func (pw *ProxyWatcher) ResultChan() <-chan Event

ResultChan implements Interface

func (*ProxyWatcher) Stop Uses

func (pw *ProxyWatcher) Stop()

Stop implements Interface

func (*ProxyWatcher) StopChan Uses

func (pw *ProxyWatcher) StopChan() <-chan struct{}

StopChan returns stop channel

func (*ProxyWatcher) Stopping Uses

func (pw *ProxyWatcher) Stopping() bool

Stopping returns true if Stop() has been called

type RaceFreeFakeWatcher Uses

type RaceFreeFakeWatcher struct {
    Stopped bool
    sync.Mutex
    // contains filtered or unexported fields
}

RaceFreeFakeWatcher lets you test anything that consumes a watch.Interface; threadsafe.

func NewRaceFreeFake Uses

func NewRaceFreeFake() *RaceFreeFakeWatcher

func (*RaceFreeFakeWatcher) Action Uses

func (f *RaceFreeFakeWatcher) Action(action EventType, obj runtime.Object)

Action sends an event of the requested type, for table-based testing.

func (*RaceFreeFakeWatcher) Add Uses

func (f *RaceFreeFakeWatcher) Add(obj runtime.Object)

Add sends an add event.

func (*RaceFreeFakeWatcher) Delete Uses

func (f *RaceFreeFakeWatcher) Delete(lastValue runtime.Object)

Delete sends a delete event.

func (*RaceFreeFakeWatcher) Error Uses

func (f *RaceFreeFakeWatcher) Error(errValue runtime.Object)

Error sends an Error event.

func (*RaceFreeFakeWatcher) IsStopped Uses

func (f *RaceFreeFakeWatcher) IsStopped() bool

func (*RaceFreeFakeWatcher) Modify Uses

func (f *RaceFreeFakeWatcher) Modify(obj runtime.Object)

Modify sends a modify event.

func (*RaceFreeFakeWatcher) Reset Uses

func (f *RaceFreeFakeWatcher) Reset()

Reset prepares the watcher to be reused.

func (*RaceFreeFakeWatcher) ResultChan Uses

func (f *RaceFreeFakeWatcher) ResultChan() <-chan Event

func (*RaceFreeFakeWatcher) Stop Uses

func (f *RaceFreeFakeWatcher) Stop()

Stop implements Interface.Stop().

type Recorder Uses

type Recorder struct {
    Interface
    // contains filtered or unexported fields
}

Recorder records all events that are sent from the watch until it is closed.

func NewRecorder Uses

func NewRecorder(w Interface) *Recorder

NewRecorder wraps an Interface and records any changes sent across it.

func (*Recorder) Events Uses

func (r *Recorder) Events() []Event

Events returns a copy of the events sent across this recorder.

type Reporter Uses

type Reporter interface {
    // AsObject must convert err into a valid runtime.Object for the watch stream.
    AsObject(err error) runtime.Object
}

Reporter hides the details of how an error is turned into a runtime.Object for reporting on a watch stream since this package may not import a higher level report.

type StreamWatcher Uses

type StreamWatcher struct {
    sync.Mutex
    // contains filtered or unexported fields
}

StreamWatcher turns any stream for which you can write a Decoder interface into a watch.Interface.

func NewStreamWatcher Uses

func NewStreamWatcher(d Decoder, r Reporter) *StreamWatcher

NewStreamWatcher creates a StreamWatcher from the given decoder.

func (*StreamWatcher) ResultChan Uses

func (sw *StreamWatcher) ResultChan() <-chan Event

ResultChan implements Interface.

func (*StreamWatcher) Stop Uses

func (sw *StreamWatcher) Stop()

Stop implements Interface.

Package watch imports 8 packages (graph) and is imported by 2734 packages. Updated 2019-04-17. Refresh now. Tools for package owners.