@Override protected File dir() { return dir.getDir(); }
private void deleteFiles(FilenameFilter overflowFileFilter) { for (final DirectoryHolder directory : this.directories) { File[] files = directory.getDir().listFiles(overflowFileFilter); if (files != null) { for (File file : files) { boolean deleted = file.delete(); if (!deleted && file.exists() && logger.isDebugEnabled()) { logger.debug("Could not delete file {}", file); } } } } }
private int getArrayIndexOfDirectory(File searchDir) { for (DirectoryHolder holder : directories) { if (holder.getDir().equals(searchDir)) { return holder.getArrayIndex(); } } return 0; }
public Map<File, DirectoryHolder> findFiles(String partialFileName) { this.dirCounter = 0; Map<File, DirectoryHolder> backupFiles = new HashMap<File, DirectoryHolder>(); FilenameFilter backupFileFilter = getFileNameFilter(partialFileName); for (DirectoryHolder dh : parent.directories) { File[] backupList = dh.getDir().listFiles(backupFileFilter); if (backupList != null) { for (File f : backupList) { backupFiles.put(f, dh); } } } return backupFiles; }
public String toString() { StringBuffer sb = new StringBuffer(); sb.append("dir=").append(getDir()).append(" maxSpace=").append(getCapacity()) .append(" usedSpace=").append(getUsedSpace()).append(" availableSpace=") .append(getAvailableSpace()); return sb.toString(); }
/** * Provides, and creates if necessary, the temporary directory used during the backup for Oplog * files for the given DiskStore and DirectoryHolder * * @param diskStore The corresponding {@link DiskStore} to get a temporary directory for * @param dirHolder The disk directory of the {@link DiskStore} to get a temporary directory for * @return Path to the temporary directory * @throws IOException If the temporary directory did not exist and could not be created */ Path getDiskStoreDirectory(DiskStore diskStore, DirectoryHolder dirHolder) throws IOException { Map<DirectoryHolder, Path> tempDirByDirectoryHolder = diskStoreDirDirsByDiskStore.computeIfAbsent(diskStore, k -> new HashMap<>()); Path directory = tempDirByDirectoryHolder.get(dirHolder); if (directory != null) { return directory; } File diskStoreDir = dirHolder.getDir(); directory = diskStoreDir.toPath().resolve(diskStoreDirectoryName); Files.createDirectories(directory); tempDirByDirectoryHolder.put(dirHolder, directory); return directory; }
private void cleanupOrphanedBackupDirectories() { for (DirectoryHolder directoryHolder : getDirectoryHolders()) { try { List<Path> backupDirectories; // Make sure we close the stream's resources try (Stream<Path> stream = Files.list(directoryHolder.getDir().toPath())) { backupDirectories = stream .filter((path) -> path.getFileName().toString() .startsWith(BackupService.TEMPORARY_DIRECTORY_FOR_BACKUPS)) .filter(p -> Files.isDirectory(p)).collect(Collectors.toList()); } for (Path backupDirectory : backupDirectories) { try { logger.info("Deleting orphaned backup temporary directory: " + backupDirectory); FileUtils.deleteDirectory(backupDirectory.toFile()); } catch (IOException e) { logger.warn("Failed to remove orphaned backup temporary directory: " + backupDirectory, e); } } } catch (IOException e) { logger.warn(e); } } }
@Override protected void handleStateChange(DiskState next, String pct, String criticalMessage) { if (_testAction != null) { logger.info(LogMarker.DISK_STORE_MONITOR_MARKER, "Invoking test handler for state change to {}", next); _testAction.handleDiskStateChange(next); } Object[] args = new Object[] {dir.getDir(), disk.getName(), pct}; switch (next) { case NORMAL: logger.warn(LogMarker.DISK_STORE_MONITOR_MARKER, "The disk volume {} for disk store {} has returned to normal usage levels and is {} full", args); break; case WARN: logger.warn(LogMarker.DISK_STORE_MONITOR_MARKER, "The disk volume {} for disk store {} has exceeded the warning usage threshold and is {} full", args); break; case CRITICAL: logger.error(LogMarker.DISK_STORE_MONITOR_MARKER, "The disk volume {} for disk store {} has exceeded the critical usage threshold and is {} full", args); String msg = "Critical disk usage threshold exceeded for volume " + dir.getDir().getAbsolutePath() + ": " + criticalMessage; disk.handleDiskAccessException(new DiskAccessException(msg, disk)); break; } }
private void addDiskStoreDirectoriesToRestoreScript(DiskStoreImpl diskStore, File targetDir, RestoreScript restoreScript) { DirectoryHolder[] directories = diskStore.getDirectoryHolders(); for (int i = 0; i < directories.length; i++) { File backupDir = getBackupDirForCurrentMember(targetDir, i); restoreScript.addFile(directories[i].getDir(), backupDir); } }
@Before public void setup() throws IOException { baseTempDirectory = tempDir.newFolder().toPath(); backupFiles = new TemporaryBackupFiles(baseTempDirectory, DISK_STORE_DIR_NAME); diskStore = mock(DiskStore.class); directoryHolder = mock(DirectoryHolder.class); when(directoryHolder.getDir()).thenReturn(baseTempDirectory.resolve("dir1").toFile()); }
@Test public void returnsCreatedDirectoryForADiskStore() throws IOException { Path diskStoreDir = backupFiles.getDiskStoreDirectory(diskStore, directoryHolder); assertThat(diskStoreDir) .isEqualTo(directoryHolder.getDir().toPath().resolve(DISK_STORE_DIR_NAME)); assertThat(diskStoreDir).exists(); }
public PersistentMemberID generatePersistentID(DiskRegionView dr) { File firstDir = getInfoFileDir().getDir(); InternalDistributedSystem ids = getCache().getInternalDistributedSystem(); InternalDistributedMember memberId = ids.getDistributionManager().getDistributionManagerId(); // NOTE - do NOT use DM.cacheTimeMillis here. See bug #49920 long timestamp = System.currentTimeMillis(); return new PersistentMemberID(getDiskStoreID(), memberId.getInetAddress(), firstDir.getAbsolutePath(), memberId.getName(), timestamp, (short) 0); }
@Test public void cleansUpAllTemporaryDirectories() throws IOException { DirectoryHolder directoryHolder2 = mock(DirectoryHolder.class); when(directoryHolder2.getDir()).thenReturn(baseTempDirectory.resolve("dir2").toFile()); Path diskStoreDir = backupFiles.getDiskStoreDirectory(diskStore, directoryHolder); Path diskStoreDir2 = backupFiles.getDiskStoreDirectory(diskStore, directoryHolder2); backupFiles.cleanupFiles(); assertThat(baseTempDirectory).doesNotExist(); assertThat(diskStoreDir).doesNotExist(); assertThat(diskStoreDir2).doesNotExist(); } }
DiskInitFile(String name, DiskStoreImpl parent, boolean shouldExist, Set<File> oplogs) { this.parent = parent; File f = new File(this.parent.getInfoFileDir().getDir(), "BACKUP" + name + IF_FILE_EXT); final boolean didNotExist = !f.exists(); if (shouldExist && didNotExist) {
this.diskFile = new File(this.dirHolder.getDir(), "OVERFLOW" + n + "_" + oplogId); try { createCrf(parent.getActiveOverflowOplog());
this.diskFile = new File(this.dirHolder.getDir(), oplogSet.getPrefix() + n + "_" + oplogId); try { createDrf(null);
this.diskFile = new File(this.dirHolder.getDir(), oplogSet.getPrefix() + n + "_" + oplogId); try { createDrf(prevOplog.drf);
String ifName = "BACKUP" + name + DiskInitFile.IF_FILE_EXT; for (DirectoryHolder dh : this.directories) { File f = new File(dh.getDir(), ifName); if (f.exists()) { if (foundIfFile) {