Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,41 @@
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn claim_orders_pending_and_unrecovered_expired_jobs_together() {
|
||||
let directory = Directory::new();
|
||||
Runtime::new(Limits::default()).unwrap().run(async |scope| {
|
||||
let database = Database::open(&directory.0, options(), scope).await.unwrap();
|
||||
let mut executor = database.executor().await.unwrap();
|
||||
executor.schema(scope, job::schema::TABLE, job::schema::SQL).await.unwrap();
|
||||
executor.initialize(scope, "WITH RECURSIVE rows(number) AS (SELECT 0 UNION ALL SELECT number+1 FROM rows WHERE number<299) INSERT INTO _dever_job(id,target,payload,schema,execution,task_key,state,attempt,retries,timeout_ms,available_at,created_at,token,lease_until,execution_tenant) SELECT printf('%06d',number),'demo.account.publish','null','zero','{\"kind\":\"System\",\"tenant\":null}',CAST(number AS TEXT),'running',1,2,50,CASE WHEN number=299 THEN 0 ELSE 100 END,0,'old',0,0 FROM rows").await.unwrap();
|
||||
let mut request = submission("pending");
|
||||
request.at = 50;
|
||||
let pending = job::enqueue(&mut executor, scope, request, 1000).await.unwrap().into_text();
|
||||
let first = job::claim(&mut executor, scope, 1000, 1000).await.unwrap().unwrap();
|
||||
// 首轮只恢复 256 项;仍为 running 的过期任务也必须参与最早时间排序。
|
||||
assert_eq!(first.id, "000299");
|
||||
assert_eq!(first.attempt, 2);
|
||||
assert_ne!(first.token, "old");
|
||||
let second = job::claim(&mut executor, scope, 1000, 1000).await.unwrap().unwrap();
|
||||
assert_eq!(second.id, pending);
|
||||
let third = job::claim(&mut executor, scope, 1000, 1000).await.unwrap().unwrap();
|
||||
assert_eq!(third.id, "000000");
|
||||
}).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn expired_cleanup_is_bounded_without_hiding_eligible_work() {
|
||||
let directory = Directory::new();
|
||||
Runtime::new(Limits::default()).unwrap().run(async |scope| {
|
||||
let database = Database::open(&directory.0, options(), scope).await.unwrap();
|
||||
let mut executor = database.executor().await.unwrap();
|
||||
executor.schema(scope, job::schema::TABLE, job::schema::SQL).await.unwrap();
|
||||
executor.initialize(scope, "WITH RECURSIVE rows(number) AS (SELECT 0 UNION ALL SELECT number+1 FROM rows WHERE number<300) INSERT INTO _dever_job(id,target,payload,schema,execution,task_key,state,attempt,retries,timeout_ms,available_at,created_at,token,lease_until,execution_tenant) SELECT printf('%06d',number),'demo.account.publish','null','zero','{\"kind\":\"System\",\"tenant\":null}',CAST(number AS TEXT),'running',1,CASE WHEN number=300 THEN 2 ELSE 1 END,50,0,0,'old',0,0 FROM rows").await.unwrap();
|
||||
let claim = job::claim(&mut executor, scope, 1000, 1000).await.unwrap().unwrap();
|
||||
assert_eq!(claim.id, "000300");
|
||||
assert_eq!(claim.attempt, 2);
|
||||
let counts = executor.query(scope, "SELECT (SELECT COUNT(*) FROM _dever_job WHERE state='dead'),(SELECT COUNT(*) FROM _dever_job WHERE state='running' AND token='old')", vec![], 1, |row| Ok((row.get::<_, i64>(0)?, row.get::<_, i64>(1)?))).await.unwrap();
|
||||
assert_eq!(counts, vec![(256,44)]);
|
||||
job::complete(&mut executor, scope, &claim, 1001).await.unwrap();
|
||||
}).unwrap();
|
||||
}
|
||||
Reference in new issue
Block a user