@Test public void commitACoupleOfTransactionsSuccessfully() throws Exception { MasterTxIdGenerator generator = newGenerator(3, 1, givenOrder()); generator.committed(dataSource, 0, 2, null); generator.committed(dataSource, 0, 3, null); generator.committed(dataSource, 0, 4, null); assertCalls((FakeSlave) slaves.iterator().next(), 2, 3, 4); assertNoFailureLogs(); }
@Test public void commitSuccessfullyToTheFirstOne() throws Exception { MasterTxIdGenerator generator = newGenerator(3, 1, givenOrder()); generator.committed(dataSource, 0, 2, null); assertCalls((FakeSlave) slaves.iterator().next(), 2l); assertNoFailureLogs(); }
@Test public void commitSuccessfullyAtThreeSlaves() throws Exception { MasterTxIdGenerator generator = newGenerator(5, 3, givenOrder()); generator.committed(dataSource, 0, 2, null); generator.committed(dataSource, 0, 3, 1); generator.committed(dataSource, 0, 4, 3); Iterator<Slave> slaveIt = slaves.iterator(); assertCalls((FakeSlave) slaveIt.next(), 2, 3, 4); assertCalls((FakeSlave) slaveIt.next(), 2, 4); assertCalls((FakeSlave) slaveIt.next(), 2, 3); assertCalls((FakeSlave) slaveIt.next()); assertCalls((FakeSlave) slaveIt.next()); assertNoFailureLogs(); }
@Test public void commitFailureAtFirstOneShouldMoveOnToNext() throws Exception { MasterTxIdGenerator generator = newGenerator(3, 1, givenOrder(), true); generator.committed(dataSource, 0, 2, null); Iterator<Slave> slaveIt = slaves.iterator(); assertCalls((FakeSlave) slaveIt.next()); assertCalls((FakeSlave) slaveIt.next(), 2); assertNoFailureLogs(); }
@Test public void notEnoughSlavesSuccessful() throws Exception { MasterTxIdGenerator generator = newGenerator(3, 2, givenOrder(), true, true); generator.committed(dataSource, 0, 2, null); Iterator<Slave> slaveIt = slaves.iterator(); slaveIt.next(); slaveIt.next(); assertCalls((FakeSlave) slaveIt.next(), 2); assertFailureLogs(); }
@Test public void roundRobinSingleSlave() throws Exception { MasterTxIdGenerator generator = newGenerator(3, 1, roundRobin()); for (long tx = 2; tx <= 6; tx++) { generator.committed(dataSource, 0, tx, null); } Iterator<Slave> slaveIt = slaves.iterator(); assertCalls((FakeSlave) slaveIt.next(), 2, 5); assertCalls((FakeSlave) slaveIt.next(), 3, 6); assertCalls((FakeSlave) slaveIt.next(), 4); assertNoFailureLogs(); }
@Test public void roundRobinSomeFailing() throws Exception { MasterTxIdGenerator generator = newGenerator(4, 2, roundRobin(), false, true); for (long tx = 2; tx <= 6; tx++) { generator.committed(dataSource, 0, tx, null); } /* SLAVE | TX * 0 | 2 5 6 * F 1 | * 2 | 2 3 4 6 * 3 | 3 4 5 */ Iterator<Slave> slaveIt = slaves.iterator(); assertCalls((FakeSlave) slaveIt.next(), 2, 5, 6); slaveIt.next(); assertCalls((FakeSlave) slaveIt.next(), 2, 3, 4, 6); assertCalls((FakeSlave) slaveIt.next(), 3, 4, 5); assertNoFailureLogs(); }