make cluster event queue consumption non-blocking
This commit is contained in:
		
							parent
							
								
									d2828e5ece
								
							
						
					
					
						commit
						dad8e2f49f
					
				|  | @ -142,13 +142,9 @@ func (c *Controller) addCluster(lg *logrus.Entry, clusterName spec.NamespacedNam | |||
| 	return cl | ||||
| } | ||||
| 
 | ||||
| func (c *Controller) processEvent(obj interface{}) error { | ||||
| func (c *Controller) processEvent(event spec.ClusterEvent) { | ||||
| 	var clusterName spec.NamespacedName | ||||
| 
 | ||||
| 	event, ok := obj.(spec.ClusterEvent) | ||||
| 	if !ok { | ||||
| 		return fmt.Errorf("could not cast to ClusterEvent") | ||||
| 	} | ||||
| 	lg := c.logger.WithField("worker", event.WorkerID) | ||||
| 
 | ||||
| 	if event.EventType == spec.EventAdd || event.EventType == spec.EventSync { | ||||
|  | @ -166,7 +162,7 @@ func (c *Controller) processEvent(obj interface{}) error { | |||
| 	case spec.EventAdd: | ||||
| 		if clusterFound { | ||||
| 			lg.Debugf("cluster already exists") | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		lg.Infof("creation of the cluster started") | ||||
|  | @ -177,7 +173,7 @@ func (c *Controller) processEvent(obj interface{}) error { | |||
| 			cl.Error = fmt.Errorf("could not create cluster: %v", err) | ||||
| 			lg.Error(cl.Error) | ||||
| 
 | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		lg.Infoln("cluster has been created") | ||||
|  | @ -186,13 +182,13 @@ func (c *Controller) processEvent(obj interface{}) error { | |||
| 
 | ||||
| 		if !clusterFound { | ||||
| 			lg.Warnln("cluster does not exist") | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 		if err := cl.Update(event.NewSpec); err != nil { | ||||
| 			cl.Error = fmt.Errorf("could not update cluster: %v", err) | ||||
| 			lg.Error(cl.Error) | ||||
| 
 | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 		cl.Error = nil | ||||
| 		lg.Infoln("cluster has been updated") | ||||
|  | @ -202,12 +198,12 @@ func (c *Controller) processEvent(obj interface{}) error { | |||
| 		lg.Infoln("Deletion of the cluster started") | ||||
| 		if !clusterFound { | ||||
| 			lg.Errorf("unknown cluster: %q", clusterName) | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		if err := cl.Delete(); err != nil { | ||||
| 			lg.Errorf("could not delete cluster: %v", err) | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		func() { | ||||
|  | @ -238,14 +234,12 @@ func (c *Controller) processEvent(obj interface{}) error { | |||
| 		if err := cl.Sync(); err != nil { | ||||
| 			cl.Error = fmt.Errorf("could not sync cluster: %v", err) | ||||
| 			lg.Error(cl.Error) | ||||
| 			return nil | ||||
| 			return | ||||
| 		} | ||||
| 		cl.Error = nil | ||||
| 
 | ||||
| 		lg.Infof("cluster has been synced") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c *Controller) processClusterEventsQueue(idx int, stopCh <-chan struct{}, wg *sync.WaitGroup) { | ||||
|  | @ -257,13 +251,20 @@ func (c *Controller) processClusterEventsQueue(idx int, stopCh <-chan struct{}, | |||
| 	}() | ||||
| 
 | ||||
| 	for { | ||||
| 		if _, err := c.clusterEventQueues[idx].Pop(cache.PopProcessFunc(c.processEvent)); err != nil { | ||||
| 		obj, err := c.clusterEventQueues[idx].Pop(cache.PopProcessFunc(func(interface{}) error { return nil })) | ||||
| 		if err != nil { | ||||
| 			if err == cache.FIFOClosedError { | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			c.logger.Errorf("error when processing cluster events queue: %v", err) | ||||
| 			continue | ||||
| 		} | ||||
| 		event, ok := obj.(spec.ClusterEvent) | ||||
| 		if !ok { | ||||
| 			c.logger.Errorf("could not cast to ClusterEvent") | ||||
| 		} | ||||
| 
 | ||||
| 		c.processEvent(event) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue