/*++ /* NAME /* qmgr_entry 3 /* SUMMARY /* per-site queue entries /* SYNOPSIS /* #include "qmgr.h" /* /* QMGR_ENTRY *qmgr_entry_create(queue, message) /* QMGR_QUEUE *queue; /* QMGR_MESSAGE *message; /* /* void qmgr_entry_done(entry, which) /* QMGR_ENTRY *entry; /* int which; /* /* QMGR_ENTRY *qmgr_entry_select(queue) /* QMGR_QUEUE *queue; /* /* void qmgr_entry_unselect(queue, entry) /* QMGR_QUEUE *queue; /* QMGR_ENTRY *entry; /* /* void qmgr_entry_move_todo(dst, entry) /* QMGR_QUEUE *dst; /* QMGR_ENTRY *entry; /* DESCRIPTION /* These routines add/delete/manipulate per-site message /* delivery requests. /* /* qmgr_entry_create() creates an entry for the named queue and /* message, and appends the entry to the queue's todo list. /* Filling in and cleaning up the recipients is the responsibility /* of the caller. /* /* qmgr_entry_done() discards a per-site queue entry. The /* \fIwhich\fR argument is either QMGR_QUEUE_BUSY for an entry /* of the site's `busy' list (i.e. queue entries that have been /* selected for actual delivery), or QMGR_QUEUE_TODO for an entry /* of the site's `todo' list (i.e. queue entries awaiting selection /* for actual delivery). /* /* qmgr_entry_done() triggers cleanup of the per-site queue when /* the site has no pending deliveries, and the site is either /* alive, or the site is dead and the number of in-core queues /* exceeds a configurable limit (see qmgr_queue_done()). /* /* qmgr_entry_done() triggers special action when the last in-core /* queue entry for a message is done with: either read more /* recipients from the queue file, delete the queue file, or move /* the queue file to the deferred queue; send bounce reports to the /* message originator (see qmgr_active_done()). /* /* qmgr_entry_select() selects the next entry from the named /* per-site queue's `todo' list for actual delivery. The entry is /* moved to the queue's `busy' list: the list of messages being /* delivered. /* /* qmgr_entry_unselect() takes the named entry off the named /* per-site queue's `busy' list and moves it to the queue's /* `todo' list. /* /* qmgr_entry_move_todo() moves the specified "todo" queue entry /* to the specified "todo" queue. /* DIAGNOSTICS /* Panic: interface violations, internal inconsistencies. /* LICENSE /* .ad /* .fi /* The Secure Mailer license must be distributed with this software. /* AUTHOR(S) /* Wietse Venema /* IBM T.J. Watson Research /* P.O. Box 704 /* Yorktown Heights, NY 10598, USA
/*--*/
if (entry->stream != 0)
msg_panic("%s: queue %s entry is busy", myname, src->name); if (QMGR_QUEUE_THROTTLED(dst))
msg_panic("%s: destination queue %s is throttled", myname, dst->name); if (QMGR_TRANSPORT_THROTTLED(dst->transport))
msg_panic("%s: destination transport %s is throttled",
myname, dst->transport->name);
if (queue_length > var_qmgr_active_limit / 5
&& (now = event_time()) >= queue->clog_time_to_warn) {
active_share = queue_length / (double) qmgr_message_count;
msg_warn("mail for %s is using up %d of %d active queue entries",
queue->nexthop, queue_length, qmgr_message_count); if (active_share < 0.9)
msg_warn("this may slow down other mail deliveries");
transport = queue->transport; if (transport->dest_concurrency_limit > 0
&& transport->dest_concurrency_limit <= queue->busy_refcount + 1)
msg_warn("you may need to increase the main.cf %s%s from %d",
transport->name, _DEST_CON_LIMIT,
transport->dest_concurrency_limit); elseif (queue->window > var_qmgr_active_limit * active_share)
msg_warn("you may need to increase the main.cf %s from %d",
VAR_QMGR_ACT_LIMIT, var_qmgr_active_limit); elseif (queue->peers.next != queue->peers.prev)
msg_warn("you may need a separate master.cf transport for %s",
queue->nexthop); else {
msg_warn("you may need to reduce %s connect and helo timeouts",
transport->name);
msg_warn("so that Postfix quickly skips unavailable hosts");
msg_warn("you may need to increase the main.cf %s and %s",
VAR_MIN_BACKOFF_TIME, VAR_MAX_BACKOFF_TIME);
msg_warn("so that Postfix wastes less time on undeliverable mail");
msg_warn("you may need to increase the master.cf %s process limit",
transport->name);
}
msg_warn("please avoid flushing the whole queue when you have");
msg_warn("lots of deferred mail, that is bad for performance");
msg_warn("to turn off these warnings specify: %s = 0",
VAR_QMGR_CLOG_WARN_TIME);
queue->clog_time_to_warn = now + var_qmgr_clog_warn_time;
}
} return (entry);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.