Esempio n. 1
0
    def test_decode_fetch_response(self):
        t1 = "topic1"
        t2 = "topic2"
        msgs = map(create_message, ["message1", "hi", "boo", "foo", "so fun!"])
        ms1 = KafkaProtocol._encode_message_set([msgs[0], msgs[1]])
        ms2 = KafkaProtocol._encode_message_set([msgs[2]])
        ms3 = KafkaProtocol._encode_message_set([msgs[3], msgs[4]])

        encoded = struct.pack(
            '>iih%dsiihqi%dsihqi%dsh%dsiihqi%ds' %
            (len(t1), len(ms1), len(ms2), len(t2), len(ms3)), 4, 2,
            len(t1), t1, 2, 0, 0, 10, len(ms1), ms1, 1, 1, 20, len(ms2), ms2,
            len(t2), t2, 1, 0, 0, 30, len(ms3), ms3)

        responses = list(KafkaProtocol.decode_fetch_response(encoded))

        def expand_messages(response):
            return FetchResponse(response.topic, response.partition,
                                 response.error, response.highwaterMark,
                                 list(response.messages))

        expanded_responses = map(expand_messages, responses)
        expect = [
            FetchResponse(
                t1, 0, 0, 10,
                [OffsetAndMessage(0, msgs[0]),
                 OffsetAndMessage(0, msgs[1])]),
            FetchResponse(t1, 1, 1, 20, [OffsetAndMessage(0, msgs[2])]),
            FetchResponse(
                t2, 0, 0, 30,
                [OffsetAndMessage(0, msgs[3]),
                 OffsetAndMessage(0, msgs[4])])
        ]
        self.assertEqual(expanded_responses, expect)
Esempio n. 2
0
 def fail_requests(payloads, **kwargs):
     responses = [
         FetchResponse(payloads[0].topic, payloads[0].partition, 0, 0,
                       (OffsetAndMessage(
                           payloads[0].offset + i,
                           "msg %d" % (payloads[0].offset + i))
                        for i in range(10))),
     ]
     for failure in payloads[1:]:
         responses.append(error_factory(failure))
     return responses
Esempio n. 3
0
    def decode_fetch_response(cls, data):
        """
        Decode bytes to a FetchResponse

        Arguments:
            data: bytes to decode
        """
        ((correlation_id, num_topics), cur) = relative_unpack('>ii', data, 0)

        for _ in range(num_topics):
            (topic, cur) = read_short_string(data, cur)
            ((num_partitions, ), cur) = relative_unpack('>i', data, cur)

            for j in range(num_partitions):
                ((partition, error, highwater_mark_offset), cur) = \
                    relative_unpack('>ihq', data, cur)

                (message_set, cur) = read_int_string(data, cur)

                yield FetchResponse(
                    topic, partition, error, highwater_mark_offset,
                    KafkaProtocol._decode_message_set_iter(message_set))
Esempio n. 4
0
 def expand_messages(response):
     return FetchResponse(response.topic, response.partition,
                          response.error, response.highwaterMark,
                          list(response.messages))
Esempio n. 5
0
 def unknown_topic_partition(request):
     return FetchResponse(request.topic, request.partition,
                          UnknownTopicOrPartitionError.errno, -1, ())
Esempio n. 6
0
 def not_leader(request):
     return FetchResponse(request.topic, request.partition,
                          NotLeaderForPartitionError.errno, -1, ())