110 const char* str,
const char* name,
task_id* what, time_t* when)
166 status =
fifoq_push(q, (
void*) rrset, worker, &tries);
180 status =
fifoq_push(q, (
void*) rrset, worker, &tries);
206 worker_queue_rrset(worker, q, rrset);
210 if (denial && denial->
rrset) {
211 worker_queue_rrset(worker, q, denial->
rrset);
224 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
229 worker_clear_jobs(worker);
233 if (zone->
db->
domains->root != LDNS_RBTREE_NULL) {
234 node = ldns_rbtree_first(zone->
db->
domains);
236 while (node && node != LDNS_RBTREE_NULL) {
238 worker_queue_domain(worker, q, domain);
239 node = ldns_rbtree_next(node);
256 ods_log_error(
"[%s[%i]] sign zone %s failed: %u RRsets failed",
262 ods_log_error(
"[%s[%i]] sign zone %s failed: processed %u of %u "
269 ods_log_debug(
"[%s[%i]] sign zone %s failed: worker needs to exit",
297 time_t never = (3600*24*365);
313 switch (task->
what) {
329 goto task_perform_continue;
337 goto task_perform_fail;
339 goto task_perform_continue;
370 goto task_perform_fail;
372 goto task_perform_continue;
388 "failed to increment serial",
392 goto task_perform_fail;
394 goto task_perform_continue;
416 worker_queue_zone(worker, engine->
signq, zone);
418 "signing zone %s", worker2str(worker->
type),
427 status = worker_check_jobs(worker, task);
429 worker_clear_jobs(worker);
437 goto task_perform_fail;
439 goto task_perform_continue;
461 goto task_perform_fail;
463 goto task_perform_continue;
473 "for zone %s: duration2time() failed",
476 ods_log_info(
"[%s[%i]] defaulting to 1H resign interval for "
539 ods_log_crit(
"[%s[%i]] CRITICAL: failed to sign zone %s: %s",
550 if (task->
backoff > ODS_SE_MAX_BACKOFF) {
551 task->
backoff = ODS_SE_MAX_BACKOFF;
553 ods_log_info(
"[%s[%i]] backoff task %s for zone %s with %u seconds",
559 task_perform_continue:
604 worker_perform_task(worker);
614 ods_log_error(
"[%s[%i]] unable to schedule task for zone %s: "
634 timeout = (worker->
task->
when - now);
638 if (timeout > ODS_SE_MAX_BACKOFF) {
639 timeout = ODS_SE_MAX_BACKOFF;
662 hsm_ctx_t* ctx = NULL;
699 ctx = hsm_create_context();
711 task = superior->
task;
728 if (worker_fulfilled(superior) && superior->
sleeping) {
740 if (superior && superior->
sleeping) {
747 hsm_destroy_context(ctx);
761 switch (worker->
type) {
763 worker_drudge(worker);
804 while (!worker->
need_to_exit && !worker_fulfilled(worker)) {
808 ods_log_debug(
"[%s[%i]] somebody poked me, check completed jobs %u "
809 "appointed, %u completed, %u failed", worker2str(worker->
type),
901 cond_basic_type worker_cond;