continue; case "crc": archive.setCrc(Integer.parseInt(value)); continue; case "hash":
@Override public void saveArchive(Archive a, byte[] archiveData) throws IOException { Index index = a.getIndex(); IndexFile indexFile = getIndex(index.getId()); assert indexFile.getIndexFileId() == index.getId(); DataFileWriteResult res = data.write(index.getId(), a.getArchiveId(), archiveData); indexFile.write(new IndexEntry(indexFile, a.getArchiveId(), res.sector, res.compressedLength)); byte compression = archiveData[0]; int compressedSize = Ints.fromBytes(archiveData[1], archiveData[2], archiveData[3], archiveData[4]); // don't crc the appended revision, if it is there int length = 1 // compression type + 4 // compressed size + compressedSize + (compression != CompressionType.NONE ? 4 : 0); Crc32 crc = new Crc32(); crc.update(archiveData, 0, length); a.setCrc(crc.getHash()); logger.trace("Saved archive {}/{} at sector {}, compressed length {}", index.getId(), a.getArchiveId(), res.sector, res.compressedLength); } }
archive.setCrc(ad.getCrc()); archive.setNameHash(ad.getNameHash());
@Override public void load(Store store) throws IOException { List<IndexEntry> indexes = cacheDao.findIndexesForCache(con, cacheEntry); for (IndexEntry indexEntry : indexes) { Index index = store.addIndex(indexEntry.getIndexId()); index.setCrc(indexEntry.getCrc()); index.setRevision(indexEntry.getRevision()); try (ResultSetIterable<ArchiveEntry> archives = cacheDao.findArchivesForIndex(con, indexEntry)) { for (ArchiveEntry archiveEntry : archives) { if (index.getArchive(archiveEntry.getArchiveId()) != null) { throw new IOException("Duplicate archive " + archiveEntry + " on " + indexEntry); } Archive archive = index.addArchive(archiveEntry.getArchiveId()); archive.setNameHash(archiveEntry.getNameHash()); archive.setCrc(archiveEntry.getCrc()); archive.setRevision(archiveEntry.getRevision()); archive.setHash(archiveEntry.getHash()); // File data is not necessary for cache updating } } } }
private void loadIndex(Index index) throws IOException { logger.trace("Loading index {}", index.getId()); byte[] indexData = readIndex(index.getId()); Container res = Container.decompress(indexData, null); byte[] data = res.data; IndexData id = new IndexData(); id.load(data); index.setProtocol(id.getProtocol()); index.setRevision(id.getRevision()); index.setNamed(id.isNamed()); for (ArchiveData ad : id.getArchives()) { Archive archive = index.addArchive(ad.getId()); archive.setNameHash(ad.getNameHash()); archive.setCrc(ad.getCrc()); archive.setRevision(ad.getRevision()); archive.setFileData(ad.getFiles()); assert ad.getFiles().length > 0; } index.setCrc(res.crc); index.setCompression(res.compression); assert res.revision == -1; }