@@ -133,6 +133,8 @@ enum KillStateLogEvent {
133
133
Start ,
134
134
/// Overload has been going on for the duration
135
135
Ongoing ( Duration ) ,
136
+ /// No longer overloaded, reducing the kill_rate
137
+ Settling ,
136
138
/// Overload was resolved after duration time
137
139
Resolved ( Duration ) ,
138
140
/// Don't log anything right now
@@ -163,13 +165,17 @@ impl KillState {
163
165
}
164
166
}
165
167
166
- fn log_event ( & mut self , now : Instant , overloaded : bool ) -> KillStateLogEvent {
168
+ fn log_event ( & mut self , now : Instant , kill_rate : f64 , overloaded : bool ) -> KillStateLogEvent {
167
169
use KillStateLogEvent :: * ;
168
170
169
171
if let Some ( overload_start) = self . overload_start {
170
172
if !overloaded {
171
- self . overload_start = None ;
172
- Resolved ( overload_start. elapsed ( ) )
173
+ if kill_rate == 0.0 {
174
+ self . overload_start = None ;
175
+ Resolved ( overload_start. elapsed ( ) )
176
+ } else {
177
+ Settling
178
+ }
173
179
} else if now. saturating_duration_since ( self . last_overload_log )
174
180
> Duration :: from_secs ( 30 )
175
181
{
@@ -351,8 +357,7 @@ impl LoadManager {
351
357
debug ! ( self . logger, "Declining query" ;
352
358
"query" => query,
353
359
"wait_ms" => wait_ms. as_millis( ) ,
354
- "query_effort_ms" => query_effort,
355
- "total_effort_ms" => total_effort,
360
+ "query_weight" => format!( "{:.2}" , query_effort / total_effort) ,
356
361
"kill_rate" => format!( "{:.4}" , kill_rate) ,
357
362
) ;
358
363
return false ;
@@ -395,12 +400,18 @@ impl LoadManager {
395
400
let mut state = self . kill_state . write ( ) . unwrap ( ) ;
396
401
state. kill_rate = kill_rate;
397
402
state. last_update = now;
398
- state. log_event ( now, overloaded)
403
+ state. log_event ( now, kill_rate , overloaded)
399
404
} ;
400
405
// Log information about what's happening after we've released the
401
406
// lock on self.kill_state
402
407
use KillStateLogEvent :: * ;
403
408
match event {
409
+ Settling => {
410
+ info ! ( self . logger, "Query overload improving" ;
411
+ "wait_ms" => wait_ms. as_millis( ) ,
412
+ "kill_rate" => format!( "{:.4}" , kill_rate) ,
413
+ "event" => "settling" ) ;
414
+ }
404
415
Resolved ( duration) => {
405
416
info ! ( self . logger, "Query overload resolved" ;
406
417
"duration_ms" => duration. as_millis( ) ,
0 commit comments