112 const char* str,
const char* name,
task_id* what, time_t* when)
168 status =
fifoq_push(q, (
void*) rrset, worker, &tries);
182 status =
fifoq_push(q, (
void*) rrset, worker, &tries);
208 worker_queue_rrset(worker, q, rrset);
212 if (denial && denial->
rrset) {
213 worker_queue_rrset(worker, q, denial->
rrset);
226 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
231 worker_clear_jobs(worker);
235 if (zone->
db->
domains->root != LDNS_RBTREE_NULL) {
236 node = ldns_rbtree_first(zone->
db->
domains);
238 while (node && node != LDNS_RBTREE_NULL) {
240 worker_queue_domain(worker, q, domain);
241 node = ldns_rbtree_next(node);
257 ods_log_error(
"[%s[%i]] sign zone %s failed: %u RRsets failed",
263 ods_log_error(
"[%s[%i]] sign zone %s failed: processed %u of %u "
270 ods_log_debug(
"[%s[%i]] sign zone %s failed: worker needs to exit",
298 time_t never = (3600*24*365);
314 switch (task->
what) {
330 goto task_perform_continue;
338 goto task_perform_fail;
340 goto task_perform_continue;
371 goto task_perform_fail;
373 goto task_perform_continue;
389 "failed to increment serial",
393 goto task_perform_fail;
395 goto task_perform_continue;
414 worker_queue_zone(worker, engine->
signq, zone);
422 status = worker_check_jobs(worker, task);
423 worker_clear_jobs(worker);
431 goto task_perform_fail;
433 goto task_perform_continue;
455 goto task_perform_fail;
457 goto task_perform_continue;
467 "for zone %s: duration2time() failed",
470 ods_log_info(
"[%s[%i]] defaulting to 1H resign interval for "
533 ods_log_crit(
"[%s[%i]] CRITICAL: failed to sign zone %s: %s",
544 if (task->
backoff > ODS_SE_MAX_BACKOFF) {
545 task->
backoff = ODS_SE_MAX_BACKOFF;
547 ods_log_info(
"[%s[%i]] backoff task %s for zone %s with %u seconds",
553 task_perform_continue:
598 worker_perform_task(worker);
608 ods_log_error(
"[%s[%i]] unable to schedule task for zone %s: "
628 timeout = (worker->
task->
when - now);
632 if (timeout > ODS_SE_MAX_BACKOFF) {
633 timeout = ODS_SE_MAX_BACKOFF;
656 hsm_ctx_t* ctx = NULL;
693 ctx = hsm_create_context();
705 task = superior->
task;
722 if (worker_fulfilled(superior) && superior->
sleeping) {
734 if (superior && superior->
sleeping) {
741 hsm_destroy_context(ctx);
755 switch (worker->
type) {
757 worker_drudge(worker);
796 while (!worker->
need_to_exit && !worker_fulfilled(worker)) {
800 ods_log_debug(
"[%s[%i]] somebody poked me, check completed jobs %u "
801 "appointed, %u completed, %u failed", worker2str(worker->
type),
893 cond_basic_type worker_cond;