mirror of
https://github.com/rancher/norman.git
synced 2025-08-10 11:42:05 +00:00
Add name to handlers
This commit is contained in:
parent
9ce12b1644
commit
af105c2bc7
@ -23,17 +23,22 @@ type HandlerFunc func(key string) error
|
|||||||
|
|
||||||
type GenericController interface {
|
type GenericController interface {
|
||||||
Informer() cache.SharedIndexInformer
|
Informer() cache.SharedIndexInformer
|
||||||
AddHandler(handler HandlerFunc)
|
AddHandler(name string, handler HandlerFunc)
|
||||||
HandlerCount() int
|
HandlerCount() int
|
||||||
Enqueue(namespace, name string)
|
Enqueue(namespace, name string)
|
||||||
Sync(ctx context.Context) error
|
Sync(ctx context.Context) error
|
||||||
Start(ctx context.Context, threadiness int) error
|
Start(ctx context.Context, threadiness int) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type handlerDef struct {
|
||||||
|
name string
|
||||||
|
handler HandlerFunc
|
||||||
|
}
|
||||||
|
|
||||||
type genericController struct {
|
type genericController struct {
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
informer cache.SharedIndexInformer
|
informer cache.SharedIndexInformer
|
||||||
handlers []HandlerFunc
|
handlers []handlerDef
|
||||||
queue workqueue.RateLimitingInterface
|
queue workqueue.RateLimitingInterface
|
||||||
name string
|
name string
|
||||||
running bool
|
running bool
|
||||||
@ -72,8 +77,11 @@ func (g *genericController) Enqueue(namespace, name string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *genericController) AddHandler(handler HandlerFunc) {
|
func (g *genericController) AddHandler(name string, handler HandlerFunc) {
|
||||||
g.handlers = append(g.handlers, handler)
|
g.handlers = append(g.handlers, handlerDef{
|
||||||
|
name: name,
|
||||||
|
handler: handler,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *genericController) Sync(ctx context.Context) error {
|
func (g *genericController) Sync(ctx context.Context) error {
|
||||||
@ -162,23 +170,45 @@ func (g *genericController) processNextWorkItem() bool {
|
|||||||
|
|
||||||
// do your work on the key. This method will contains your "do stuff" logic
|
// do your work on the key. This method will contains your "do stuff" logic
|
||||||
err := g.syncHandler(key.(string))
|
err := g.syncHandler(key.(string))
|
||||||
if _, ok := err.(*ForgetError); err == nil || ok {
|
checkErr := err
|
||||||
|
if handlerErr, ok := checkErr.(*handlerError); ok {
|
||||||
|
checkErr = handlerErr.err
|
||||||
|
}
|
||||||
|
if _, ok := checkErr.(*ForgetError); err == nil || ok {
|
||||||
|
if ok {
|
||||||
|
logrus.Infof("%v %v completed with dropped err: %v", g.name, key, err)
|
||||||
|
}
|
||||||
g.queue.Forget(key)
|
g.queue.Forget(key)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
utilruntime.HandleError(fmt.Errorf("%v %v failed with : %v", g.name, key, err))
|
utilruntime.HandleError(fmt.Errorf("%v %v %v", g.name, key, err))
|
||||||
g.queue.AddRateLimited(key)
|
g.queue.AddRateLimited(key)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *genericController) syncHandler(s string) error {
|
func (g *genericController) syncHandler(s string) (err error) {
|
||||||
|
defer utilruntime.RecoverFromPanic(&err)
|
||||||
|
|
||||||
var errs []error
|
var errs []error
|
||||||
for _, handler := range g.handlers {
|
for _, handler := range g.handlers {
|
||||||
if err := handler(s); err != nil {
|
if err := handler.handler(s); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, &handlerError{
|
||||||
|
name: handler.name,
|
||||||
|
err: err,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return types.NewErrors(errs)
|
err = types.NewErrors(errs)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type handlerError struct {
|
||||||
|
name string
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handlerError) Error() string {
|
||||||
|
return fmt.Sprintf("[%s] failed with : %v", h.name, h.err)
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ type {{.schema.CodeName}}Lister interface {
|
|||||||
type {{.schema.CodeName}}Controller interface {
|
type {{.schema.CodeName}}Controller interface {
|
||||||
Informer() cache.SharedIndexInformer
|
Informer() cache.SharedIndexInformer
|
||||||
Lister() {{.schema.CodeName}}Lister
|
Lister() {{.schema.CodeName}}Lister
|
||||||
AddHandler(handler {{.schema.CodeName}}HandlerFunc)
|
AddHandler(name string, handler {{.schema.CodeName}}HandlerFunc)
|
||||||
Enqueue(namespace, name string)
|
Enqueue(namespace, name string)
|
||||||
Sync(ctx context.Context) error
|
Sync(ctx context.Context) error
|
||||||
Start(ctx context.Context, threadiness int) error
|
Start(ctx context.Context, threadiness int) error
|
||||||
@ -69,7 +69,7 @@ type {{.schema.CodeName}}Interface interface {
|
|||||||
Watch(opts metav1.ListOptions) (watch.Interface, error)
|
Watch(opts metav1.ListOptions) (watch.Interface, error)
|
||||||
DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
||||||
Controller() {{.schema.CodeName}}Controller
|
Controller() {{.schema.CodeName}}Controller
|
||||||
AddSyncHandler(sync {{.schema.CodeName}}HandlerFunc)
|
AddHandler(name string, sync {{.schema.CodeName}}HandlerFunc)
|
||||||
AddLifecycle(name string, lifecycle {{.schema.CodeName}}Lifecycle)
|
AddLifecycle(name string, lifecycle {{.schema.CodeName}}Lifecycle)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,8 +115,8 @@ func (c *{{.schema.ID}}Controller) Lister() {{.schema.CodeName}}Lister {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (c *{{.schema.ID}}Controller) AddHandler(handler {{.schema.CodeName}}HandlerFunc) {
|
func (c *{{.schema.ID}}Controller) AddHandler(name string, handler {{.schema.CodeName}}HandlerFunc) {
|
||||||
c.GenericController.AddHandler(func(key string) error {
|
c.GenericController.AddHandler(name, func(key string) error {
|
||||||
obj, exists, err := c.Informer().GetStore().GetByKey(key)
|
obj, exists, err := c.Informer().GetStore().GetByKey(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -219,12 +219,12 @@ func (s *{{.schema.ID}}Client) DeleteCollection(deleteOpts *metav1.DeleteOptions
|
|||||||
return s.objectClient.DeleteCollection(deleteOpts, listOpts)
|
return s.objectClient.DeleteCollection(deleteOpts, listOpts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *{{.schema.ID}}Client) AddSyncHandler(sync {{.schema.CodeName}}HandlerFunc) {
|
func (s *{{.schema.ID}}Client) AddHandler(name string, sync {{.schema.CodeName}}HandlerFunc) {
|
||||||
s.Controller().AddHandler(sync)
|
s.Controller().AddHandler(name, sync)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *{{.schema.ID}}Client) AddLifecycle(name string, lifecycle {{.schema.CodeName}}Lifecycle) {
|
func (s *{{.schema.ID}}Client) AddLifecycle(name string, lifecycle {{.schema.CodeName}}Lifecycle) {
|
||||||
sync := New{{.schema.CodeName}}LifecycleAdapter(name, s, lifecycle)
|
sync := New{{.schema.CodeName}}LifecycleAdapter(name, s, lifecycle)
|
||||||
s.AddSyncHandler(sync)
|
s.AddHandler(name, sync)
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
Loading…
Reference in New Issue
Block a user