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;
#define lock_basic_off(cond)
task_type * schedule_get_first_task(schedule_type *schedule)
void ods_log_debug(const char *format,...)
lock_basic_type worker_lock
#define lock_basic_destroy(lock)
cond_basic_type signal_cond
cond_basic_type q_threshold
void * allocator_alloc(allocator_type *allocator, size_t size)
void lhsm_check_connection(void *engine)
ods_status schedule_task(schedule_type *schedule, task_type *task, int log)
void ods_log_info(const char *format,...)
const char * task_who2str(task_type *task)
enum ods_enum_status ods_status
void worker_start(worker_type *worker)
lock_basic_type zone_lock
void ods_log_error(const char *format,...)
lock_basic_type stats_lock
const char * ods_status2str(ods_status status)
ods_lookup_table * ods_lookup_by_id(ods_lookup_table *table, int id)
void worker_cleanup(worker_type *worker)
#define lock_basic_set(cond)
enum task_id_enum task_id
ods_status fifoq_push(fifoq_type *q, void *item, worker_type *worker, int *tries)
void ods_log_crit(const char *format,...)
lock_basic_type signal_lock
void worker_wait(lock_basic_type *lock, cond_basic_type *condition)
#define lock_basic_lock(lock)
void worker_sleep(worker_type *worker, time_t timeout)
#define lock_basic_sleep(cond, lock, sleep)
task_type * schedule_pop_task(schedule_type *schedule)
void worker_notify_all(lock_basic_type *lock, cond_basic_type *condition)
ods_status zone_backup2(zone_type *zone)
ods_status zone_update_serial(zone_type *zone)
void worker_wakeup(worker_type *worker)
enum worker_enum worker_id
void worker_sleep_unless(worker_type *worker, time_t timeout)
time_t duration2time(duration_type *duration)
void ods_log_verbose(const char *format,...)
#define lock_basic_init(lock)
ods_status zone_prepare_keys(zone_type *zone)
duration_type * sig_resign_interval
cond_basic_type worker_alarm
void ods_log_deeebug(const char *format,...)
worker_type * worker_create(allocator_type *allocator, int num, worker_id type)
ods_status rrset_sign(hsm_ctx_t *ctx, rrset_type *rrset, time_t signtime)
void allocator_deallocate(allocator_type *allocator, void *data)
lock_basic_type schedule_lock
void worker_wait_timeout(lock_basic_type *lock, cond_basic_type *condition, time_t timeout)
cond_basic_type q_nonfull
#define ods_log_assert(x)
#define lock_basic_alarm(cond)
#define lock_basic_unlock(lock)
void ods_log_warning(const char *format,...)
allocator_type * allocator
const char * task_what2str(task_id what)
void worker_notify(lock_basic_type *lock, cond_basic_type *condition)
ods_lookup_table worker_str[]
#define lock_basic_broadcast(cond)
void * fifoq_pop(fifoq_type *q, worker_type **worker)