@@ -72,14 +72,10 @@ where
72
72
{
73
73
fn new ( config : A :: InitConfig ) -> Self {
74
74
ValueMap {
75
- trackers : RwLock :: new ( HashMap :: with_capacity (
76
- 1 + STREAM_CARDINALITY_LIMIT as usize ,
77
- ) ) ,
75
+ trackers : RwLock :: new ( HashMap :: with_capacity ( 1 + STREAM_CARDINALITY_LIMIT ) ) ,
78
76
// TODO: For cumulative, this is not required, so avoid this
79
77
// pre-allocation.
80
- trackers_for_collect : RwLock :: new ( HashMap :: with_capacity (
81
- 1 + STREAM_CARDINALITY_LIMIT as usize ,
82
- ) ) ,
78
+ trackers_for_collect : RwLock :: new ( HashMap :: with_capacity ( 1 + STREAM_CARDINALITY_LIMIT ) ) ,
83
79
has_no_attribute_value : AtomicBool :: new ( false ) ,
84
80
no_attribute_tracker : A :: create ( & config) ,
85
81
count : AtomicUsize :: new ( 0 ) ,
@@ -182,28 +178,23 @@ where
182
178
) ) ;
183
179
}
184
180
185
- let mut trackers = if let Ok ( mut trackers_guard) = self . trackers . write ( ) {
186
- if let Ok ( mut trackers_for_collect_guard) = self . trackers_for_collect . write ( ) {
187
- swap (
188
- trackers_guard. deref_mut ( ) ,
189
- trackers_for_collect_guard. deref_mut ( ) ,
190
- ) ;
181
+ if let Ok ( mut trackers_collect) = self . trackers_for_collect . write ( ) {
182
+ if let Ok ( mut trackers_current) = self . trackers . write ( ) {
183
+ swap ( trackers_collect. deref_mut ( ) , trackers_current. deref_mut ( ) ) ;
191
184
self . count . store ( 0 , Ordering :: SeqCst ) ;
192
- trackers_for_collect_guard
193
185
} else {
194
- otel_warn ! ( name: "MeterProvider.InternalError" , message = "Metric collection failed. Report this issue in OpenTelemetry repo." , details ="ValueMap trackers for collect lock poisoned" ) ;
186
+ otel_warn ! ( name: "MeterProvider.InternalError" , message = "Metric collection failed. Report this issue in OpenTelemetry repo." , details ="ValueMap trackers lock poisoned" ) ;
195
187
return ;
196
188
}
197
- } else {
198
- otel_warn ! ( name: "MeterProvider.InternalError" , message = "Metric collection failed. Report this issue in OpenTelemetry repo." , details ="ValueMap trackers lock poisoned" ) ;
199
- return ;
200
- } ;
201
189
202
- let mut seen = HashSet :: new ( ) ;
203
- for ( attrs, tracker) in trackers. drain ( ) {
204
- if seen. insert ( Arc :: as_ptr ( & tracker) ) {
205
- dest. push ( map_fn ( attrs, tracker. clone_and_reset ( & self . config ) ) ) ;
190
+ let mut seen = HashSet :: new ( ) ;
191
+ for ( attrs, tracker) in trackers_collect. drain ( ) {
192
+ if seen. insert ( Arc :: as_ptr ( & tracker) ) {
193
+ dest. push ( map_fn ( attrs, tracker. clone_and_reset ( & self . config ) ) ) ;
194
+ }
206
195
}
196
+ } else {
197
+ otel_warn ! ( name: "MeterProvider.InternalError" , message = "Metric collection failed. Report this issue in OpenTelemetry repo." , details ="ValueMap trackers for collect lock poisoned" ) ;
207
198
}
208
199
}
209
200
}
0 commit comments