Decouple log and metrics rate (#1839)

Use separate env for log and metrics rate.

Set default log level to WARN if unset.
This commit is contained in:
Sathish 2018-11-15 22:27:16 -08:00 committed by GitHub
parent 71336965a6
commit c973de1d76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 53 deletions

View File

@ -37,7 +37,6 @@ snap)
local|tar)
PATH="$HOME"/.cargo/bin:"$PATH"
export USE_INSTALL=1
export SOLANA_DEFAULT_METRICS_RATE=1
./fetch-perf-libs.sh
# shellcheck source=/dev/null

View File

@ -9,6 +9,7 @@ publicNetwork="$3"
entrypointIp="$4"
numNodes="$5"
RUST_LOG="$6"
export RUST_LOG=${RUST_LOG:-solana=warn} # if RUST_LOG is unset, default to warn
missing() {
echo "Error: $1 not specified"
@ -46,7 +47,6 @@ snap)
# shellcheck disable=SC2089
commonNodeConfig="\
leader-ip=\"$entrypointIp\" \
default-metrics-rate=1 \
metrics-config=\"$SOLANA_METRICS_CONFIG\" \
rust-log=\"$RUST_LOG\" \
setup-args=\"$setupArgs\" \
@ -87,7 +87,6 @@ local|tar)
PATH="$HOME"/.cargo/bin:"$PATH"
export USE_INSTALL=1
export RUST_LOG
export SOLANA_DEFAULT_METRICS_RATE=1
./fetch-perf-libs.sh
# shellcheck source=/dev/null

View File

@ -9,11 +9,9 @@
if [[ -d $SNAP ]]; then # Running inside a Linux Snap?
RUST_LOG="$(snapctl get rust-log)"
SOLANA_DEFAULT_METRICS_RATE="$(snapctl get default-metrics-rate)"
SOLANA_METRICS_CONFIG="$(snapctl get metrics-config)"
export RUST_LOG
export SOLANA_DEFAULT_METRICS_RATE
export SOLANA_METRICS_CONFIG
fi

View File

@ -4,7 +4,7 @@ use std::env;
use std::sync::atomic::{AtomicUsize, Ordering};
use timing;
const DEFAULT_METRICS_RATE: usize = 100;
const DEFAULT_LOG_RATE: usize = 1000;
pub struct Counter {
pub name: &'static str,
@ -52,11 +52,11 @@ macro_rules! inc_new_counter {
impl Counter {
fn default_log_rate() -> usize {
let v = env::var("SOLANA_DEFAULT_METRICS_RATE")
.map(|x| x.parse().unwrap_or(DEFAULT_METRICS_RATE))
.unwrap_or(DEFAULT_METRICS_RATE);
let v = env::var("SOLANA_DEFAULT_LOG_RATE")
.map(|x| x.parse().unwrap_or(DEFAULT_LOG_RATE))
.unwrap_or(DEFAULT_LOG_RATE);
if v == 0 {
DEFAULT_METRICS_RATE
DEFAULT_LOG_RATE
} else {
v
}
@ -69,8 +69,7 @@ impl Counter {
lograte = Counter::default_log_rate();
self.lograte.store(lograte, Ordering::Relaxed);
}
if times % lograte == 0 && times > 0 {
if log_enabled!(level) {
if times % lograte == 0 && times > 0 && log_enabled!(level) {
info!(
"COUNTER:{{\"name\": \"{}\", \"counts\": {}, \"samples\": {}, \"now\": {}, \"events\": {}}}",
self.name,
@ -80,7 +79,6 @@ impl Counter {
events,
);
}
let lastlog = self.lastlog.load(Ordering::Relaxed);
let prev = self
.lastlog
@ -96,10 +94,9 @@ impl Counter {
}
}
}
}
#[cfg(test)]
mod tests {
use counter::{Counter, DEFAULT_METRICS_RATE};
use counter::{Counter, DEFAULT_LOG_RATE};
use log::Level;
use std::env;
use std::sync::atomic::{AtomicUsize, Ordering};
@ -120,13 +117,13 @@ mod tests {
#[test]
fn test_counter() {
let _readlock = get_env_lock().read();
static mut COUNTER: Counter = create_counter!("test", 100);
static mut COUNTER: Counter = create_counter!("test", 1000);
let count = 1;
inc_counter!(COUNTER, Level::Info, count);
unsafe {
assert_eq!(COUNTER.counts.load(Ordering::Relaxed), 1);
assert_eq!(COUNTER.times.load(Ordering::Relaxed), 1);
assert_eq!(COUNTER.lograte.load(Ordering::Relaxed), 100);
assert_eq!(COUNTER.lograte.load(Ordering::Relaxed), 1000);
assert_eq!(COUNTER.lastlog.load(Ordering::Relaxed), 0);
assert_eq!(COUNTER.name, "test");
}
@ -134,7 +131,7 @@ mod tests {
inc_counter!(COUNTER, Level::Info, 2);
}
unsafe {
assert_eq!(COUNTER.lastlog.load(Ordering::Relaxed), 199);
assert_eq!(COUNTER.lastlog.load(Ordering::Relaxed), 397);
}
inc_counter!(COUNTER, Level::Info, 2);
unsafe {
@ -154,40 +151,34 @@ mod tests {
let _readlock = get_env_lock().read();
assert_eq!(
Counter::default_log_rate(),
DEFAULT_METRICS_RATE,
"default_log_rate() is {}, expected {}, SOLANA_DEFAULT_METRICS_RATE environment variable set?",
DEFAULT_LOG_RATE,
"default_log_rate() is {}, expected {}, SOLANA_DEFAULT_LOG_RATE environment variable set?",
Counter::default_log_rate(),
DEFAULT_METRICS_RATE,
DEFAULT_LOG_RATE,
);
static mut COUNTER: Counter = create_counter!("test_lograte", 0);
inc_counter!(COUNTER, Level::Info, 2);
unsafe {
assert_eq!(
COUNTER.lograte.load(Ordering::Relaxed),
DEFAULT_METRICS_RATE
);
assert_eq!(COUNTER.lograte.load(Ordering::Relaxed), DEFAULT_LOG_RATE);
}
}
#[test]
fn test_lograte_env() {
assert_ne!(DEFAULT_METRICS_RATE, 0);
assert_ne!(DEFAULT_LOG_RATE, 0);
let _writelock = get_env_lock().write();
static mut COUNTER: Counter = create_counter!("test_lograte_env", 0);
env::set_var("SOLANA_DEFAULT_METRICS_RATE", "50");
env::set_var("SOLANA_DEFAULT_LOG_RATE", "50");
inc_counter!(COUNTER, Level::Info, 2);
unsafe {
assert_eq!(COUNTER.lograte.load(Ordering::Relaxed), 50);
}
static mut COUNTER2: Counter = create_counter!("test_lograte_env", 0);
env::set_var("SOLANA_DEFAULT_METRICS_RATE", "0");
env::set_var("SOLANA_DEFAULT_LOG_RATE", "0");
inc_counter!(COUNTER2, Level::Info, 2);
unsafe {
assert_eq!(
COUNTER2.lograte.load(Ordering::Relaxed),
DEFAULT_METRICS_RATE
);
assert_eq!(COUNTER2.lograte.load(Ordering::Relaxed), DEFAULT_LOG_RATE);
}
}
}