private void updateFilenameHistoryCache() { // TODO [medium] Performance: This throws away the unchanged entries. It should only update new // database version filenameHistoryCache.clear(); for (PartialFileHistory cacheFileHistory : fullDatabaseVersionCache.getFileHistories()) { FileVersion lastVersion = cacheFileHistory.getLastVersion(); String fileName = lastVersion.getPath(); if (lastVersion.getStatus() != FileStatus.DELETED) { filenameHistoryCache.put(fileName, cacheFileHistory); } } }
// TODO [medium] Very inefficient. Always updates whole cache private void updateContentChecksumCache() { contentChecksumFileHistoriesCache.clear(); for (PartialFileHistory fullFileHistory : fullDatabaseVersionCache.getFileHistories()) { FileChecksum lastVersionChecksum = fullFileHistory.getLastVersion().getChecksum(); if (lastVersionChecksum != null) { List<PartialFileHistory> historiesWithVersionsWithSameChecksum = contentChecksumFileHistoriesCache.get(lastVersionChecksum); // Create if it does not exist if (historiesWithVersionsWithSameChecksum == null) { historiesWithVersionsWithSameChecksum = new ArrayList<PartialFileHistory>(); } // Add to cache historiesWithVersionsWithSameChecksum.add(fullFileHistory); contentChecksumFileHistoriesCache.put( lastVersionChecksum, historiesWithVersionsWithSameChecksum); } } }
public ChunkEntry getChunk(ChunkChecksum checksum) { return fullDatabaseVersionCache.getChunk(checksum); }
public FileContent getContent(FileChecksum checksum) { return (checksum != null) ? fullDatabaseVersionCache.getFileContent(checksum) : null; }
private void updateFullDatabaseVersionCache(DatabaseVersion newDatabaseVersion) { // Chunks for (ChunkEntry sourceChunk : newDatabaseVersion.getChunks()) { if (fullDatabaseVersionCache.getChunk(sourceChunk.getChecksum()) == null) { fullDatabaseVersionCache.addChunk(sourceChunk); } } // Multichunks for (MultiChunkEntry sourceMultiChunk : newDatabaseVersion.getMultiChunks()) { if (fullDatabaseVersionCache.getMultiChunk(sourceMultiChunk.getId()) == null) { fullDatabaseVersionCache.addMultiChunk(sourceMultiChunk); } } // Contents for (FileContent sourceFileContent : newDatabaseVersion.getFileContents()) { if (fullDatabaseVersionCache.getFileContent(sourceFileContent.getChecksum()) == null) { fullDatabaseVersionCache.addFileContent(sourceFileContent); } } // Histories for (PartialFileHistory sourceFileHistory : newDatabaseVersion.getFileHistories()) { PartialFileHistory targetFileHistory = fullDatabaseVersionCache.getFileHistory(sourceFileHistory.getFileId()); if (targetFileHistory == null) { fullDatabaseVersionCache.addFileHistory((PartialFileHistory) sourceFileHistory.clone()); } else { for (FileVersion sourceFileVersion : sourceFileHistory.getFileVersions().values()) { if (targetFileHistory.getFileVersion(sourceFileVersion.getVersion()) == null) { targetFileHistory.addFileVersion(sourceFileVersion); } } } } }
private void updateDatabaseVersionIdCache(DatabaseVersion newDatabaseVersion) { databaseVersionIdCache.put(newDatabaseVersion.getVectorClock(), newDatabaseVersion); }
public Collection<PartialFileHistory> getFileHistories() { return fullDatabaseVersionCache.getFileHistories(); }
public PartialFileHistory getFileHistory(FileHistoryId fileId) { return fullDatabaseVersionCache.getFileHistory(fileId); }
/** Get a multichunk that this chunk is contained in. */ public MultiChunkEntry getMultiChunkForChunk(ChunkChecksum chunk) { return fullDatabaseVersionCache.getMultiChunk(chunk); }
public MultiChunkEntry getMultiChunk(MultiChunkId id) { return fullDatabaseVersionCache.getMultiChunk(id); }