mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	queue: Don't blow up when a connection closes quickly.
This commit is contained in:
		@@ -217,8 +217,13 @@ class TornadoQueueClient(SimpleQueueClient):
 | 
			
		||||
        ioloop.IOLoop.instance().call_later(retry_secs, self._reconnect)
 | 
			
		||||
 | 
			
		||||
    def _on_open(self, connection: pika.connection.Connection) -> None:
 | 
			
		||||
        self.connection.channel(
 | 
			
		||||
            on_open_callback = self._on_channel_open)
 | 
			
		||||
        try:
 | 
			
		||||
            self.connection.channel(
 | 
			
		||||
                on_open_callback = self._on_channel_open)
 | 
			
		||||
        except pika.exceptions.ConnectionClosed:
 | 
			
		||||
            # The connection didn't stay open long enough for this code to get to it.
 | 
			
		||||
            # Let _on_connection_closed deal with trying again.
 | 
			
		||||
            self.log.warning("TornadoQueueClient couldn't open channel: connection already closed")
 | 
			
		||||
 | 
			
		||||
    def _on_channel_open(self, channel: BlockingChannel) -> None:
 | 
			
		||||
        self.channel = channel
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								zerver/tests/test_queue.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								zerver/tests/test_queue.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
import mock
 | 
			
		||||
import os
 | 
			
		||||
from typing import Any
 | 
			
		||||
import ujson
 | 
			
		||||
 | 
			
		||||
from pika.exceptions import ConnectionClosed
 | 
			
		||||
 | 
			
		||||
from zerver.lib.queue import TornadoQueueClient
 | 
			
		||||
from zerver.lib.test_classes import ZulipTestCase
 | 
			
		||||
 | 
			
		||||
class TestTornadoQueueClient(ZulipTestCase):
 | 
			
		||||
    @mock.patch('zerver.lib.queue.logging.getLogger', autospec=True)
 | 
			
		||||
    @mock.patch('zerver.lib.queue.ExceptionFreeTornadoConnection', autospec=True)
 | 
			
		||||
    def test_on_open_closed(self, mock_cxn: mock.MagicMock,
 | 
			
		||||
                            mock_get_logger: mock.MagicMock) -> None:
 | 
			
		||||
        connection = TornadoQueueClient()
 | 
			
		||||
        connection.connection.channel.side_effect = ConnectionClosed
 | 
			
		||||
        connection._on_open(mock.MagicMock())
 | 
			
		||||
		Reference in New Issue
	
	Block a user