Bug 2124660

Summary: Retro changelog trimming uses maxage incorrectly
Product: Red Hat Enterprise Linux 9 Reporter: mreynolds
Component: 389-ds-baseAssignee: thierry bordaz <tbordaz>
Status: CLOSED ERRATA QA Contact: LDAP QA Team <idm-ds-qe-bugs>
Severity: high Docs Contact:
Priority: high    
Version: 9.2CC: bsmejkal, ccallaha, idm-ds-dev-bugs, pasik, pcech, tbordaz
Target Milestone: rcKeywords: Triaged
Target Release: 9.2   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard: sync-to-jira
Fixed In Version: 389-ds-base-2.2.4-3.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-05-09 07:41:32 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description mreynolds 2022-09-06 17:25:06 UTC
Description

The retro changelog trimming uses maxage incorrectly to decide if trimming is needed.

Package Version and Platform:

Platform: CentOS 8-Stream
Package and version: 389-ds-base-1.4.3.28-6.module_el8.6+1102+fe5d910f.x86_64


The following code in retrocl_trim.c uses maxage incorrectly.

        int must_trim = 0;
        /* See if we need to trim */
        /* Has enough time elapsed since our last check? */
        if (cur_time - ts.ts_s_last_trim >= (ts.ts_c_max_age)) {        <<<<<<==== wrong condition
            /* Is the first entry too old? */
            time_t first_time;
            time_t now_maxage = slapi_current_utc_time(); /* real time for trimming candidates */
            /*
             * good we could avoid going to the database to retrieve
             * this time information if we cached the last value we'd read.
             * But a client might have deleted it over protocol.
             */
            first_time = retrocl_getchangetime(SLAPI_SEQ_FIRST, &ldrc);
            slapi_log_err(SLAPI_LOG_PLUGIN, RETROCL_PLUGIN_NAME,
                          "cltrim: ldrc=%d, first_time=%ld, cur_time=%ld\n",
                          ldrc, first_time, cur_time);
            if (LDAP_SUCCESS == ldrc && first_time > (time_t)0L &&
                first_time + ts.ts_c_max_age < now_maxage)
            {
                must_trim = 1;
            }
        }


See https://github.com/389ds/389-ds-base/issues/5368

Comment 1 thierry bordaz 2022-10-14 14:20:28 UTC
Fix is pushed upstream => POST

Comment 8 bsmejkal 2023-01-19 09:33:41 UTC
As per comment #c6 marking as VERIFIED.

Comment 10 errata-xmlrpc 2023-05-09 07:41:32 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (389-ds-base bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2023:2274