Fix queue connection bugs
Fix logging if queue disconnects Reconnect if queue comes back
This commit is contained in:
		
							
								
								
									
										19
									
								
								nova/rpc.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								nova/rpc.py
									
									
									
									
									
								
							@@ -63,6 +63,10 @@ class Connection(connection.BrokerConnection):
 | 
			
		||||
            cls._instance = cls(**params)
 | 
			
		||||
        return cls._instance
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def recreate(cls):
 | 
			
		||||
        del cls._instance
 | 
			
		||||
        return cls.instance()
 | 
			
		||||
 | 
			
		||||
class Consumer(messaging.Consumer):
 | 
			
		||||
    # TODO(termie): it would be nice to give these some way of automatically
 | 
			
		||||
@@ -79,9 +83,20 @@ class Consumer(messaging.Consumer):
 | 
			
		||||
 | 
			
		||||
    attachToTornado = attach_to_tornado
 | 
			
		||||
 | 
			
		||||
    @exception.wrap_exception
 | 
			
		||||
    def fetch(self, *args, **kwargs):
 | 
			
		||||
        super(Consumer, self).fetch(*args, **kwargs)
 | 
			
		||||
        try:
 | 
			
		||||
            if getattr(self, 'failed_connection', False):
 | 
			
		||||
                # attempt to reconnect
 | 
			
		||||
                self.conn = Connection.recreate()
 | 
			
		||||
                self.backend = self.conn.create_backend()
 | 
			
		||||
            super(Consumer, self).fetch(*args, **kwargs)
 | 
			
		||||
            if getattr(self, 'failed_connection', False):
 | 
			
		||||
                logging.error("Reconnected to queue")
 | 
			
		||||
                self.failed_connection = False
 | 
			
		||||
        except Exception, ex:
 | 
			
		||||
            if not getattr(self, 'failed_connection', False):
 | 
			
		||||
                logging.exception("Failed to fetch message from queue")
 | 
			
		||||
                self.failed_connection = True
 | 
			
		||||
 | 
			
		||||
    def attach_to_twisted(self):
 | 
			
		||||
        loop = task.LoopingCall(self.fetch, enable_callbacks=True)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user