private List<DatabaseVersionHeader> sortBranches(DatabaseBranches allBranches) { List<DatabaseVersionHeader> databaseVersionHeaders = new ArrayList<DatabaseVersionHeader>(); for (String client : allBranches.getClients()) { databaseVersionHeaders.addAll(allBranches.getBranch(client).getAll()); } Collections.sort(databaseVersionHeaders, new DatabaseVersionHeaderComparator(true)); return databaseVersionHeaders; } }
private int compareByTimestamp(DatabaseVersionHeader dbvh1, DatabaseVersionHeader dbvh2) { int timestampComparison = Long.compare(dbvh1.getDate().getTime(), dbvh2.getDate().getTime()); if (timestampComparison == 0) { return compareByClientName(dbvh1, dbvh2); } else { return timestampComparison; } }
/** * Compares the two given database versions headers and returns -1, 0 or 1 depending on * which header is considered larger. See {@link DatabaseVersionHeaderComparator class description} * for details regarding the precedence. * * @return -1 if dbvh1 is smaller than dbvh2, 0 if they are equal, 1 if dbvh1 is greater than dbvh2 */ @Override public int compare(DatabaseVersionHeader dbvh1, DatabaseVersionHeader dbvh2) { return compareByVectorClock(dbvh1, dbvh2); }
@Test public void testCompareDatabaseVersionHeaderEqual() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(true); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(0)); }
private int compareByVectorClock(DatabaseVersionHeader dbvh1, DatabaseVersionHeader dbvh2) { VectorClockComparison vectorClockComparison = VectorClock.compare(dbvh1.getVectorClock(), dbvh2.getVectorClock()); if (vectorClockComparison == VectorClockComparison.SIMULTANEOUS || vectorClockComparison == VectorClockComparison.EQUAL) { if (considerTime) { return compareByTimestamp(dbvh1, dbvh2); } else { return 0; } } return vectorClockComparison == VectorClockComparison.SMALLER ? -1 : 1; }
@Test public void testCompareDatabaseVersionHeaderEqualIgnoreTime() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); dbvh2.setDate(new Date(0xFEBEBEBE)); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(0)); }
@Test public void testCompareDatabaseVersionHeaderDifferentClients() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(true); dbvh2.setClient("B"); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(-1)); }
@Test public void testCompareDatabaseVersionHeaderSmaller() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); vc1.setClock("A", 3); vc1.setClock("B", 7); vc2.setClock("A", 5); vc2.setClock("B", 7); dbvh2.setDate(new Date(0xFEBEBEBE)); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(-1)); }
@Test public void testCompareDatabaseVersionHeaderLarger() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); vc1.setClock("A", 3); vc1.setClock("B", 7); vc2.setClock("A", 1); vc2.setClock("B", 7); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(1)); }
@Test public void testCompareDatabaseVersionHeaderSimultaneous() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(true); vc1.setClock("A", 3); vc1.setClock("B", 7); vc2.setClock("A", 5); vc2.setClock("B", 4); dbvh2.setDate(new Date(0xFEBEBEBE)); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(-1)); }
@Test public void testCompareDatabaseVersionHeaderSimultaneousIgnoreTime() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); vc1.setClock("A", 3); vc1.setClock("B", 7); vc2.setClock("A", 5); vc2.setClock("B", 4); dbvh2.setDate(new Date(0xFEBEBEBE)); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(0)); }
DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); boolean potentialWinnerWins = !emptyWinnerBranch && databaseVersionHeaderComparator.compare(potentialWinner, winnersBranch.getLast()) > 0;