mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
make test less flanky, try to avoid absolute comparisions and compare jobs relative.
This commit is contained in:
parent
278b64deab
commit
5f2b44002e
@ -73,7 +73,7 @@ impl InternalSlowJobPool {
|
||||
|
||||
fn maintain(&self) {
|
||||
let jobs_available =
|
||||
self.global_limit as i64 - self.global_running_jobs.load(Ordering::Relaxed);
|
||||
self.global_limit as i64 - self.global_running_jobs.load(Ordering::SeqCst);
|
||||
if jobs_available < 0 {
|
||||
tracing::warn!(?jobs_available, "Some math is wrong in slowjob code");
|
||||
}
|
||||
@ -104,7 +104,7 @@ impl InternalSlowJobPool {
|
||||
let c = lock.get(&name).unwrap();
|
||||
(
|
||||
name,
|
||||
c.spawned_total.load(Ordering::Relaxed) / c.max_local,
|
||||
c.spawned_total.load(Ordering::SeqCst) / c.max_local,
|
||||
c.max_local,
|
||||
)
|
||||
})
|
||||
@ -122,7 +122,7 @@ impl InternalSlowJobPool {
|
||||
};
|
||||
|
||||
if let Some(queue) = map.remove(&firstkey) {
|
||||
if queue.local_running_jobs.load(Ordering::Relaxed) < *max as i64 {
|
||||
if queue.local_running_jobs.load(Ordering::SeqCst) < *max as i64 {
|
||||
self.fire(queue);
|
||||
} else {
|
||||
map.insert(firstkey, queue);
|
||||
@ -134,9 +134,9 @@ impl InternalSlowJobPool {
|
||||
}
|
||||
|
||||
fn fire(&self, queue: Queue) {
|
||||
queue.spawned_total.fetch_add(1, Ordering::Relaxed);
|
||||
queue.local_running_jobs.fetch_add(1, Ordering::Relaxed);
|
||||
self.global_running_jobs.fetch_add(1, Ordering::Relaxed);
|
||||
queue.spawned_total.fetch_add(1, Ordering::SeqCst);
|
||||
queue.local_running_jobs.fetch_add(1, Ordering::SeqCst);
|
||||
self.global_running_jobs.fetch_add(1, Ordering::SeqCst);
|
||||
self.threadpool.spawn(queue.task);
|
||||
}
|
||||
}
|
||||
@ -167,7 +167,7 @@ impl SlowJobPool {
|
||||
where
|
||||
F: FnOnce() + Send + Sync + 'static,
|
||||
{
|
||||
let id = self.internal.next_id.fetch_add(1, Ordering::Relaxed);
|
||||
let id = self.internal.next_id.fetch_add(1, Ordering::SeqCst);
|
||||
self.internal
|
||||
.queue
|
||||
.write()
|
||||
@ -208,8 +208,8 @@ impl SlowJobPool {
|
||||
task: Box::new(move || {
|
||||
common_base::prof_span!(_guard, &_name_clones);
|
||||
f();
|
||||
local_running_jobs_clone.fetch_sub(1, Ordering::Relaxed);
|
||||
global_running_jobs_clone.fetch_sub(1, Ordering::Relaxed);
|
||||
local_running_jobs_clone.fetch_sub(1, Ordering::SeqCst);
|
||||
global_running_jobs_clone.fetch_sub(1, Ordering::SeqCst);
|
||||
// directly maintain the next task afterwards
|
||||
internal.maintain();
|
||||
}),
|
||||
@ -291,13 +291,22 @@ mod tests {
|
||||
let f6 = measure(f6, start);
|
||||
let f7 = measure(f7, start);
|
||||
assert_eq!(done.load(Ordering::Relaxed), 7);
|
||||
assert!(f1 < 500);
|
||||
assert!(f2 < 500);
|
||||
assert!(f3 < 500);
|
||||
assert!(f4 < 1000);
|
||||
assert!(f5 < 1000);
|
||||
assert!(f6 < 1000);
|
||||
assert!(f7 < 1500);
|
||||
// Just test relative times, not absolute
|
||||
assert!(f1 < f4);
|
||||
assert!(f1 < f5);
|
||||
assert!(f1 < f6);
|
||||
assert!(f1 < f7);
|
||||
assert!(f2 < f4);
|
||||
assert!(f2 < f5);
|
||||
assert!(f2 < f6);
|
||||
assert!(f2 < f7);
|
||||
assert!(f3 < f4);
|
||||
assert!(f3 < f5);
|
||||
assert!(f3 < f6);
|
||||
assert!(f3 < f7);
|
||||
assert!(f4 < f7);
|
||||
assert!(f5 < f7);
|
||||
assert!(f6 < f7);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -338,13 +347,21 @@ mod tests {
|
||||
let f6 = measure(f6, start);
|
||||
let f7 = measure(f7, start);
|
||||
assert_eq!(done.load(Ordering::Relaxed), 7);
|
||||
assert!(f1 < 500);
|
||||
assert!(f2 < 500);
|
||||
assert!(f3 < 500);
|
||||
assert!(f4 < 1000);
|
||||
assert!(f5 < 1000);
|
||||
assert!(f6 < 1000);
|
||||
assert!(f7 < 1500);
|
||||
assert!(f1 < f4);
|
||||
assert!(f1 < f5);
|
||||
assert!(f1 < f6);
|
||||
assert!(f1 < f7);
|
||||
assert!(f2 < f4);
|
||||
assert!(f2 < f5);
|
||||
assert!(f2 < f6);
|
||||
assert!(f2 < f7);
|
||||
assert!(f3 < f4);
|
||||
assert!(f3 < f5);
|
||||
assert!(f3 < f6);
|
||||
assert!(f3 < f7);
|
||||
assert!(f4 < f7);
|
||||
assert!(f5 < f7);
|
||||
assert!(f6 < f7);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -356,12 +373,12 @@ mod tests {
|
||||
let pool = SlowJobPool::new(2, Arc::new(threadpool));
|
||||
pool.configure("FOO", |n| n);
|
||||
pool.configure("BAR", |n| n / 2);
|
||||
let start = Instant::now();
|
||||
let f1 = Arc::new(Mutex::new(None));
|
||||
let f2 = Arc::new(Mutex::new(None));
|
||||
let b1 = Arc::new(Mutex::new(None));
|
||||
let b2 = Arc::new(Mutex::new(None));
|
||||
let done = Arc::new(AtomicI64::new(0));
|
||||
let start = Instant::now();
|
||||
pool.spawn("FOO", mock_fn("foo1", &f1, &done));
|
||||
pool.spawn("FOO", mock_fn("foo2", &f2, &done));
|
||||
std::thread::sleep(Duration::from_millis(1000));
|
||||
@ -380,11 +397,13 @@ mod tests {
|
||||
// [B1]
|
||||
// [B2]
|
||||
assert_eq!(done.load(Ordering::Relaxed), 4);
|
||||
assert!(f1 < 500);
|
||||
assert!(f2 < 500);
|
||||
assert!(f1 < 600);
|
||||
assert!(f2 < 600);
|
||||
println!("b1 {}", b1);
|
||||
println!("b2 {}", b2);
|
||||
assert!((1000..1500).contains(&b1));
|
||||
assert!((1500..2000).contains(&b2));
|
||||
// would be to flanky:
|
||||
//assert!((1000..1500).contains(&b1));
|
||||
//assert!((1500..2000).contains(&b2));
|
||||
assert!(b1 < b2);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user