def setup_max_age(topo, request): """Configure logging and changelog max age """ master = topo.ms["master1"] master.config.loglevel((ErrorLog.REPLICA,), 'error') cl = Changelog5(master) cl.set_max_age('5') cl.set_trim_interval('300')
def test_max_entries(topo, setup_max_entries): """Test changing the trimming interval works with max entries :id: b5de04a5-4d92-49ea-a725-1d278a1c647d :setup: single master :steps: 1. Perform modification to populate changelog 2. Adjust the changelog trimming interval 3. Check is trimming occurrs within the new interval :expectedresults: 1. Modifications are successful 2. The changelog trimming interval is correctly lowered 3. Trimming occurs """ log.info("Testing changelog triming interval with max entries...") master = topo.ms["master1"] cl = Changelog5(master) # reset errors log master.deleteErrorLogs() # Do mods to build if cl entries do_mods(master, 10) if master.searchErrorsLog("Trimmed") is True: log.fatal('Trimming event unexpectedly occurred') assert False cl.set_trim_interval('5') time.sleep(6) # Trimming should have occured if master.searchErrorsLog("Trimmed") is False: log.fatal('Trimming event did not occur') assert False
def test_cleanallruv_repl(topo_m3): """Test that cleanallruv could not break replication if anchor csn in ruv originated in deleted replica :id: 46faba9a-897e-45b8-98dc-aec7fa8cec9a :setup: 3 Masters :steps: 1. Configure error log level to 8192 in all masters 2. Modify nsslapd-changelogmaxage=30 and nsslapd-changelogtrim-interval=5 for M1 and M2 3. Add test users to 3 masters 4. Launch ClearRuv but withForce 5. Check the users after CleanRUV, because of changelog trimming, it will effect the CLs :expectedresults: 1. Error logs should be configured successfully 2. Modify should be successful 3. Test users should be added successfully 4. ClearRuv should be launched successfully 5. Users should be present according to the changelog trimming effect """ M1 = topo_m3.ms["master1"] M2 = topo_m3.ms["master2"] M3 = topo_m3.ms["master3"] log.info("Change the error log levels for all masters") for s in (M1, M2, M3): s.config.replace('nsslapd-errorlog-level', "8192") log.info("Get the replication agreements for all 3 masters") m1_m2 = M1.agreement.list(suffix=SUFFIX, consumer_host=M2.host, consumer_port=M2.port) m1_m3 = M1.agreement.list(suffix=SUFFIX, consumer_host=M3.host, consumer_port=M3.port) m3_m1 = M3.agreement.list(suffix=SUFFIX, consumer_host=M1.host, consumer_port=M1.port) log.info("Get the changelog enteries for M1 and M2") changelog_m1 = Changelog5(M1) changelog_m2 = Changelog5(M2) log.info( "Modify nsslapd-changelogmaxage=30 and nsslapd-changelogtrim-interval=5 for M1 and M2" ) changelog_m1.set_max_age(MAXAGE_STR) changelog_m1.set_trim_interval(TRIMINTERVAL_STR) log.info("Add test users to 3 masters") users_m1 = UserAccounts(M1, DEFAULT_SUFFIX) users_m2 = UserAccounts(M2, DEFAULT_SUFFIX) users_m3 = UserAccounts(M3, DEFAULT_SUFFIX) user_props = TEST_USER_PROPERTIES.copy() user_props.update({'uid': "testuser10"}) user10 = users_m1.create(properties=user_props) user_props.update({'uid': "testuser20"}) user20 = users_m2.create(properties=user_props) user_props.update({'uid': "testuser30"}) user30 = users_m3.create(properties=user_props) # ::important:: the testuser31 is the oldest csn in M2, # because it will be cleared by changelog trimming user_props.update({'uid': "testuser31"}) user31 = users_m3.create(properties=user_props) user_props.update({'uid': "testuser11"}) user11 = users_m1.create(properties=user_props) user_props.update({'uid': "testuser21"}) user21 = users_m2.create(properties=user_props) # this is to trigger changelog trim and interval values time.sleep(40) # Here M1, M2, M3 should have 11,21,31 and 10,20,30 are CL cleared M2.stop() M1.agreement.pause(m1_m2[0].dn) user_props.update({'uid': "testuser32"}) user32 = users_m3.create(properties=user_props) user_props.update({'uid': "testuser33"}) user33 = users_m3.create(properties=user_props) user_props.update({'uid': "testuser12"}) user12 = users_m1.create(properties=user_props) M3.agreement.pause(m3_m1[0].dn) M3.agreement.resume(m3_m1[0].dn) time.sleep(40) # Here because of changelog trimming testusers 31 and 32 are CL cleared # ClearRuv is launched but with Force M3.stop() M1.tasks.cleanAllRUV(suffix=SUFFIX, replicaid='3', force=True, args={TASK_WAIT: False}) # here M1 should clear 31 M2.start() M1.agreement.pause(m1_m2[0].dn) M1.agreement.resume(m1_m2[0].dn) time.sleep(10) #Check the users after CleanRUV expected_m1_users = [ user31.dn, user11.dn, user21.dn, user32.dn, user33.dn, user12.dn ] expected_m2_users = [user31.dn, user11.dn, user21.dn, user12.dn] current_m1_users = [user.dn for user in users_m1.list()] current_m2_users = [user.dn for user in users_m2.list()] assert set(expected_m1_users).issubset(current_m1_users) assert set(expected_m2_users).issubset(current_m2_users)