389ds / 389-ds-base

The enterprise-class Open Source LDAP server for Linux
https://www.port389.org/
Other
200 stars 82 forks source link

After an initial failure, subsequent online backups will not work #6229

Open progier389 opened 2 weeks ago

progier389 commented 2 weeks ago

Issue Description

Several issues related to failing backup tasks:

Package Version and Platform:

Steps to Reproduce I hit the 3 issues with the following python script:

import os
import time
from lib389._constants import PW_DM, DN_DM
from lib389 import DirSrv
from lib389.properties import TASK_WAIT
import tempfile

def test_backup_task_after_failure():
    inst = DirSrv()
    inst.local_simple_allocate('standalone1', binddn=DN_DM, password=PW_DM);
    with tempfile.TemporaryDirectory() as backup_dir:
        inst.open()
        archive_dir1 = f'{backup_dir}/bak1'
        archive_dir1b = f'{backup_dir}/bak1b'
        archive_dir2 = f'{backup_dir}/bak2'
        tasks = inst.tasks
        # Perform a backup
        tasks.db2bak(backup_dir=archive_dir1)
        # Wait until task is completed, trying to rename backup directory
        done,exitCode,warningCode = (False, None, None)
        while not done:
            if os.path.isdir(archive_dir1):
                os.rename(archive_dir1, archive_dir1b)
            done,exitCode,warningCode = tasks.checkTask(tasks.entry)
            time.sleep(0.1)
        print(f'bak1: done,exitCode,warningCode= {done},{exitCode},{warningCode}')
        assert exitCode != 0
        exitCode = tasks.db2bak(backup_dir=archive_dir2, args={TASK_WAIT: True})
        print(f'bak2: exitCode= {exitCode}')
        assert exitCode == 0

test_backup_task_after_failure()

Additional context Already triaged: https://issues.redhat.com/browse/IDMDS-3967