def _ensure_connection(self):
        if self._producer:
            return

        try:
            self._producer = kafka.KafkaProducer(
                bootstrap_servers=["%s:%s" % (self._host, self._port)])
        except kafka.errors.KafkaError as e:
            LOG.exception(_LE("Failed to connect to Kafka service: %s"), e)
            raise messaging.DeliveryFailure('Kafka Client is not available, '
                                            'please restart Kafka client')
        except Exception as e:
            LOG.exception(_LE("Failed to connect to Kafka service: %s"), e)
            raise messaging.DeliveryFailure('Kafka Client is not available, '
                                            'please restart Kafka client')
Exemple #2
0
    def test_published_with_policy_sized_queue_and_rpc_down(self):
        publisher = self.publisher_cls(netutils.urlsplit(
            '%s://?policy=queue&max_queue_length=3' % self.protocol))

        side_effect = msg_publisher.DeliveryFailure()
        with mock.patch.object(publisher, '_send') as fake_send:
            fake_send.side_effect = side_effect
            for i in range(0, 5):
                for s in self.test_data:
                    setattr(s, self.attr, 'test-%d' % i)
                getattr(publisher, self.pub_func)(mock.MagicMock(),
                                                  self.test_data)

        self.assertEqual(3, len(publisher.local_queue))
        self.assertEqual(
            'test-2',
            publisher.local_queue[0][2][0][self.attr]
        )
        self.assertEqual(
            'test-3',
            publisher.local_queue[1][2][0][self.attr]
        )
        self.assertEqual(
            'test-4',
            publisher.local_queue[2][2][0][self.attr]
        )
Exemple #3
0
    def test_publish_with_none_rabbit_driver(self, cgt):
        sample_publisher = msg_publisher.SampleNotifierPublisher(
            self.CONF,
            netutils.urlsplit('notifier://127.0.0.1:9092?driver=kafka'))
        cgt.assert_called_with(self.CONF, 'kafka://127.0.0.1:9092')
        transport = oslo_messaging.get_transport(self.CONF,
                                                 'kafka://127.0.0.1:9092')
        self.assertIsInstance(transport._driver, kafka_driver.KafkaDriver)

        side_effect = msg_publisher.DeliveryFailure()
        with mock.patch.object(sample_publisher, '_send') as fake_send:
            fake_send.side_effect = side_effect
            self.assertRaises(
                msg_publisher.DeliveryFailure,
                sample_publisher.publish_samples,
                self.test_sample_data)
            self.assertEqual(0, len(sample_publisher.local_queue))
            self.assertEqual(100, len(fake_send.mock_calls))
            fake_send.assert_called_with('metering', mock.ANY)

        event_publisher = msg_publisher.EventNotifierPublisher(
            self.CONF,
            netutils.urlsplit('notifier://127.0.0.1:9092?driver=kafka'))
        cgt.assert_called_with(self.CONF, 'kafka://127.0.0.1:9092')

        with mock.patch.object(event_publisher, '_send') as fake_send:
            fake_send.side_effect = side_effect
            self.assertRaises(
                msg_publisher.DeliveryFailure,
                event_publisher.publish_events,
                self.test_event_data)
            self.assertEqual(0, len(event_publisher.local_queue))
            self.assertEqual(100, len(fake_send.mock_calls))
            fake_send.assert_called_with('event', mock.ANY)
Exemple #4
0
 def test_published_with_policy_drop_and_rpc_down(self):
     publisher = self.publisher_cls(
         self.CONF, netutils.urlsplit('%s://?policy=drop' % self.protocol))
     side_effect = msg_publisher.DeliveryFailure()
     with mock.patch.object(publisher, '_send') as fake_send:
         fake_send.side_effect = side_effect
         getattr(publisher, self.pub_func)(self.test_data)
         self.assertEqual(0, len(publisher.local_queue))
         fake_send.assert_called_once_with(self.topic, mock.ANY)
    def _ensure_connection(self):
        if self._producer:
            return

        try:
            client = kafka.KafkaClient("%s:%s" % (self._host, self._port))
            self._producer = kafka.SimpleProducer(client)
        except Exception as e:
            LOG.exception(_LE("Failed to connect to Kafka service: %s"), e)
            raise messaging.DeliveryFailure('Kafka Client is not available, '
                                            'please restart Kafka client')
Exemple #6
0
 def test_published_with_policy_block(self, mylog):
     publisher = self.publisher_cls(
         netutils.urlsplit('%s://?policy=default' % self.protocol))
     side_effect = msg_publisher.DeliveryFailure()
     with mock.patch.object(publisher, '_send') as fake_send:
         fake_send.side_effect = side_effect
         self.assertRaises(msg_publisher.DeliveryFailure,
                           getattr(publisher, self.pub_func),
                           mock.MagicMock(), self.test_data)
         self.assertTrue(mylog.info.called)
         self.assertEqual(0, len(publisher.local_queue))
         fake_send.assert_called_once_with(mock.ANY, self.topic, mock.ANY)
Exemple #7
0
 def test_published_with_no_policy(self, mylog):
     publisher = self.publisher_cls(
         self.CONF, netutils.urlsplit('%s://' % self.protocol))
     side_effect = msg_publisher.DeliveryFailure()
     with mock.patch.object(publisher, '_send') as fake_send:
         fake_send.side_effect = side_effect
         self.assertRaises(msg_publisher.DeliveryFailure,
                           getattr(publisher, self.pub_func),
                           self.test_data)
         self.assertTrue(mylog.info.called)
         self.assertEqual('default', publisher.policy)
         self.assertEqual(0, len(publisher.local_queue))
         self.assertEqual(100, len(fake_send.mock_calls))
         fake_send.assert_called_with(self.topic, mock.ANY)
Exemple #8
0
    def test_published_with_policy_default_sized_queue_and_rpc_down(self):
        publisher = self.publisher_cls(
            self.CONF, netutils.urlsplit('%s://?policy=queue' % self.protocol))

        side_effect = msg_publisher.DeliveryFailure()
        with mock.patch.object(publisher, '_send') as fake_send:
            fake_send.side_effect = side_effect
            for i in range(0, 2000):
                for s in self.test_data:
                    setattr(s, self.attr, 'test-%d' % i)
                getattr(publisher, self.pub_func)(self.test_data)

        self.assertEqual(1024, len(publisher.local_queue))
        self.assertEqual('test-976', publisher.local_queue[0][1][0][self.attr])
        self.assertEqual('test-1999',
                         publisher.local_queue[1023][1][0][self.attr])
Exemple #9
0
    def test_published_with_policy_queue_and_rpc_down_up(self):
        self.rpc_unreachable = True
        publisher = self.publisher_cls(
            self.CONF,
            netutils.urlsplit('%s://?policy=queue' % self.protocol))

        side_effect = msg_publisher.DeliveryFailure()
        with mock.patch.object(publisher, '_send') as fake_send:
            fake_send.side_effect = side_effect
            getattr(publisher, self.pub_func)(self.test_data)

            self.assertEqual(1, len(publisher.local_queue))

            fake_send.side_effect = mock.MagicMock()
            getattr(publisher, self.pub_func)(self.test_data)

            self.assertEqual(0, len(publisher.local_queue))

            topic = self.topic
            expected = [mock.call(topic, mock.ANY),
                        mock.call(topic, mock.ANY),
                        mock.call(topic, mock.ANY)]
            self.assertEqual(expected, fake_send.mock_calls)