This is an automated email from the git hooks/post-receive script.
tbordaz pushed a change to branch 389-ds-base-1.3.7 in repository 389-ds-base.
from 4234a5f Bump version to 1.3.7.8 new bd23be0 Ticket 49460 - replica_write_ruv log a failure even when it succeeds
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: dirsrvtests/tests/tickets/ticket49460_test.py | 115 +++++++++++++++++++++++ ldap/servers/plugins/replication/repl5_replica.c | 3 +- 2 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 dirsrvtests/tests/tickets/ticket49460_test.py
This is an automated email from the git hooks/post-receive script.
tbordaz pushed a commit to branch 389-ds-base-1.3.7 in repository 389-ds-base.
commit bd23be030495a0e7602f38f65d8e323523e14942 Author: Thierry Bordaz tbordaz@redhat.com Date: Tue Nov 21 17:23:29 2017 +0100
Ticket 49460 - replica_write_ruv log a failure even when it succeeds
Bug Description: Minor issue If the update of the DB RUV returns a success LDAP_SUCCESS (internal modify), it however logs an error as if it failed
side effect of https://pagure.io/389-ds-base/issue/48118
Fix Description: Log a message only on failure
https://pagure.io/389-ds-base/issue/49460
Reviewed by: Ludwig Krispenz, William Brown
Platforms tested: F23
Flag Day: no
Doc impact: no --- dirsrvtests/tests/tickets/ticket49460_test.py | 115 +++++++++++++++++++++++ ldap/servers/plugins/replication/repl5_replica.c | 3 +- 2 files changed, 116 insertions(+), 2 deletions(-)
diff --git a/dirsrvtests/tests/tickets/ticket49460_test.py b/dirsrvtests/tests/tickets/ticket49460_test.py new file mode 100644 index 0000000..296b3c9 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49460_test.py @@ -0,0 +1,115 @@ +import time +import ldap +import logging +import pytest +import os +import re +from lib389._constants import * +from lib389.config import Config +from lib389 import DirSrv, Entry +from lib389.topologies import topology_m3 as topo + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +USER_CN="user" + +def add_user(server, no, desc='dummy', sleep=True): + cn = '%s%d' % (USER_CN, no) + dn = 'cn=%s,ou=people,%s' % (cn, SUFFIX) + log.fatal('Adding user (%s): ' % dn) + server.add_s(Entry((dn, {'objectclass': ['top', 'person', 'inetuser', 'userSecurityInformation'], + 'sn': ['_%s' % cn], + 'description': [desc]}))) + time.sleep(1) + +def check_user(server, no, timeout=10): + + cn = '%s%d' % (USER_CN, no) + dn = 'cn=%s,ou=people,%s' % (cn, SUFFIX) + found = False + cpt = 0 + while cpt < timeout: + try: + server.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + found = True + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + cpt += 1 + return found + +def pattern_errorlog(server, log_pattern): + file_obj = open(server.errlog, "r") + + found = None + # Use a while true iteration because 'for line in file: hit a + while True: + line = file_obj.readline() + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + return found + +def test_ticket_49460(topo): + """Specify a test case purpose or name here + + :id: d1aa2e8b-e6ab-4fc6-9c63-c6f622544f2d + :setup: Fill in set up configuration here + :steps: + 1. Enable replication logging + 2. Do few updates to generatat RUV update + :expectedresults: + 1. No report of failure when the RUV is updated + """ + + M1 = topo.ms["master1"] + M2 = topo.ms["master2"] + M3 = topo.ms["master3"] + + for i in (M1, M2, M3): + i.config.loglevel(vals=[256 + 4], service='access') + i.config.loglevel(vals=[LOG_REPLICA, LOG_DEFAULT], service='error') + + add_user(M1, 11, desc="add to M1") + add_user(M2, 21, desc="add to M2") + add_user(M3, 31, desc="add to M3") + + for i in (M1, M2, M3): + assert check_user(i, 11) + assert check_user(i, 21) + assert check_user(i, 31) + + time.sleep(10) + + #M1.tasks.cleanAllRUV(suffix=SUFFIX, replicaid='3', + # force=False, args={TASK_WAIT: True}) + #time.sleep(10) + regex = re.compile(".*Failed to update RUV tombstone.*LDAP error - 0") + assert not pattern_errorlog(M1, regex) + assert not pattern_errorlog(M2, regex) + assert not pattern_errorlog(M3, regex) + + # If you need any test suite initialization, + # please, write additional fixture for that (including finalizer). + # Topology for suites are predefined in lib389/topologies.py. + + # If you need host, port or any other data about instance, + # Please, use the instance object attributes for that (for example, topo.ms["master1"].serverid) + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/ldap/servers/plugins/replication/repl5_replica.c b/ldap/servers/plugins/replication/repl5_replica.c index 77f4f18..db3a8a0 100644 --- a/ldap/servers/plugins/replication/repl5_replica.c +++ b/ldap/servers/plugins/replication/repl5_replica.c @@ -2808,8 +2808,7 @@ replica_write_ruv(Replica *r) /* this includes an internal operation - but since this only happens during server startup - its ok that we have lock around it */ rc = _replica_configure_ruv(r, PR_TRUE); - } else /* error */ - { + } else if (rc != LDAP_SUCCESS) { /* error */ slapi_log_err(SLAPI_LOG_REPL, repl_plugin_name, "replica_write_ruv - Failed to update RUV tombstone for %s; " "LDAP error - %d\n",
389-commits@lists.fedoraproject.org