> Am 18.08.2025 um 09:39 schrieb Ruediger Pluem <[email protected]>:
> 
> 
> 
> On 8/15/25 1:23 PM, [email protected] wrote:
>> Author: icing
>> Date: Fri Aug 15 11:23:29 2025
>> New Revision: 1927807
>> 
>> Log:
>> *) mod_md: update to version 2.6.1
>>     - Increasing default `MDRetryDelay` to 30 seconds to generate less bursty
>>       traffic on errored renewals for the ACME CA. This leads to error 
>> retries
>>        of 30s, 1 minute, 2, 4, etc. up to daily attempts.
>>     - Checking that configuring `MDRetryDelay` will result in a positive
>>       duration. A delay of 0 is not accepted.
>>     - Fix a bug in checking Content-Type of responses from the ACME server.
>>     - Added ACME ARI support (rfc9773) to the module. Enabled by default. New
>>       directive "MDRenewViaARI on|off" for controlling this.
>>     - Removing tailscale support. It has not been working for a long time
>>       as the company decided to change their APIs. Away with the dead code,
>>       documentation and tests.
>>     - Fixed a compilation issue with pre-industrial versions of libcurl.
>> 
>> Added:
>>   httpd/httpd/trunk/changes-entries/md_v2.6.1.txt
>> Deleted:
>>   httpd/httpd/trunk/modules/md/md_tailscale.c
>>   httpd/httpd/trunk/modules/md/md_tailscale.h
>>   httpd/httpd/trunk/test/modules/md/test_780_tailscale.py
>> Modified:
>>   httpd/httpd/trunk/docs/manual/mod/mod_md.xml
>>   httpd/httpd/trunk/modules/md/config2.m4
>>   httpd/httpd/trunk/modules/md/md.h
>>   httpd/httpd/trunk/modules/md/md_acme.c
>>   httpd/httpd/trunk/modules/md/md_acme.h
>>   httpd/httpd/trunk/modules/md/md_acme_authz.c
>>   httpd/httpd/trunk/modules/md/md_acme_drive.c
>>   httpd/httpd/trunk/modules/md/md_acme_order.c
>>   httpd/httpd/trunk/modules/md/md_acme_order.h
>>   httpd/httpd/trunk/modules/md/md_acmev2_drive.c
>>   httpd/httpd/trunk/modules/md/md_core.c
>>   httpd/httpd/trunk/modules/md/md_crypt.c
>>   httpd/httpd/trunk/modules/md/md_crypt.h
>>   httpd/httpd/trunk/modules/md/md_http.c
>>   httpd/httpd/trunk/modules/md/md_json.c
>>   httpd/httpd/trunk/modules/md/md_reg.c
>>   httpd/httpd/trunk/modules/md/md_reg.h
>>   httpd/httpd/trunk/modules/md/md_status.c
>>   httpd/httpd/trunk/modules/md/md_time.c
>>   httpd/httpd/trunk/modules/md/md_time.h
>>   httpd/httpd/trunk/modules/md/md_version.h
>>   httpd/httpd/trunk/modules/md/mod_md.c
>>   httpd/httpd/trunk/modules/md/mod_md.dsp
>>   httpd/httpd/trunk/modules/md/mod_md_config.c
>>   httpd/httpd/trunk/modules/md/mod_md_config.h
>>   httpd/httpd/trunk/modules/md/mod_md_drive.c
>>   httpd/httpd/trunk/modules/md/mod_md_status.c
>>   httpd/httpd/trunk/test/modules/md/md_conf.py
>>   httpd/httpd/trunk/test/modules/md/test_702_auto.py
>>   httpd/httpd/trunk/test/modules/md/test_710_profiles.py
>>   httpd/httpd/trunk/test/modules/md/test_730_static.py
>>   httpd/httpd/trunk/test/modules/md/test_920_status.py
>> 
> 
>> 
>> Modified: httpd/httpd/trunk/modules/md/md_status.c
>> ==============================================================================
>> --- httpd/httpd/trunk/modules/md/md_status.c Fri Aug 15 10:27:32 2025 
>> (r1927806)
>> +++ httpd/httpd/trunk/modules/md/md_status.c Fri Aug 15 11:23:29 2025 
>> (r1927807)
> 
>> @@ -598,11 +612,19 @@ apr_time_t md_job_delay_on_errors(md_job
>>         delay = max_delay;
>>     }
>>     else if (err_count > 0) {
>> -        /* back off duration, depending on the errors we encounter in a row 
>> */
>> -        delay = job->min_delay << (err_count - 1);
>> -        if (delay > max_delay) {
>> -            delay = max_delay;
>> +        /* back off duration, depending on the errors we encounter in a row.
>> +         * As apr_time_t is signed, this might wrap around*/
>> +        int i;
>> +        delay = job->min_delay;
>> +        for (i = 0; i < err_count; ++i) {
>> +          delay <<= 1;
>> +          if ((delay <= 0) || (delay > max_delay)) {
>> +              delay = max_delay;
>> +              break;
>> +          }
>>         }
>> +        if (delay > max_delay)
>> +            delay = max_delay;
> 
> I don't think that delay can be > max_delay here.

I realized one mistake: the first error already triggers a doubling of the 
delay. Will fix that.

Why do you think that the doubling could never reach the cap? I seem to be 
unable to see that...

Cheers,
Stefan

> 
>>     }
>>     if (delay > 0) {
>>         /* jitter the delay by +/- 0-50%.
>> 
> 
> Regards
> 
> RĂ¼diger
> 

Reply via email to