Skip to content

Commit 89e9e7b

Browse files
committed
feat: add kernel version check
1 parent 41af8bb commit 89e9e7b

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

agent/src/rpc/synchronizer.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,6 @@ impl Synchronizer {
15721572
} else {
15731573
match Self::upgrade(&running, &session, &revision, &id, &agent_state).await {
15741574
Ok(true) => {
1575-
agent_state.terminate();
15761575
warn!("agent upgrade is successful and restarts normally, deepflow-agent restart...");
15771576
crate::utils::clean_and_exit(NORMAL_EXIT_WITH_RESTART);
15781577
return;

agent/src/trident.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ use integration_skywalking::SkyWalkingExtra;
125125
use packet_sequence_block::BoxedPacketSequenceBlock;
126126
use pcap_assembler::{BoxedPcapBatch, PcapAssembler};
127127

128+
#[cfg(feature = "enterprise")]
129+
use enterprise_utils::utils::{kernel_version_check, ActionFlags};
128130
use public::{
129131
buffer::BatchedBox,
130132
debug::QueueDebugger,
@@ -269,16 +271,6 @@ impl AgentState {
269271
}
270272
}
271273

272-
pub fn terminate(&self) {
273-
if !self.terminated.swap(true, Ordering::Relaxed) {
274-
// log only the first time
275-
info!("Agent state changed to {:?}", State::Terminated);
276-
}
277-
let sg = self.state.lock().unwrap();
278-
self.notifier.notify_one();
279-
info!("Agent terminate with state: {:?}", State::from(sg.0));
280-
}
281-
282274
pub fn update_config(&self, config: ChangedConfig) {
283275
if self.terminated.load(Ordering::Relaxed) {
284276
// when state is Terminated, main thread should still be notified for exiting
@@ -629,6 +621,20 @@ impl Trident {
629621
Ok(Trident { state, handle })
630622
}
631623

624+
#[cfg(feature = "enterprise")]
625+
fn kernel_version_check(state: &AgentState, exception_handler: &ExceptionHandler) {
626+
let action = kernel_version_check();
627+
if action.contains(ActionFlags::TERMINATE) {
628+
exception_handler.set(Exception::KernelVersionCircuitBreaker);
629+
crate::utils::clean_and_exit(1);
630+
} else if action.contains(ActionFlags::MELTDOWN) {
631+
exception_handler.set(Exception::KernelVersionCircuitBreaker);
632+
state.melt_down();
633+
} else if action.contains(ActionFlags::ALARM) {
634+
exception_handler.set(Exception::KernelVersionCircuitBreaker);
635+
}
636+
}
637+
632638
fn run(
633639
state: Arc<AgentState>,
634640
ctrl_ip: IpAddr,
@@ -894,6 +900,9 @@ impl Trident {
894900
platform_synchronizer.start();
895901
}
896902

903+
#[cfg(feature = "enterprise")]
904+
Trident::kernel_version_check(&state, &exception_handler);
905+
897906
let mut components: Option<Components> = None;
898907
let mut first_run = true;
899908
let mut config_initialized = false;
@@ -1176,7 +1185,6 @@ impl Trident {
11761185
}
11771186

11781187
pub fn stop(&mut self) {
1179-
self.state.terminate();
11801188
info!("Agent stopping");
11811189
crate::utils::clean_and_exit(0);
11821190
}

agent/src/utils/guard.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,9 @@ impl Guard {
553553
} else if exception_handler.has(Exception::FreeDiskCircuitBreaker) {
554554
warn!("Set the state to melt_down when the free disk exceeds the threshold.");
555555
state.melt_down();
556+
} else if exception_handler.has(Exception::KernelVersionCircuitBreaker) {
557+
warn!("Set the state to melt_down when the kernel version circuit breaker.");
558+
state.melt_down();
556559
} else {
557560
state.recover();
558561
}

0 commit comments

Comments
 (0)