private static void deleteTempDirectory() { if (tempFolder != null) { try { FileUtil.deleteFolder(tempFolder); } catch (final IOException e) { e.printStackTrace(); } } } }
@Override public void delete() { FileUtil.closeSilently(inputStream); FileUtil.deleteFile(dataFile); FileUtil.deleteFile(checksumFile); }
@Override protected void onActorStarting() { LOG.debug( "Writing metrics to file {}. Reporting interval {}s.", filePath, reportingInterval.toMillis() / 1000); fileChannel = FileUtil.openChannel(filePath, true); actor.setPriority(ActorPriority.LOW); }
public void delete() { FileUtil.deleteFile(file); FileUtil.deleteFile(tmpFile); }
/** Creates a truncated backup file of given segment. */ protected void truncateLogSegment(final int segmentId, final int size) { final String source = config.fileName(segmentId); final String backup = config.backupFileName(segmentId); final Path sourcePath = Paths.get(source); final Path backupPath = Paths.get(backup); FileChannel fileChannel = null; MappedByteBuffer mappedBuffer = null; try { // copy: segment -> segment.bak Files.copy(sourcePath, backupPath, REPLACE_EXISTING); fileChannel = FileUtil.openChannel(backup, false); fileChannel.truncate(size); fileChannel.force(true); mappedBuffer = fileChannel.map(MapMode.READ_WRITE, 0, METADATA_LENGTH); final UnsafeBuffer metadataSection = new UnsafeBuffer(mappedBuffer, 0, METADATA_LENGTH); metadataSection.putInt(SEGMENT_SIZE_OFFSET, size); mappedBuffer.force(); } catch (final IOException e) { LangUtil.rethrowUnchecked(e); } finally { IoUtil.unmap(mappedBuffer); FileUtil.closeSilently(fileChannel); } }
@Override protected void onActorClosing() { FileUtil.closeSilently(fileChannel); }
protected void applyTruncatedFileIfExists(final File logDir) { final List<File> truncatedFiles = Arrays.asList(logDir.listFiles(config::matchesTruncatedFileNamePattern)); final int truncatedApplicableFiles = truncatedFiles.size(); if (truncatedApplicableFiles == 1) { final File truncatedFile = truncatedFiles.get(0); final int truncatedSegmentId = getSegmentId(truncatedFile); if (shouldApplyTruncatedSegment(logDir, truncatedFile, truncatedSegmentId)) { moveFile(truncatedFile.getAbsolutePath(), config.fileName(truncatedSegmentId)); } else { truncatedFiles.forEach(FileUtil::deleteFile); } } else if (truncatedApplicableFiles > 1) { throw new RuntimeException("Cannot open log storage: multiple truncated files detected"); } }
public boolean allocate(int segmentId, int segmentSize) { boolean allocated = false; try { final File file = new File(fileName); final long availableSpace = FileUtil.getAvailableSpace(file.getParentFile()); if (availableSpace > segmentSize) { openSegment(true); setSegmentId(segmentId); setCapacity(segmentSize); setSizeVolatile(METADATA_LENGTH); allocated = true; } } catch (Exception e) { LOG.error("Failed to allocate", e); } return allocated; }
public void delete() { FileUtil.deleteFile(file); FileUtil.deleteFile(tmpFile); }
/** Creates a truncated backup file of given segment. */ protected void truncateLogSegment(final int segmentId, final int size) { final String source = config.fileName(segmentId); final String backup = config.backupFileName(segmentId); final Path sourcePath = Paths.get(source); final Path backupPath = Paths.get(backup); FileChannel fileChannel = null; MappedByteBuffer mappedBuffer = null; try { // copy: segment -> segment.bak Files.copy(sourcePath, backupPath, REPLACE_EXISTING); fileChannel = FileUtil.openChannel(backup, false); fileChannel.truncate(size); fileChannel.force(true); mappedBuffer = fileChannel.map(MapMode.READ_WRITE, 0, METADATA_LENGTH); final UnsafeBuffer metadataSection = new UnsafeBuffer(mappedBuffer, 0, METADATA_LENGTH); metadataSection.putInt(SEGMENT_SIZE_OFFSET, size); mappedBuffer.force(); } catch (final IOException e) { LangUtil.rethrowUnchecked(e); } finally { IoUtil.unmap(mappedBuffer); FileUtil.closeSilently(fileChannel); } }
@Override protected void onActorClosing() { FileUtil.closeSilently(fileChannel); }
protected void applyTruncatedFileIfExists(final File logDir) { final List<File> truncatedFiles = Arrays.asList(logDir.listFiles(config::matchesTruncatedFileNamePattern)); final int truncatedApplicableFiles = truncatedFiles.size(); if (truncatedApplicableFiles == 1) { final File truncatedFile = truncatedFiles.get(0); final int truncatedSegmentId = getSegmentId(truncatedFile); if (shouldApplyTruncatedSegment(logDir, truncatedFile, truncatedSegmentId)) { moveFile(truncatedFile.getAbsolutePath(), config.fileName(truncatedSegmentId)); } else { truncatedFiles.forEach(FileUtil::deleteFile); } } else if (truncatedApplicableFiles > 1) { throw new RuntimeException("Cannot open log storage: multiple truncated files detected"); } }
public boolean allocate(int segmentId, int segmentSize) { boolean allocated = false; try { final File file = new File(fileName); final long availableSpace = FileUtil.getAvailableSpace(file.getParentFile()); if (availableSpace > segmentSize) { openSegment(true); setSegmentId(segmentId); setCapacity(segmentSize); setSizeVolatile(METADATA_LENGTH); allocated = true; } } catch (Exception e) { LOG.error("Failed to allocate", e); } return allocated; }
private static void deleteSnapshots(final File parentDir) { final File snapshotDirectory = new File(parentDir, SNAPSHOTS_DIRECTORY); if (snapshotDirectory.exists()) { try { FileUtil.deleteFolder(snapshotDirectory.getAbsolutePath()); } catch (final IOException e) { throw new RuntimeException( "Could not delete snapshot directory " + snapshotDirectory.getAbsolutePath(), e); } } }
@Override public void abort() { FileUtil.closeSilently(dataOutputStream); FileUtil.deleteFile(dataFile); FileUtil.deleteFile(checksumFile); }
public void delete() { final File file = new File(fileName); FileUtil.deleteFile(file); }
@Override protected void onActorStarting() { LOG.debug( "Writing metrics to file {}. Reporting interval {}s.", filePath, reportingInterval.toMillis() / 1000); fileChannel = FileUtil.openChannel(filePath, true); actor.setPriority(ActorPriority.LOW); }
@Override public void validateAndClose() throws InvalidSnapshotException { final MessageDigest messageDigest = inputStream.getMessageDigest(); FileUtil.closeSilently(inputStream); final byte[] digestOfBytesRead = messageDigest.digest(); final boolean digestsEqual = Arrays.equals(digestOfBytesRead, checksum); if (!digestsEqual) { throw new InvalidSnapshotException("Read invalid snapshot, checksum doesn't match."); } }
@Override public void truncate(final long address) { ensureOpenedStorage(); final int segmentId = partitionId(address); final int segmentOffset = partitionOffset(address); addressCheck(segmentId, segmentOffset); truncateLogSegment(segmentId, segmentOffset); final String source = config.fileName(segmentId); final String backup = config.backupFileName(segmentId); final String truncated = config.truncatedFileName(segmentId); // move: segment.bak -> segment.bak.truncated moveFile(backup, truncated, REPLACE_EXISTING); // delete log segments in reverse order for (int i = currentSegment.getSegmentId(); segmentId <= i; i--) { final FsLogSegment segmentToDelete = logSegments.getSegment(i); segmentToDelete.closeSegment(); segmentToDelete.delete(); } // move: segment.bak.truncated -> segment moveFile(truncated, source, REPLACE_EXISTING); final String path = config.getPath(); final File logDir = new File(path); initLogSegments(logDir); }
private static void deleteSnapshots(final File parentDir) { final File snapshotDirectory = new File(parentDir, SNAPSHOTS_DIRECTORY); if (snapshotDirectory.exists()) { try { FileUtil.deleteFolder(snapshotDirectory.getAbsolutePath()); } catch (final IOException e) { throw new RuntimeException( "Could not delete snapshot directory " + snapshotDirectory.getAbsolutePath(), e); } } }