Skip to content

Commit 563193c

Browse files
Http metricexporter uses split_metrics_data
1 parent 2f4c72b commit 563193c

File tree

1 file changed

+49
-18
lines changed
  • exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter

1 file changed

+49
-18
lines changed

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)