timanager

package
v2.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2025 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewResourceEventHandler

NewResourceEventHandler creates a ResourceEventHandler. See "sigs.k8s.io/controller-runtime/pkg/internal/source.NewEventHandler"

func PrimaryKey

func PrimaryKey(ns, name string) string

func SplitPrimaryKey

func SplitPrimaryKey(key string) (ns, name string)

Types

type Cache

type Cache[Client, UnderlayClient any] interface {
	Client() Client
	InformerFactory() SharedInformerFactory[UnderlayClient]

	Keys() []string

	Start(ctx context.Context)
	Stop()
}

func NewCache

func NewCache[Client, UnderlayClient any](keys []string, c Client, f SharedInformerFactory[UnderlayClient]) Cache[Client, UnderlayClient]

type CacheKeysFunc

type CacheKeysFunc[Object client.Object] func(obj Object) ([]string, error)

type CacheLister

type CacheLister[T any, PT Object[T]] interface {
	List(selector labels.Selector) ([]PT, error)
	Get(name string) (PT, error)
}

type ClientManager

type ClientManager[Object client.Object, Client any] interface {
	Register(obj Object) error
	Deregister(key string)
	Get(key string) (Client, bool)
}

type Equality

type Equality[T any, PT Object[T]] interface {
	Equal(prev, cur PT) bool
}

func NewDeepEquality

func NewDeepEquality[T any, PT Object[T]](logger logr.Logger) Equality[T, PT]

type EventSource

type EventSource interface {
	source.Source
	For(key string, f cache.SharedIndexInformer) error
	HasSynced(key string) bool
}

func NewEventSource

func NewEventSource(h handler.EventHandler) EventSource

type GlobalCacheLister

type GlobalCacheLister[T any, PT Object[T]] interface {
	ByCluster(cluster string) CacheLister[T, PT]
}

func NewGlobalCacheLister

func NewGlobalCacheLister[T any, PT Object[T]](indexer cache.Indexer, gr schema.GroupResource) GlobalCacheLister[T, PT]

type List

type List[T any, PT Object[T]] struct {
	metav1.TypeMeta
	metav1.ListMeta

	Items []T
}

List is a list of objects. NOTE: it's only for test now

func (*List[T, PT]) DeepCopy

func (in *List[T, PT]) DeepCopy() *List[T, PT]

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

func (*List[T, PT]) DeepCopyInto

func (in *List[T, PT]) DeepCopyInto(out *List[T, PT])

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

func (*List[T, PT]) DeepCopyObject

func (in *List[T, PT]) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type Lister

type Lister[T any, PT Object[T], L client.ObjectList] interface {
	List(ctx context.Context) (L, error)
	GetItems(l L) []PT
	MarkAsInvalid(PT) bool
}

type ListerWatcher

type ListerWatcher[UnderlayClient any] interface {
	cache.ListerWatcher
}

func NewListerWatcher

func NewListerWatcher[UnderlayClient any](
	logger logr.Logger,
	p Poller,
) ListerWatcher[UnderlayClient]

type Manager

type Manager[Object client.Object, Client any] interface {
	ClientManager[Object, Client]

	Source(obj runtime.Object, h handler.EventHandler) source.Source
	Start(ctx context.Context)
}

type ManagerBuilder

type ManagerBuilder[Object client.Object, UnderlayClient, Client any] interface {
	WithLogger(logger logr.Logger) ManagerBuilder[Object, UnderlayClient, Client]
	WithCacheKeysFunc(f CacheKeysFunc[Object]) ManagerBuilder[Object, UnderlayClient, Client]
	WithNewUnderlayClientFunc(f NewUnderlayClientFunc[Object, UnderlayClient]) ManagerBuilder[Object, UnderlayClient, Client]
	WithNewClientFunc(f NewClientFunc[Object, UnderlayClient, Client]) ManagerBuilder[Object, UnderlayClient, Client]
	WithNewPollerFunc(obj runtime.Object, f NewPollerFunc[UnderlayClient]) ManagerBuilder[Object, UnderlayClient, Client]
	WithResyncPeriod(time.Duration) ManagerBuilder[Object, UnderlayClient, Client]

	Build() Manager[Object, Client]
}

func NewManagerBuilder

func NewManagerBuilder[Object client.Object, UnderlayClient, Client any]() ManagerBuilder[Object, UnderlayClient, Client]

type NewClientFunc

type NewClientFunc[Object client.Object, UnderlayClient, Client any] func(
	Object, UnderlayClient, SharedInformerFactory[UnderlayClient]) Client

NewClientFunc is the func to new an external client with the cache layer, for example, timanager.PDClient

type NewPollerFunc

type NewPollerFunc[UnderlayClient any] func(name string, logger logr.Logger, c UnderlayClient) Poller

NewPollerFunc is the function to new a poller by underlay client

type NewUnderlayClientFunc

type NewUnderlayClientFunc[Object client.Object, UnderlayClient any] func(obj Object) (UnderlayClient, error)

NewUnderlayClientFunc is the func to new a underlay client, for example, pdapi.PDClient

type Object

type Object[T any] interface {
	*T
	client.Object
	DeepCopy() *T
	DeepCopyInto(*T)
}

type Poller

type Poller interface {
	// Sync will initialize the state of poller
	// It will poll and make sure state is available
	// Sync must be called before Run
	Sync(ctx context.Context) (runtime.Object, error)
	// IF Run is called multiple times, the previous one will be stopped
	// immediately and start a new one to push event to new channel
	Run(ctx context.Context, ch chan<- watch.Event)
	// Refresh once immediately
	Refresh()
}

Poller polls from tidb and sends watch event to channel

func NewPoller

func NewPoller[T any, PT Object[T], L client.ObjectList](
	name string,
	logger logr.Logger,
	lister Lister[T, PT, L],
	eq Equality[T, PT],
	interval time.Duration,
) Poller

type RefreshFunc

type RefreshFunc func()

func (RefreshFunc) Refresh

func (f RefreshFunc) Refresh()

type RefreshableCacheLister

type RefreshableCacheLister[T any, PT Object[T]] interface {
	CacheLister[T, PT]
	Refresher
}

func CacheWithRefresher

func CacheWithRefresher[T any, PT Object[T]](c CacheLister[T, PT], r Refresher) RefreshableCacheLister[T, PT]

type Refresher

type Refresher interface {
	Refresh()
}

type SharedInformerFactory

type SharedInformerFactory[UnderlayClient any] interface {
	Start(stopCh <-chan struct{})
	Shutdown()
	WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
	InformerFor(obj runtime.Object) cache.SharedIndexInformer

	// call function for each registered informer
	ForEach(func(t reflect.Type, informer cache.SharedIndexInformer) error) error

	// Refresh will poll once immediately
	Refresh(obj runtime.Object)
}

SharedInformerFactory is modified from k8s.io/client-go/informers/factory.go to support poll from tidb clusters.

func NewSharedInformerFactory

func NewSharedInformerFactory[UnderlayClient any](
	name string,
	logger logr.Logger,
	scheme *runtime.Scheme,
	c UnderlayClient,
	newPollerFuncMap map[reflect.Type]NewPollerFunc[UnderlayClient],
	resyncPeriod time.Duration,
) SharedInformerFactory[UnderlayClient]

Directories

Path Synopsis
apis
pd/v1
+groupName=pd.pingcap.com +versionName=v1 +k8s:deepcopy-gen=package
+groupName=pd.pingcap.com +versionName=v1 +k8s:deepcopy-gen=package
Package pd is a generated GoMock package.
Package pd is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL