options, and new features, see the NewStuff file next to this ChangeLog.
+Since Exim version 4.94
+----------------------
+
+(none yet)
+
+
Exim version 4.94
-----------------
test from the snapshots or the Git before the documentation is updated. Once
the documentation is updated, this file is reduced to a short list.
+Version 4.95
+------------
+
+ 1. The fast-ramp two phase queue run support, previously experimental, is
+ now supported by default.
+
+
Version 4.94
------------
# DISABLE_DNSSEC=yes
# To disable support for Events set DISABLE_EVENT to "yes"
-
# DISABLE_EVENT=yes
# SUPPORT_PIPE_CONNECT=yes
+# Uncomment the following to remove the fast-ramp two-phase-queue-run support
+# DISABLE_QUEUE_RAMP=yes
+
+
#------------------------------------------------------------------------------
# Compiling Exim with experimental features. These are documented in
# experimental-spec.txt. "Experimental" means that the way these features are
# Uncomment the following line to include support for TLS Resumption
# EXPERIMENTAL_TLS_RESUME=yes
-# Uncomment the following to include the fast-ramp two-phase-queue-run support
-# EXPERIMENTAL_QUEUE_RAMP=yes
-
###############################################################################
# THESE ARE THINGS YOU MIGHT WANT TO SPECIFY #
###############################################################################
#define DISABLE_OCSP
#define DISABLE_PIPE_CONNECT
#define DISABLE_PRDR
+#define DISABLE_QUEUE_RAMP
#define DISABLE_TLS
#define DISABLE_D_OPTION
#define EXPERIMENTAL_DCC
#define EXPERIMENTAL_DSN_INFO
#define EXPERIMENTAL_LMDB
-#define EXPERIMENTAL_QUEUE_RAMP
#define EXPERIMENTAL_QUEUEFILE
#define EXPERIMENTAL_SRS
#define EXPERIMENTAL_SRS_NATIVE
buf[sz] = 0;
switch (buf[0])
{
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
case NOTIFY_MSG_QRUN:
/* this should be a message_id */
DEBUG(D_queue_run)
debug_printf("%s: qrunner trigger: %s\n", __FUNCTION__, buf+1);
memcpy(queuerun_msgid, buf+1, MESSAGE_ID_LENGTH+1);
return TRUE;
-#endif /*EXPERIMENTAL_QUEUE_RAMP*/
+#endif
case NOTIFY_QUEUE_SIZE_REQ:
{
else
{
DEBUG(D_any) debug_printf("%s received\n",
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
*queuerun_msgid ? "qrun notification" :
#endif
"SIGALRM");
*p++ = '-';
*p++ = 'q';
if ( f.queue_2stage
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
&& !*queuerun_msgid
#endif
) *p++ = 'q';
extra[0] = *queue_name
? string_sprintf("%sG%s", opt, queue_name) : opt;
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
if (*queuerun_msgid)
{
log_write(0, LOG_MAIN, "notify triggered queue run");
/* No need to re-exec; SIGALRM remains set to the default handler */
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
if (*queuerun_msgid)
{
log_write(0, LOG_MAIN, "notify triggered queue run");
/* Reset the alarm clock */
sigalrm_seen = FALSE;
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
if (*queuerun_msgid)
*queuerun_msgid = 0;
else
#ifndef DISABLE_DKIM
g = string_cat(g, US" DKIM");
#endif
+#ifdef SUPPORT_DMARC
+ g = string_cat(g, US" DMARC");
+#endif
#ifndef DISABLE_DNSSEC
g = string_cat(g, US" DNSSEC");
#endif
#ifdef SUPPORT_PROXY
g = string_cat(g, US" PROXY");
#endif
+#ifndef DISABLE_QUEUE_RAMP
+ g = string_cat(g, US" Experimental_Queue_Ramp");
+#endif
#ifdef SUPPORT_SOCKS
g = string_cat(g, US" SOCKS");
#endif
#ifdef SUPPORT_SPF
g = string_cat(g, US" SPF");
#endif
-#ifdef SUPPORT_DMARC
- g = string_cat(g, US" DMARC");
-#endif
#ifdef TCP_FASTOPEN
tcp_init();
if (f.tcp_fastopen_ok) g = string_cat(g, US" TCP_Fast_Open");
#ifdef EXPERIMENTAL_LMDB
g = string_cat(g, US" Experimental_LMDB");
#endif
-#ifdef EXPERIMENTAL_QUEUE_RAMP
- g = string_cat(g, US" Experimental_Queue_Ramp");
-#endif
#ifdef EXPERIMENTAL_QUEUEFILE
g = string_cat(g, US" Experimental_QUEUEFILE");
#endif
extern unsigned queue_count(void);
extern unsigned queue_count_cached(void);
extern void queue_list(int, uschar **, int);
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
extern void queue_notify_daemon(const uschar * hostname);
#endif
extern void queue_run(uschar *, uschar *, BOOL);
BOOL proxy_session = FALSE;
#endif
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
BOOL queue_fast_ramp = FALSE;
#endif
BOOL queue_list_requires_admin = TRUE;
extern const uschar *qualify_domain_recipient; /* Domain to qualify recipients with */
extern uschar *qualify_domain_sender; /* Domain to qualify senders with */
extern uschar *queue_domains; /* Queue these domains */
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
extern BOOL queue_fast_ramp; /* 2-phase queue-run overlap */
#endif
extern BOOL queue_list_requires_admin; /* TRUE if -bp requires admin */
/******************************************************************************/
/******************************************************************************/
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
void
queue_notify_daemon(const uschar * msgid)
{
{ "qualify_domain", opt_stringptr, {&qualify_domain_sender} },
{ "qualify_recipient", opt_stringptr, {&qualify_domain_recipient} },
{ "queue_domains", opt_stringptr, {&queue_domains} },
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
{ "queue_fast_ramp", opt_bool, {&queue_fast_ramp} },
#endif
{ "queue_list_requires_admin",opt_bool, {&queue_list_requires_admin} },
{
sprintf(CS buffer, "%.200s:%d", host->name, host_record->sequence);
dbfn_write(dbm_file, buffer, host_record, sizeof(dbdata_wait) + host_length);
-#ifdef EXPERIMENTAL_QUEUE_RAMP
+#ifndef DISABLE_QUEUE_RAMP
if (f.queue_2stage && queue_fast_ramp && !queue_run_in_order)
queue_notify_daemon(message_id);
#endif