@@ -244,25 +244,56 @@ def export(
244244 if delay == self ._MAX_RETRY_TIMEOUT :
245245 return MetricExportResult .FAILURE
246246
247- resp = self ._export (serialized_data .SerializeToString ())
248- # pylint: disable=no-else-return
249- if resp .ok :
250- return MetricExportResult .SUCCESS
251- elif self ._retryable (resp ):
252- _logger .warning (
253- "Transient error %s encountered while exporting metric batch, retrying in %ss." ,
254- resp .reason ,
255- delay ,
256- )
257- sleep (delay )
258- continue
247+ if self ._max_export_batch_size is None :
248+ resp = self ._export (serialized_data .SerializeToString ())
249+ # pylint: disable=no-else-return
250+ if resp .ok :
251+ return MetricExportResult .SUCCESS
252+ elif self ._retryable (resp ):
253+ _logger .warning (
254+ "Transient error %s encountered while exporting metric batch, retrying in %ss." ,
255+ resp .reason ,
256+ delay ,
257+ )
258+ sleep (delay )
259+ continue
260+ else :
261+ _logger .error (
262+ "Failed to export batch code: %s, reason: %s" ,
263+ resp .status_code ,
264+ resp .text ,
265+ )
266+ return MetricExportResult .FAILURE
267+
268+ # Else, attempt export in batches for this retry
259269 else :
260- _logger .error (
261- "Failed to export batch code: %s, reason: %s" ,
262- resp .status_code ,
263- resp .text ,
264- )
265- return MetricExportResult .FAILURE
270+ export_result = MetricExportResult .SUCCESS
271+ for split_metrics_data in self ._split_metrics_data (serialized_data ):
272+ split_resp = self ._export (
273+ data = split_metrics_data .SerializeToString ()
274+ )
275+
276+ if split_resp .ok :
277+ export_result = MetricExportResult .SUCCESS
278+ elif self ._retryable (split_resp ):
279+ _logger .warning (
280+ "Transient error %s encountered while exporting metric batch, retrying in %ss." ,
281+ split_resp .reason ,
282+ delay ,
283+ )
284+ sleep (delay )
285+ continue
286+ else :
287+ _logger .error (
288+ "Failed to export batch code: %s, reason: %s" ,
289+ split_resp .status_code ,
290+ split_resp .text ,
291+ )
292+ export_result = MetricExportResult .FAILURE
293+
294+ # Return result after all batches are attempted
295+ return export_result
296+
266297 return MetricExportResult .FAILURE
267298
268299 def _split_metrics_data (
0 commit comments