コード例 #1
0
    def _create_encoded_metadata_response(self, broker_data, topic_data,
                                          topic_errors, partition_errors):
        encoded = struct.pack('>ii', 3, len(broker_data))
        for node_id, broker in compat.dict_items(broker_data):
            encoded += struct.pack('>ih%dsi' % len(broker.host), node_id,
                                   len(broker.host), compat.bytes(broker.host), broker.port)

        encoded += struct.pack('>i', len(topic_data))
        for topic, partitions in compat.dict_items(topic_data):
            encoded += struct.pack('>hh%dsi' % len(topic), topic_errors[topic],
                                   len(topic), compat.bytes(topic), len(partitions))
            for partition, metadata in compat.dict_items(partitions):
                encoded += struct.pack('>hiii',
                                       partition_errors[(topic, partition)],
                                       partition, metadata.leader,
                                       len(metadata.replicas))
                if len(metadata.replicas) > 0:
                    encoded += struct.pack('>%di' % len(metadata.replicas),
                                           *metadata.replicas)

                encoded += struct.pack('>i', len(metadata.isr))
                if len(metadata.isr) > 0:
                    encoded += struct.pack('>%di' % len(metadata.isr),
                                           *metadata.isr)

        return encoded
コード例 #2
0
    def _create_encoded_metadata_response(self, broker_data, topic_data,
                                          topic_errors, partition_errors):
        encoded = struct.pack('>ii', 3, len(broker_data))
        for node_id, broker in compat.dict_items(broker_data):
            encoded += struct.pack('>ih%dsi' % len(broker.host), node_id,
                                   len(broker.host), compat.bytes(broker.host),
                                   broker.port)

        encoded += struct.pack('>i', len(topic_data))
        for topic, partitions in compat.dict_items(topic_data):
            encoded += struct.pack('>hh%dsi' % len(topic), topic_errors[topic],
                                   len(topic), compat.bytes(topic),
                                   len(partitions))
            for partition, metadata in compat.dict_items(partitions):
                encoded += struct.pack('>hiii',
                                       partition_errors[(topic, partition)],
                                       partition, metadata.leader,
                                       len(metadata.replicas))
                if len(metadata.replicas) > 0:
                    encoded += struct.pack('>%di' % len(metadata.replicas),
                                           *metadata.replicas)

                encoded += struct.pack('>i', len(metadata.isr))
                if len(metadata.isr) > 0:
                    encoded += struct.pack('>%di' % len(metadata.isr),
                                           *metadata.isr)

        return encoded
コード例 #3
0
ファイル: test_client.py プロジェクト: wallellen/kafka-python
    def test_send_broker_unaware_request_fail(self):
        'Tests that call fails when all hosts are unavailable'

        mocked_conns = {
            ('kafka01', 9092): MagicMock(),
            ('kafka02', 9092): MagicMock()
        }

        # inject KafkaConnection side effects
        mocked_conns[('kafka01', 9092)].send.side_effect = RuntimeError("kafka01 went away (unittest)")
        mocked_conns[('kafka02', 9092)].send.side_effect = RuntimeError("Kafka02 went away (unittest)")

        def mock_get_conn(host, port):
            return mocked_conns[(host, port)]

        # patch to avoid making requests before we want it
        with patch.object(KafkaClient, 'load_metadata_for_topics'):
            with patch.object(KafkaClient, '_get_conn', side_effect=mock_get_conn):
                client = KafkaClient(hosts=['kafka01:9092', 'kafka02:9092'])

                with self.assertRaises(KafkaUnavailableError):
                    client._send_broker_unaware_request(1, 'fake request')

                for key, conn in compat.dict_items(mocked_conns):
                    conn.send.assert_called_with(1, 'fake request')
コード例 #4
0
ファイル: test_client.py プロジェクト: wallellen/kafka-python
    def test_send_broker_unaware_request_fail(self):
        'Tests that call fails when all hosts are unavailable'

        mocked_conns = {
            ('kafka01', 9092): MagicMock(),
            ('kafka02', 9092): MagicMock()
        }

        # inject KafkaConnection side effects
        mocked_conns[('kafka01', 9092)].send.side_effect = RuntimeError(
            "kafka01 went away (unittest)")
        mocked_conns[('kafka02', 9092)].send.side_effect = RuntimeError(
            "Kafka02 went away (unittest)")

        def mock_get_conn(host, port):
            return mocked_conns[(host, port)]

        # patch to avoid making requests before we want it
        with patch.object(KafkaClient, 'load_metadata_for_topics'):
            with patch.object(KafkaClient,
                              '_get_conn',
                              side_effect=mock_get_conn):
                client = KafkaClient(hosts=['kafka01:9092', 'kafka02:9092'])

                with self.assertRaises(KafkaUnavailableError):
                    client._send_broker_unaware_request(1, 'fake request')

                for key, conn in compat.dict_items(mocked_conns):
                    conn.send.assert_called_with(1, 'fake request')