@@ -1465,6 +1465,92 @@ def test_syncobjAdminAddRemove():
14651465 o2 ._destroy ()
14661466
14671467
1468+ def test_journalWithAddNodes ():
1469+ dumpFiles = [getNextDumpFile (), getNextDumpFile (), getNextDumpFile ()]
1470+ journalFiles = [getNextJournalFile (), getNextJournalFile (), getNextJournalFile ()]
1471+ removeFiles (dumpFiles )
1472+ removeFiles (journalFiles )
1473+ removeFiles ([e + '.meta' for e in journalFiles ])
1474+
1475+ random .seed (42 )
1476+
1477+ a = [getNextAddr (), getNextAddr (), getNextAddr ()]
1478+
1479+ o1 = TestObj (a [0 ], [a [1 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [0 ], journalFile = journalFiles [0 ], dynamicMembershipChange = True )
1480+ o2 = TestObj (a [1 ], [a [0 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [1 ], journalFile = journalFiles [1 ], dynamicMembershipChange = True )
1481+ objs = [o1 , o2 ]
1482+ doTicks (objs , 10 , stopFunc = lambda : o1 ._isReady () and o2 ._isReady ())
1483+
1484+ assert o1 ._getLeader ().address in a
1485+ assert o1 ._getLeader () == o2 ._getLeader ()
1486+
1487+ o1 .addValue (150 )
1488+ o2 .addValue (200 )
1489+
1490+ doTicks (objs , 10 , stopFunc = lambda : o1 .getCounter () == 350 and o2 .getCounter () == 350 )
1491+
1492+ assert o1 .getCounter () == 350
1493+ assert o2 .getCounter () == 350
1494+ doTicks (objs , 2 )
1495+
1496+
1497+ trueRes = 'SUCCESS ADD ' + a [2 ]
1498+ currRes = {}
1499+ args = {
1500+ o1 : ['-conn' , a [0 ], '-add' , a [2 ]],
1501+ }
1502+ doSyncObjAdminTicks ([o1 , o2 ], args , 10.0 , currRes , stopFunc = lambda : currRes .get (o1 ) is not None )
1503+
1504+ assert currRes [o1 ] == trueRes
1505+
1506+ o3 = TestObj (a [2 ], [a [1 ], a [0 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [2 ], journalFile = journalFiles [2 ], dynamicMembershipChange = True )
1507+
1508+ doTicks ([o1 , o2 , o3 ], 10.0 , stopFunc = lambda : o1 ._isReady () and o2 ._isReady () and o3 ._isReady ())
1509+
1510+ assert o1 ._isReady ()
1511+ assert o2 ._isReady ()
1512+ assert o3 ._isReady ()
1513+
1514+ assert o3 .getCounter () == 350
1515+
1516+ doTicks (objs , 2 )
1517+
1518+
1519+ o1 ._destroy ()
1520+ o2 ._destroy ()
1521+ o3 ._destroy ()
1522+
1523+ removeFiles (dumpFiles )
1524+
1525+ o1 = TestObj (a [0 ], [a [1 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [0 ], journalFile = journalFiles [0 ], dynamicMembershipChange = True )
1526+ o2 = TestObj (a [1 ], [a [0 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [1 ], journalFile = journalFiles [1 ], dynamicMembershipChange = True )
1527+ o3 = TestObj (a [2 ], [a [1 ], a [0 ]], TEST_TYPE .JOURNAL_1 , dumpFile = dumpFiles [2 ], journalFile = journalFiles [2 ], dynamicMembershipChange = True )
1528+
1529+ objs = [o1 , o2 , o3 ]
1530+ doTicks (objs , 10 , stopFunc = lambda : o1 ._isReady () and o1 .getCounter () == 350 and o3 ._isReady () and o3 .getCounter () == 350 )
1531+
1532+ assert o1 ._isReady ()
1533+ assert o3 ._isReady ()
1534+
1535+ assert o1 .getCounter () == 350
1536+ assert o3 .getCounter () == 350
1537+
1538+ o2 .addValue (200 )
1539+
1540+ doTicks (objs , 10 , stopFunc = lambda : o1 .getCounter () == 550 and o3 .getCounter () == 550 )
1541+
1542+ assert o1 .getCounter () == 550
1543+ assert o3 .getCounter () == 550
1544+
1545+ o1 ._destroy ()
1546+ o2 ._destroy ()
1547+ o3 ._destroy ()
1548+
1549+ removeFiles (dumpFiles )
1550+ removeFiles (journalFiles )
1551+ removeFiles ([e + '.meta' for e in journalFiles ])
1552+
1553+
14681554def test_syncobjAdminSetVersion ():
14691555 random .seed (42 )
14701556
0 commit comments