From bed25a896e7975550376bca41ba54f3841a3737f Mon Sep 17 00:00:00 2001 From: Bernd Machenschalk Date: Thu, 18 Jul 2024 13:37:04 +0000 Subject: [PATCH] sched/validator: DON'T set assimilate_state by the validator. - The assimilator may have already started to assimilate this WU. The validator may take quite some time to chew through a chunk of workunits. Resetting the assimilate_state after that may be harmful and override the update made by the assimilator. Instead, let the transitioner decide what to do with this workunit. - Also too, avoid overriding a non-zero error mask --- db/boinc_db.cpp | 5 +++-- sched/validator.cpp | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/db/boinc_db.cpp b/db/boinc_db.cpp index 18635af7af9..4a75b5aa005 100644 --- a/db/boinc_db.cpp +++ b/db/boinc_db.cpp @@ -2032,8 +2032,9 @@ int DB_VALIDATOR_ITEM_SET::update_workunit(WORKUNIT& wu) { char query[MAX_QUERY_LEN]; sprintf(query, - "update workunit set need_validate=0, error_mask=%d, " - "assimilate_state=%d, transition_time=%d, " + "update workunit set need_validate=0, " + "error_mask=error_mask|%d, " + "transition_time=%d, " "target_nresults=%d, " "canonical_resultid=%lu, canonical_credit=%.15e " "where id=%lu", diff --git a/sched/validator.cpp b/sched/validator.cpp index 8de34aa557a..38a9b2860a6 100644 --- a/sched/validator.cpp +++ b/sched/validator.cpp @@ -685,7 +685,11 @@ int handle_wu( ); wu.canonical_resultid = canonicalid; wu.canonical_credit = credit; - wu.assimilate_state = ASSIMILATE_READY; + + // DON'T modify assimilate_state here, under bad conditions the + // assimilator may have already started to work on this WU. + // Instead, let the transitioner decide what to do with it. + transition_time = IMMEDIATE; // don't need to send any more results //