public DatabaseFileReader(DatabaseXmlSerializer databaseSerializer, DatabaseBranch winnersApplyBranch, Map<DatabaseVersionHeader, File> databaseVersionLocations) { this.winnersApplyBranchList = winnersApplyBranch.getAll(); this.databaseVersionLocations = databaseVersionLocations; this.databaseSerializer = databaseSerializer; }
/** * Persists the given winners branch to the local database, i.e. for every database version * in the winners branch, all contained multichunks, chunks, etc. are added to the local SQL * database. * * <p>This method applies both regular database versions as well as purge database versions. */ private void persistDatabaseVersions(DatabaseBranch winnersApplyBranch, MemoryDatabase winnersDatabase) throws SQLException { // Add winners database to local database // Note: This must happen AFTER the file system stuff, because we compare the winners database with the local database! logger.log(Level.INFO, "- Adding database versions to SQL database ..."); for (DatabaseVersionHeader currentDatabaseVersionHeader : winnersApplyBranch.getAll()) { persistDatabaseVersion(winnersDatabase, currentDatabaseVersionHeader); } }
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; } }
/** * Implements the core synchronization algorithm as described {@link DatabaseReconciliator in the class description}. * * @param localMachineName Client name of the local machine (required for branch stitching) * @param localBranch Local branch, created from the local database * @param unknownRemoteBranches Newly downloaded unknown remote branches (incomplete branches; will be stitched) * @return Returns the branch of the winning client */ public Map.Entry<String, DatabaseBranch> findWinnerBranch(DatabaseBranches allBranches) throws Exception { Entry<String, DatabaseBranch> winnersNameAndBranch = findWinnersNameAndBranch(allBranches); if (winnersNameAndBranch != null) { String winnersName = winnersNameAndBranch.getKey(); DatabaseBranch winnersBranch = winnersNameAndBranch.getValue(); if (logger.isLoggable(Level.INFO)) { logger.log(Level.INFO, "- Winner is " + winnersName + " with branch: "); for (DatabaseVersionHeader databaseVersionHeader : winnersBranch.getAll()) { logger.log(Level.INFO, " + " + databaseVersionHeader); } } return winnersNameAndBranch; } else { return null; } }
@Override public DatabaseBranch clone() { DatabaseBranch clonedBranch = new DatabaseBranch(); clonedBranch.addAll(getAll()); return clonedBranch; }
for (DatabaseVersionHeader databaseVersionHeader : localPurgeBranch.getAll()) { logger.log(Level.INFO, " * MASTER->DIRTY: " + databaseVersionHeader); localDatabase.markDatabaseVersionDirty(databaseVersionHeader.getVectorClock());