@@ -52,52 +52,67 @@ class ProduceResponse_v3(Response):
5252 SCHEMA = ProduceResponse_v2 .SCHEMA
5353
5454
55- class ProduceRequest_v0 (Request ):
55+ class ProduceResponse_v4 (Response ):
56+ """
57+ The version number is bumped up to indicate that the client supports KafkaStorageException.
58+ The KafkaStorageException will be translated to NotLeaderForPartitionException in the response if version <= 3
59+ """
5660 API_KEY = 0
57- API_VERSION = 0
58- RESPONSE_TYPE = ProduceResponse_v0
61+ API_VERSION = 4
62+ SCHEMA = ProduceResponse_v3 .SCHEMA
63+
64+
65+ class ProduceResponse_v5 (Response ):
66+ API_KEY = 0
67+ API_VERSION = 5
5968 SCHEMA = Schema (
60- ('required_acks' , Int16 ),
61- ('timeout' , Int32 ),
6269 ('topics' , Array (
6370 ('topic' , String ('utf-8' )),
6471 ('partitions' , Array (
6572 ('partition' , Int32 ),
66- ('messages' , Bytes )))))
73+ ('error_code' , Int16 ),
74+ ('offset' , Int64 ),
75+ ('timestamp' , Int64 ),
76+ ('log_start_offset' , Int64 ))))),
77+ ('throttle_time_ms' , Int32 )
6778 )
6879
80+
81+ class ProduceRequest (Request ):
82+ API_KEY = 0
83+
6984 def expect_response (self ):
7085 if self .required_acks == 0 : # pylint: disable=no-member
7186 return False
7287 return True
7388
7489
75- class ProduceRequest_v1 (Request ):
76- API_KEY = 0
90+ class ProduceRequest_v0 (ProduceRequest ):
91+ API_VERSION = 0
92+ RESPONSE_TYPE = ProduceResponse_v0
93+ SCHEMA = Schema (
94+ ('required_acks' , Int16 ),
95+ ('timeout' , Int32 ),
96+ ('topics' , Array (
97+ ('topic' , String ('utf-8' )),
98+ ('partitions' , Array (
99+ ('partition' , Int32 ),
100+ ('messages' , Bytes )))))
101+ )
102+
103+
104+ class ProduceRequest_v1 (ProduceRequest ):
77105 API_VERSION = 1
78106 RESPONSE_TYPE = ProduceResponse_v1
79107 SCHEMA = ProduceRequest_v0 .SCHEMA
80108
81- def expect_response (self ):
82- if self .required_acks == 0 : # pylint: disable=no-member
83- return False
84- return True
85-
86-
87- class ProduceRequest_v2 (Request ):
88- API_KEY = 0
109+ class ProduceRequest_v2 (ProduceRequest ):
89110 API_VERSION = 2
90111 RESPONSE_TYPE = ProduceResponse_v2
91112 SCHEMA = ProduceRequest_v1 .SCHEMA
92113
93- def expect_response (self ):
94- if self .required_acks == 0 : # pylint: disable=no-member
95- return False
96- return True
97-
98114
99- class ProduceRequest_v3 (Request ):
100- API_KEY = 0
115+ class ProduceRequest_v3 (ProduceRequest ):
101116 API_VERSION = 3
102117 RESPONSE_TYPE = ProduceResponse_v3
103118 SCHEMA = Schema (
@@ -111,17 +126,32 @@ class ProduceRequest_v3(Request):
111126 ('messages' , Bytes )))))
112127 )
113128
114- def expect_response (self ):
115- if self .required_acks == 0 : # pylint: disable=no-member
116- return False
117- return True
129+
130+ class ProduceRequest_v4 (ProduceRequest ):
131+ """
132+ The version number is bumped up to indicate that the client supports KafkaStorageException.
133+ The KafkaStorageException will be translated to NotLeaderForPartitionException in the response if version <= 3
134+ """
135+ API_VERSION = 4
136+ RESPONSE_TYPE = ProduceResponse_v4
137+ SCHEMA = ProduceRequest_v3 .SCHEMA
138+
139+
140+ class ProduceRequest_v5 (ProduceRequest ):
141+ """
142+ Same as v4. The version number is bumped since the v5 response includes an additional
143+ partition level field: the log_start_offset.
144+ """
145+ API_VERSION = 5
146+ RESPONSE_TYPE = ProduceResponse_v5
147+ SCHEMA = ProduceRequest_v4 .SCHEMA
118148
119149
120150ProduceRequest = [
121151 ProduceRequest_v0 , ProduceRequest_v1 , ProduceRequest_v2 ,
122- ProduceRequest_v3
152+ ProduceRequest_v3 , ProduceRequest_v4 , ProduceRequest_v5
123153]
124154ProduceResponse = [
125155 ProduceResponse_v0 , ProduceResponse_v1 , ProduceResponse_v2 ,
126- ProduceResponse_v2
156+ ProduceResponse_v3 , ProduceResponse_v4 , ProduceResponse_v5
127157]
0 commit comments