Skip to content

Commit 0b1fc79

Browse files
authored
feat(datadog-tracer-flare): changed tracerflaremanager to be const-ish (#1270)
feat(datadog-tracer-flare): changed tracerflaremanager to be const-ish fix(datadog-tracer-flare: clippy): no longer needs to be mutable & unwrap_or_panic fix(datadog-tracer-flare): listener needs to await which is incompatible with the mutex, listener becomes non const tracerflaremanager function, which makes it incompatible with static const tracerflaremanager, but php doesn't have a listener anyway so it's someone else's problem fix(datadog-tracer-flare: example): mutable tracerflare for listener fix(datadog-tracer-flare): Rationalized stuff, removed arc mutexes on already const elements, AtomicBool instead of full blown arc<mutex<bool>> chore(datadog-tracer-flare): style
1 parent 0272ba4 commit 0b1fc79

File tree

1 file changed

+18
-15
lines changed
  • datadog-tracer-flare/src

1 file changed

+18
-15
lines changed

datadog-tracer-flare/src/lib.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
pub mod error;
1010
pub mod zip;
1111

12+
use std::sync::atomic::{AtomicBool, Ordering};
13+
1214
use datadog_remote_config::{
1315
config::agent_task::AgentTaskFile, file_storage::RawFile, RemoteConfigData,
1416
};
@@ -53,7 +55,7 @@ use crate::error::FlareError;
5355
pub struct TracerFlareManager {
5456
pub agent_url: String,
5557
pub language: String,
56-
pub collecting: bool,
58+
pub collecting: AtomicBool,
5759
/// As a featured option so we can use the component with no Listener
5860
#[cfg(feature = "listener")]
5961
pub listener: Option<Listener>,
@@ -64,7 +66,7 @@ impl Default for TracerFlareManager {
6466
TracerFlareManager {
6567
agent_url: hyper::Uri::default().to_string(),
6668
language: "rust".to_string(),
67-
collecting: false,
69+
collecting: AtomicBool::new(false),
6870
#[cfg(feature = "listener")]
6971
listener: None,
7072
}
@@ -176,18 +178,18 @@ impl TracerFlareManager {
176178
/// * `Ok(ReturnAction)` - If successful.
177179
/// * `FlareError(msg)` - If something fails.
178180
pub fn handle_remote_config_data(
179-
&mut self,
181+
&self,
180182
data: &RemoteConfigData,
181183
) -> Result<ReturnAction, FlareError> {
182184
let action = data.try_into();
183185
if let Ok(ReturnAction::Set(_)) = action {
184-
if self.collecting {
186+
if self.collecting.load(Ordering::Relaxed) {
185187
return Ok(ReturnAction::None);
186188
}
187-
self.collecting = true;
189+
self.collecting.store(true, Ordering::Relaxed);
188190
} else if Ok(ReturnAction::None) != action {
189191
// If action is Send, Unset or an error, we need to stop collecting
190-
self.collecting = false;
192+
self.collecting.store(false, Ordering::Relaxed);
191193
}
192194
action
193195
}
@@ -206,14 +208,14 @@ impl TracerFlareManager {
206208
/// * `Ok(ReturnAction)` - If successful.
207209
/// * `FlareError(msg)` - If something fail.
208210
pub fn handle_remote_config_file(
209-
&mut self,
211+
&self,
210212
file: RemoteConfigFile,
211213
) -> Result<ReturnAction, FlareError> {
212214
match file.contents().as_ref() {
213215
Ok(data) => self.handle_remote_config_data(data),
214216
Err(e) => {
215217
// If encounter an error we need to stop collecting
216-
self.collecting = false;
218+
self.collecting.store(false, Ordering::Relaxed);
217219
Err(FlareError::ParsingError(e.to_string()))
218220
}
219221
}
@@ -455,9 +457,9 @@ pub async fn run_remote_config_listener(
455457
}
456458

457459
if let ReturnAction::Set(_) = state {
458-
tracer_flare.collecting = true;
460+
tracer_flare.collecting.store(true, Ordering::Relaxed);
459461
} else if let ReturnAction::Send(_) = state {
460-
tracer_flare.collecting = false;
462+
tracer_flare.collecting.store(false, Ordering::Relaxed);
461463
}
462464

463465
Ok(state)
@@ -475,6 +477,7 @@ mod tests {
475477
file_storage::ParsedFileStorage,
476478
RemoteConfigPath, RemoteConfigProduct, RemoteConfigSource,
477479
};
480+
use std::sync::atomic::Ordering;
478481
use std::{num::NonZeroU64, sync::Arc};
479482

480483
#[test]
@@ -637,7 +640,7 @@ mod tests {
637640
#[test]
638641
fn test_handle_remote_config_file() {
639642
use crate::TracerFlareManager;
640-
let mut tracer_flare = TracerFlareManager::new("http://localhost:8126", "rust");
643+
let tracer_flare = TracerFlareManager::new("http://localhost:8126", "rust");
641644
let storage = ParsedFileStorage::default();
642645

643646
let agent_config_file = storage
@@ -660,19 +663,19 @@ mod tests {
660663
.unwrap();
661664

662665
// First AGENT_CONFIG
663-
assert!(!tracer_flare.collecting);
666+
assert!(!tracer_flare.collecting.load(Ordering::Relaxed));
664667
let result = tracer_flare
665668
.handle_remote_config_file(agent_config_file.clone())
666669
.unwrap();
667670
assert_eq!(result, ReturnAction::Set(LogLevel::Info));
668-
assert!(tracer_flare.collecting);
671+
assert!(tracer_flare.collecting.load(Ordering::Relaxed));
669672

670673
// Second AGENT_CONFIG
671674
let result = tracer_flare
672675
.handle_remote_config_file(agent_config_file)
673676
.unwrap();
674677
assert_eq!(result, ReturnAction::None);
675-
assert!(tracer_flare.collecting);
678+
assert!(tracer_flare.collecting.load(Ordering::Relaxed));
676679

677680
// Non-None actions stop collecting
678681
let error_file = storage
@@ -689,7 +692,7 @@ mod tests {
689692
.unwrap();
690693

691694
let _ = tracer_flare.handle_remote_config_file(error_file);
692-
assert!(!tracer_flare.collecting);
695+
assert!(!tracer_flare.collecting.load(Ordering::Relaxed));
693696
}
694697

695698
#[test]

0 commit comments

Comments
 (0)