opentelemetry-metrics-sdk 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1cb67fd12dc3335ced46799a0eec9891023f9e76da30ea07ad55b1211f66999
4
- data.tar.gz: 940e0e1554ab9762fcca4ebe624bb00f2a8a72122d7ef1bd3e1c0c37691a979c
3
+ metadata.gz: 895b79f7aaf3ac2fb3a31145d87526f75287ed7187518991a7e83353f0dc95a9
4
+ data.tar.gz: 61464ed3f41e4cd72e9eff00a8db7d67b7a80abfb7bc75333f43a3baa089e0ab
5
5
  SHA512:
6
- metadata.gz: 2421112176546e9d94203f61f385c78fa524c8b86d9d7ddd509ce8c5873529256b2d3c5201bb3571a92f8ab2db92ae3c47fade6c71a68e91ee7804c00e9c724c
7
- data.tar.gz: 3161006402ff67e3d14418a0c2cfad65047b7a5d157b9b4d85fc1cb8ee3d468cf324ad7cb71d875c376cddafbc8541446de722d266aa41a2579a73c37a058956
6
+ metadata.gz: 2b5e601b78c3bb2735c8eb2105ed5e081e015a95336bcc4b2b578eedb301837ce8109a0dc5336b64d557e966882c7c3e688bdfa0b49ed85c8a9a4b89886a598e
7
+ data.tar.gz: a72fe896576ab3757fdce00d29c8fb05d4ec64f8d60b4c260f40a5295a7e9184feef78351d1915dcc98d371dfcad693aa5895988c57c0a28628f0f03388d6cdb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Release History: opentelemetry-metrics-sdk
2
2
 
3
+ ### v0.10.1 / 2025-10-21
4
+
5
+ * FIXED: Update callback timeout mechanism to use Thread
6
+
3
7
  ### v0.10.0 / 2025-10-14
4
8
 
5
9
  * ADDED: Use common method for returning timestamp in nanoseconds
@@ -13,6 +13,8 @@ module OpenTelemetry
13
13
  # The AsynchronousMetricStream class provides SDK internal functionality that is not a part of the
14
14
  # public API. It extends MetricStream to support asynchronous instruments.
15
15
  class AsynchronousMetricStream < MetricStream
16
+ DEFAULT_TIMEOUT = 30
17
+
16
18
  def initialize(
17
19
  name,
18
20
  description,
@@ -48,28 +50,49 @@ module OpenTelemetry
48
50
  def invoke_callback(timeout, attributes)
49
51
  if @registered_views.empty?
50
52
  @mutex.synchronize do
51
- Timeout.timeout(timeout || 30) do
52
- @callback.each do |cb|
53
- value = cb.call
54
- @default_aggregation.update(value, attributes, @data_points)
55
- end
53
+ @callback.each do |cb|
54
+ value = safe_guard_callback(cb, timeout: timeout)
55
+ @default_aggregation.update(value, attributes, @data_points) if value.is_a?(Numeric)
56
56
  end
57
57
  end
58
58
  else
59
59
  @registered_views.each do |view|
60
60
  @mutex.synchronize do
61
- Timeout.timeout(timeout || 30) do
62
- @callback.each do |cb|
63
- value = cb.call
64
- merged_attributes = attributes || {}
65
- merged_attributes.merge!(view.attribute_keys)
66
- view.aggregation.update(value, merged_attributes, @data_points) if view.valid_aggregation?
67
- end
61
+ @callback.each do |cb|
62
+ value = safe_guard_callback(cb, timeout: timeout)
63
+ next unless value.is_a?(Numeric) # ignore if value is not valid number
64
+
65
+ merged_attributes = attributes || {}
66
+ merged_attributes.merge!(view.attribute_keys)
67
+ view.aggregation.update(value, merged_attributes, @data_points) if view.valid_aggregation?
68
68
  end
69
69
  end
70
70
  end
71
71
  end
72
72
  end
73
+
74
+ private
75
+
76
+ def safe_guard_callback(callback, timeout: DEFAULT_TIMEOUT)
77
+ result = nil
78
+ thread = Thread.new do
79
+ result = callback.call
80
+ rescue StandardError => e
81
+ OpenTelemetry.logger.error("Error invoking callback: #{e.message}")
82
+ result = :error
83
+ end
84
+
85
+ unless thread.join(timeout)
86
+ thread.kill
87
+ OpenTelemetry.logger.error("Timeout while invoking callback after #{timeout} seconds")
88
+ return nil
89
+ end
90
+
91
+ result == :error ? nil : result
92
+ rescue StandardError => e
93
+ OpenTelemetry.logger.error("Unexpected error in callback execution: #{e.message}")
94
+ nil
95
+ end
73
96
  end
74
97
  end
75
98
  end
@@ -55,6 +55,7 @@ module OpenTelemetry
55
55
  end
56
56
  end
57
57
 
58
+ # view will modify the data_point that is not suitable when there are multiple views
58
59
  def update(value, attributes)
59
60
  if @registered_views.empty?
60
61
  @mutex.synchronize { @default_aggregation.update(value, attributes, @data_points) }
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module SDK
9
9
  module Metrics
10
10
  # Current OpenTelemetry metrics sdk version
11
- VERSION = '0.10.0'
11
+ VERSION = '0.10.1'
12
12
  end
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-metrics-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-14 00:00:00.000000000 Z
11
+ date: 2025-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -251,10 +251,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
251
251
  licenses:
252
252
  - Apache-2.0
253
253
  metadata:
254
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.10.0/file.CHANGELOG.html
254
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.10.1/file.CHANGELOG.html
255
255
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/metrics_sdk
256
256
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
257
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.10.0
257
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.10.1
258
258
  post_install_message:
259
259
  rdoc_options: []
260
260
  require_paths: