11use crate :: {
22 backoff:: { Backoff , BackoffConfig , ErrorOrThrottle } ,
3- client:: error:: { Error , RequestContext , Result } ,
3+ client:: {
4+ error:: { Error , RequestContext , Result } ,
5+ producer:: ProduceResult ,
6+ } ,
47 connection:: {
58 BrokerCache , BrokerCacheGeneration , BrokerConnection , BrokerConnector , MessengerTransport ,
69 MetadataLookupMode ,
@@ -15,6 +18,7 @@ use crate::{
1518 ListOffsetsRequest , ListOffsetsRequestPartition , ListOffsetsRequestTopic ,
1619 ListOffsetsResponse , ListOffsetsResponsePartition , NORMAL_CONSUMER , ProduceRequest ,
1720 ProduceRequestPartitionData , ProduceRequestTopicData , ProduceResponse ,
21+ ResponseBodyWithMetadata ,
1822 } ,
1923 primitives:: * ,
2024 record:: { Record as ProtocolRecord , * } ,
@@ -195,10 +199,10 @@ impl PartitionClient {
195199 & self ,
196200 records : Vec < Record > ,
197201 compression : Compression ,
198- ) -> Result < Vec < i64 > > {
202+ ) -> Result < ProduceResult > {
199203 // skip request entirely if `records` is empty
200204 if records. is_empty ( ) {
201- return Ok ( vec ! [ ] ) ;
205+ return Ok ( ProduceResult :: default ( ) ) ;
202206 }
203207
204208 let n = records. len ( ) as i64 ;
@@ -214,13 +218,20 @@ impl PartitionClient {
214218 . get ( )
215219 . await
216220 . map_err ( |e| ErrorOrThrottle :: Error ( ( e, None ) ) ) ?;
217- let response = broker
221+ let ResponseBodyWithMetadata {
222+ response,
223+ encoded_request_size,
224+ } = broker
218225 . request ( & request)
219226 . await
220227 . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?;
221228 maybe_throttle ( response. throttle_time_ms ) ?;
222229 process_produce_response ( self . partition , & self . topic , n, response)
223230 . map_err ( |e| ErrorOrThrottle :: Error ( ( e, Some ( r#gen) ) ) )
231+ . map ( |offsets| ProduceResult {
232+ offsets,
233+ encoded_request_size,
234+ } )
224235 } ,
225236 )
226237 . await
@@ -256,7 +267,8 @@ impl PartitionClient {
256267 let response = broker
257268 . request ( & request)
258269 . await
259- . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?;
270+ . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?
271+ . response ;
260272 maybe_throttle ( response. throttle_time_ms ) ?;
261273 process_fetch_response ( self . partition , & self . topic , response, offset)
262274 . map_err ( |e| ErrorOrThrottle :: Error ( ( e, Some ( r#gen) ) ) )
@@ -292,7 +304,8 @@ impl PartitionClient {
292304 let response = broker
293305 . request ( & request)
294306 . await
295- . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?;
307+ . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?
308+ . response ;
296309 maybe_throttle ( response. throttle_time_ms ) ?;
297310 process_list_offsets_response ( self . partition , & self . topic , response)
298311 . map_err ( |e| ErrorOrThrottle :: Error ( ( e, Some ( r#gen) ) ) )
@@ -325,7 +338,8 @@ impl PartitionClient {
325338 let response = broker
326339 . request ( & request)
327340 . await
328- . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?;
341+ . map_err ( |e| ErrorOrThrottle :: Error ( ( e. into ( ) , Some ( r#gen) ) ) ) ?
342+ . response ;
329343 maybe_throttle ( Some ( response. throttle_time_ms ) ) ?;
330344 process_delete_records_response ( & self . topic , self . partition , response)
331345 . map_err ( |e| ErrorOrThrottle :: Error ( ( e, Some ( r#gen) ) ) )
0 commit comments