/** * @param component component to get timestamp. * @return last modified time for given component. 0 if given component does not exist or IO error occurs. */ public long getCreationTimeFor(Component component) { return new File(descriptor.filenameFor(component)).lastModified(); }
public List<String> getAllFilePaths() { List<String> ret = new ArrayList<>(); for (Component component : components) ret.add(descriptor.filenameFor(component)); return ret; }
/** * @param component component to get timestamp. * @return last modified time for given component. 0 if given component does not exist or IO error occurs. */ public long getCreationTimeFor(Component component) { return new File(descriptor.filenameFor(component)).lastModified(); }
public static void rename(Descriptor tmpdesc, Descriptor newdesc, Set<Component> components) { for (Component component : Sets.difference(components, Sets.newHashSet(Component.DATA, Component.SUMMARY))) { FileUtils.renameWithConfirm(tmpdesc.filenameFor(component), newdesc.filenameFor(component)); } // do -Data last because -Data present should mean the sstable was completely renamed before crash FileUtils.renameWithConfirm(tmpdesc.filenameFor(Component.DATA), newdesc.filenameFor(Component.DATA)); // rename it without confirmation because summary can be available for loadNewSSTables but not for closeAndOpenReader FileUtils.renameWithOutConfirm(tmpdesc.filenameFor(Component.SUMMARY), newdesc.filenameFor(Component.SUMMARY)); }
private String names(Collection<SSTableReader> sstables) { StringBuilder builder = new StringBuilder(); for (SSTableReader sstable : sstables) builder.append(sstable.descriptor.filenameFor(Component.DATA)).append(" "); return builder.toString(); }
private String names(Collection<SSTableReader> sstables) { StringBuilder builder = new StringBuilder(); for (SSTableReader sstable : sstables) builder.append(sstable.descriptor.filenameFor(Component.DATA)).append(" "); return builder.toString(); }
public static void rename(Descriptor tmpdesc, Descriptor newdesc, Set<Component> components) { for (Component component : Sets.difference(components, Sets.newHashSet(Component.DATA, Component.SUMMARY))) { FileUtils.renameWithConfirm(tmpdesc.filenameFor(component), newdesc.filenameFor(component)); } // do -Data last because -Data present should mean the sstable was completely renamed before crash FileUtils.renameWithConfirm(tmpdesc.filenameFor(Component.DATA), newdesc.filenameFor(Component.DATA)); // rename it without confirmation because summary can be available for loadNewSSTables but not for closeAndOpenReader FileUtils.renameWithOutConfirm(tmpdesc.filenameFor(Component.SUMMARY), newdesc.filenameFor(Component.SUMMARY)); }
/** * Load bloom filter from Filter.db file. * * @throws IOException */ private void loadBloomFilter(boolean oldBfHashOrder) throws IOException { try (DataInputStream stream = new DataInputStream(new BufferedInputStream(new FileInputStream(descriptor.filenameFor(Component.FILTER))))) { bf = FilterFactory.deserialize(stream, true, oldBfHashOrder); } }
public void tidy() { lookup.remove(desc); if (obsoletion != null) obsoletion.run(); // don't ideally want to dropPageCache for the file until all instances have been released NativeLibrary.trySkipCache(desc.filenameFor(Component.DATA), 0, 0); NativeLibrary.trySkipCache(desc.filenameFor(Component.PRIMARY_INDEX), 0, 0); }
public ChecksumValidator(Descriptor descriptor) throws IOException { this(descriptor.version.uncompressedChecksumType(), RandomAccessReader.open(new File(descriptor.filenameFor(Component.CRC))), descriptor.filenameFor(Component.DATA)); }
/** * Load bloom filter from Filter.db file. * * @throws IOException */ private void loadBloomFilter(boolean oldBfHashOrder) throws IOException { try (DataInputStream stream = new DataInputStream(new BufferedInputStream(new FileInputStream(descriptor.filenameFor(Component.FILTER))))) { bf = FilterFactory.deserialize(stream, true, oldBfHashOrder); } }
public void mutateLevel(Descriptor descriptor, int newLevel) throws IOException { logger.trace("Mutating {} to level {}", descriptor.filenameFor(Component.STATS), newLevel); Map<MetadataType, MetadataComponent> currentComponents = deserialize(descriptor, EnumSet.allOf(MetadataType.class)); StatsMetadata stats = (StatsMetadata) currentComponents.remove(MetadataType.STATS); // mutate level currentComponents.put(MetadataType.STATS, stats.mutateLevel(newLevel)); rewriteSSTableMetadata(descriptor, currentComponents); }
public void mutateRepairedAt(Descriptor descriptor, long newRepairedAt) throws IOException { logger.trace("Mutating {} to repairedAt time {}", descriptor.filenameFor(Component.STATS), newRepairedAt); Map<MetadataType, MetadataComponent> currentComponents = deserialize(descriptor, EnumSet.allOf(MetadataType.class)); StatsMetadata stats = (StatsMetadata) currentComponents.remove(MetadataType.STATS); // mutate level currentComponents.put(MetadataType.STATS, stats.mutateRepairedAt(newRepairedAt)); rewriteSSTableMetadata(descriptor, currentComponents); }
private void completeSSTable(PerSSTableIndexWriter indexWriter, SSTableReader sstable, Collection<ColumnIndex> indexes) { indexWriter.complete(); for (ColumnIndex index : indexes) { File tmpIndex = new File(sstable.descriptor.filenameFor(index.getComponent())); if (!tmpIndex.exists()) // no data was inserted into the index for given sstable continue; index.update(Collections.<SSTableReader>emptyList(), Collections.singletonList(sstable)); } } }
public void validate() throws IOException { CheckedInputStream checkedInputStream = new CheckedInputStream(dataReader, checksum); byte[] chunk = new byte[64 * 1024]; while( checkedInputStream.read(chunk) > 0 ) { } long calculatedDigestValue = checkedInputStream.getChecksum().getValue(); if (storedDigestValue != calculatedDigestValue) { throw new IOException("Corrupted SSTable : " + descriptor.filenameFor(Component.DATA)); } }
private static void printMinMaxToken(Descriptor descriptor, IPartitioner partitioner, AbstractType<?> keyType, PrintStream out) throws IOException { File summariesFile = new File(descriptor.filenameFor(Component.SUMMARY)); if (!summariesFile.exists()) return; try (DataInputStream iStream = new DataInputStream(new FileInputStream(summariesFile))) { Pair<DecoratedKey, DecoratedKey> firstLast = new IndexSummary.IndexSummarySerializer().deserializeFirstLastKey(iStream, partitioner, descriptor.version.hasSamplingLevel()); out.printf("First token: %s (key=%s)%n", firstLast.left.getToken(), keyType.getString(firstLast.left.getKey())); out.printf("Last token: %s (key=%s)%n", firstLast.right.getToken(), keyType.getString(firstLast.right.getKey())); } }
private String getSSTablePath(File directory, Version version, SSTableFormat.Type format) { Descriptor desc = new Descriptor(version, directory, keyspace.getName(), name, fileIndexGenerator.incrementAndGet(), format, Component.digestFor(BigFormat.latestVersion.uncompressedChecksumType())); return desc.filenameFor(Component.DATA); }
public Index(ColumnIndex columnIndex) { this.columnIndex = columnIndex; this.outputFile = descriptor.filenameFor(columnIndex.getComponent()); this.analyzer = columnIndex.getAnalyzer(); this.segments = new HashSet<>(); this.maxMemorySize = maxMemorySize(columnIndex); this.currentBuilder = newIndexBuilder(); }
private String getSSTablePath(File directory, Version version, SSTableFormat.Type format) { Descriptor desc = new Descriptor(version, directory, keyspace.getName(), name, fileIndexGenerator.incrementAndGet(), format, Component.digestFor(BigFormat.latestVersion.uncompressedChecksumType())); return desc.filenameFor(Component.DATA); }
IndexWriter(long keyCount) { indexFile = new SequentialWriter(new File(descriptor.filenameFor(Component.PRIMARY_INDEX)), writerOption); builder = new FileHandle.Builder(descriptor.filenameFor(Component.PRIMARY_INDEX)).mmapped(DatabaseDescriptor.getIndexAccessMode() == Config.DiskAccessMode.mmap); chunkCache.ifPresent(builder::withChunkCache); summary = new IndexSummaryBuilder(keyCount, metadata.params.minIndexInterval, Downsampling.BASE_SAMPLING_LEVEL); bf = FilterFactory.getFilter(keyCount, metadata.params.bloomFilterFpChance, true, descriptor.version.hasOldBfHashOrder()); // register listeners to be alerted when the data files are flushed indexFile.setPostFlushListener(() -> summary.markIndexSynced(indexFile.getLastFlushOffset())); dataFile.setPostFlushListener(() -> summary.markDataSynced(dataFile.getLastFlushOffset())); }