> Am 19.08.2025 um 11:10 schrieb Stefan Eissing via dev <[email protected]>:
> 
> 
> 
>> 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...

The brain works better by writing. I now see what you mean. The additional 
check after the loop is unnecessary. Thanks for reviewing!

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


Reply via email to