@@ -10,9 +10,12 @@ use std::{
1010 atomic:: { AtomicBool , AtomicUsize , Ordering } ,
1111 } ,
1212} ;
13- use temporal_sdk_core_api:: worker:: {
14- SlotKind , SlotMarkUsedContext , SlotReleaseContext , SlotReservationContext , SlotSupplier ,
15- SlotSupplierPermit , WorkerDeploymentVersion , WorkflowSlotKind ,
13+ use temporal_sdk_core_api:: {
14+ telemetry:: metrics:: TemporalMeter ,
15+ worker:: {
16+ SlotKind , SlotMarkUsedContext , SlotReleaseContext , SlotReservationContext , SlotSupplier ,
17+ SlotSupplierPermit , WorkerDeploymentVersion , WorkflowSlotKind ,
18+ } ,
1619} ;
1720use tokio:: sync:: watch;
1821use tokio_util:: sync:: CancellationToken ;
@@ -36,6 +39,7 @@ pub(crate) struct MeteredPermitDealer<SK: SlotKind> {
3639 /// there will need to be some associated refactoring.
3740 max_permits : Option < usize > ,
3841 metrics_ctx : MetricsContext ,
42+ meter : Option < TemporalMeter > ,
3943 /// Only applies to permit dealers for workflow tasks. True if this permit dealer is associated
4044 /// with a sticky queue poller.
4145 is_sticky_poller : bool ,
@@ -59,12 +63,14 @@ where
5963 metrics_ctx : MetricsContext ,
6064 max_permits : Option < usize > ,
6165 context_data : Arc < PermitDealerContextData > ,
66+ meter : Option < TemporalMeter > ,
6267 ) -> Self {
6368 Self {
6469 supplier,
6570 unused_claimants : Arc :: new ( AtomicUsize :: new ( 0 ) ) ,
6671 extant_permits : watch:: channel ( 0 ) ,
6772 metrics_ctx,
73+ meter,
6874 max_permits,
6975 is_sticky_poller : false ,
7076 context_data,
@@ -141,6 +147,7 @@ where
141147 release_ctx : ReleaseCtx {
142148 permit : res,
143149 stored_info : None ,
150+ meter : self . meter . clone ( ) ,
144151 } ,
145152 use_fn : Box :: new ( move |info| {
146153 supp_c. mark_slot_used ( info) ;
@@ -182,11 +189,16 @@ impl<SK: SlotKind> SlotReservationContext for MeteredPermitDealer<SK> {
182189 fn is_sticky ( & self ) -> bool {
183190 self . is_sticky_poller
184191 }
192+
193+ fn get_metrics_meter ( & self ) -> Option < TemporalMeter > {
194+ self . meter . clone ( )
195+ }
185196}
186197
187198struct UseCtx < ' a , SK : SlotKind > {
188199 stored_info : & ' a SK :: Info ,
189200 permit : & ' a SlotSupplierPermit ,
201+ meter : Option < TemporalMeter > ,
190202}
191203
192204impl < SK : SlotKind > SlotMarkUsedContext for UseCtx < ' _ , SK > {
@@ -199,11 +211,16 @@ impl<SK: SlotKind> SlotMarkUsedContext for UseCtx<'_, SK> {
199211 fn info ( & self ) -> & <Self :: SlotKind as SlotKind >:: Info {
200212 self . stored_info
201213 }
214+
215+ fn get_metrics_meter ( & self ) -> Option < TemporalMeter > {
216+ self . meter . clone ( )
217+ }
202218}
203219
204220struct ReleaseCtx < SK : SlotKind > {
205221 permit : SlotSupplierPermit ,
206222 stored_info : Option < SK :: Info > ,
223+ meter : Option < TemporalMeter > ,
207224}
208225
209226impl < SK : SlotKind > SlotReleaseContext for ReleaseCtx < SK > {
@@ -216,6 +233,10 @@ impl<SK: SlotKind> SlotReleaseContext for ReleaseCtx<SK> {
216233 fn info ( & self ) -> Option < & <Self :: SlotKind as SlotKind >:: Info > {
217234 self . stored_info . as_ref ( )
218235 }
236+
237+ fn get_metrics_meter ( & self ) -> Option < TemporalMeter > {
238+ self . meter . clone ( )
239+ }
219240}
220241
221242/// A version of [MeteredPermitDealer] that can be closed and supports waiting for close to complete.
@@ -353,6 +374,7 @@ impl<SK: SlotKind> OwnedMeteredSemPermit<SK> {
353374 let ctx = UseCtx {
354375 stored_info : & info,
355376 permit : & self . release_ctx . permit ,
377+ meter : self . release_ctx . meter . clone ( ) ,
356378 } ;
357379 ( self . use_fn ) ( & ctx) ;
358380 self . release_ctx . stored_info = Some ( info) ;
@@ -386,6 +408,7 @@ pub(crate) mod tests {
386408 MetricsContext :: no_op ( ) ,
387409 None ,
388410 Arc :: new ( Default :: default ( ) ) ,
411+ None ,
389412 )
390413 }
391414
0 commit comments