java.nio.file.AtomicMoveNotSupportedException Java Examples
The following examples show how to use
java.nio.file.AtomicMoveNotSupportedException.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Main.java From centraldogma with Apache License 2.0 | 6 votes |
void create() throws IOException { if (file.exists()) { throw new IllegalStateException("Failed to create a PID file. A file already exists: " + file.getPath()); } final int pid = SystemInfo.pid(); final Path temp = Files.createTempFile("central-dogma", ".tmp"); Files.write(temp, Integer.toString(pid).getBytes()); try { Files.move(temp, file.toPath(), StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { Files.move(temp, file.toPath()); } logger.debug("A PID file has been created: {}", file); }
Example #2
Source File: FileHelper.java From qpid-broker-j with Apache License 2.0 | 6 votes |
public Path atomicFileMoveOrReplace(Path sourceFile, Path targetFile) throws IOException { try { return Files.move(sourceFile, targetFile, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); } catch(AtomicMoveNotSupportedException e) { if (sourceFile.toFile().renameTo(targetFile.toFile())) { return targetFile; } else { throw new RuntimeException("Atomic move is unsupported and rename from : '" + sourceFile + "' to: '" + targetFile + "' failed."); } } }
Example #3
Source File: MCRFileSystemProvider.java From mycore with GNU General Public License v3.0 | 6 votes |
@Override public void move(Path source, Path target, CopyOption... options) throws IOException { HashSet<CopyOption> copyOptions = Sets.newHashSet(options); if (copyOptions.contains(StandardCopyOption.ATOMIC_MOVE)) { throw new AtomicMoveNotSupportedException(source.toString(), target.toString(), "ATOMIC_MOVE not supported yet"); } if (Files.isDirectory(source)) { MCRPath src = MCRFileSystemUtils.checkPathAbsolute(source); MCRDirectory srcRootDirectory = MCRFileSystemUtils.getFileCollection(src.getOwner()); if (srcRootDirectory.hasChildren()) { throw new IOException("Directory is not empty"); } } copy(source, target, options); delete(source); }
Example #4
Source File: MCRFileSystemProvider.java From mycore with GNU General Public License v3.0 | 6 votes |
@Override public void move(Path source, Path target, CopyOption... options) throws IOException { HashSet<CopyOption> copyOptions = Sets.newHashSet(options); if (copyOptions.contains(StandardCopyOption.ATOMIC_MOVE)) { throw new AtomicMoveNotSupportedException(source.toString(), target.toString(), "ATOMIC_MOVE not supported yet"); } if (Files.isDirectory(source)) { MCRPath src = MCRFileSystemUtils.checkPathAbsolute(source); MCRDirectory srcRootDirectory = getRootDirectory(src); if (srcRootDirectory.hasChildren()) { throw new IOException("Directory is not empty"); } } copy(source, target, options); delete(source); }
Example #5
Source File: FileBlobStoreIT.java From nexus-public with Eclipse Public License 1.0 | 6 votes |
@Test public void temporaryBlobMoveFallback() throws Exception { final byte[] content = new byte[TEST_DATA_LENGTH]; new Random().nextBytes(content); doThrow(new AtomicMoveNotSupportedException("", "", "")).when(fileOperations).moveAtomic(any(), any()); final Blob blob = underTest.create(new ByteArrayInputStream(content), TEST_HEADERS); verifyMoveOperations(blob); final byte[] output = extractContent(blob); assertThat("data must survive", content, is(equalTo(output))); final BlobMetrics metrics = blob.getMetrics(); assertThat("size must be calculated correctly", metrics.getContentSize(), is(equalTo((long) TEST_DATA_LENGTH))); }
Example #6
Source File: OutputFileWriter.java From zsync4j with BSD 3-Clause "New" or "Revised" License | 6 votes |
@Override public void close() throws IOException { try { this.channel.position(0); // reset channel to beginning to compute full SHA1 String calculatedSha1 = ZsyncUtil.computeSha1(this.channel); if (!this.sha1.equals(calculatedSha1)) { throw new ChecksumValidationIOException(this.sha1, calculatedSha1); } try { Files.move(this.tempPath, this.path, REPLACE_EXISTING, ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { Files.move(this.tempPath, this.path, REPLACE_EXISTING); } Files.setLastModifiedTime(this.path, fromMillis(this.mtime)); } finally { this.channel.close(); this.listener.close(); } }
Example #7
Source File: TestFileSwitchDirectory.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testRenameTmpFile() throws IOException { try (Directory directory = getDirectory(createTempDir())) { final String name; try (IndexOutput out = directory.createTempOutput("foo.cfs", "", IOContext.DEFAULT)) { out.writeInt(1); name = out.getName(); } assertEquals(1, Arrays.stream(directory.listAll()).filter(f -> f.equals(name)).count()); assertEquals(0, Arrays.stream(directory.listAll()).filter(f -> f.equals("foo.cfs")).count()); directory.rename(name, "foo.cfs"); assertEquals(1, Arrays.stream(directory.listAll()).filter(f -> f.equals("foo.cfs")).count()); assertEquals(0, Arrays.stream(directory.listAll()).filter(f -> f.equals(name)).count()); } try (Directory directory= newFSSwitchDirectory(Collections.singleton("bar"))) { String brokenName; try (IndexOutput out = directory.createTempOutput("foo", "bar", IOContext.DEFAULT)) { out.writeInt(1); brokenName = out.getName(); } AtomicMoveNotSupportedException exception = expectThrows(AtomicMoveNotSupportedException.class, () -> directory.rename(brokenName, "foo.bar")); assertEquals("foo_bar_0.tmp -> foo.bar: source and dest are in different directories", exception.getMessage()); } }
Example #8
Source File: StandardDirectoryFactory.java From lucene-solr with Apache License 2.0 | 6 votes |
/** * Override for more efficient moves. * * Intended for use with replication - use * carefully - some Directory wrappers will * cache files for example. * * You should first {@link Directory#sync(java.util.Collection)} any file that will be * moved or avoid cached files through settings. * * @throws IOException * If there is a low-level I/O error. */ @Override public void move(Directory fromDir, Directory toDir, String fileName, IOContext ioContext) throws IOException { Directory baseFromDir = getBaseDir(fromDir); Directory baseToDir = getBaseDir(toDir); if (baseFromDir instanceof FSDirectory && baseToDir instanceof FSDirectory) { Path path1 = ((FSDirectory) baseFromDir).getDirectory().toAbsolutePath(); Path path2 = ((FSDirectory) baseToDir).getDirectory().toAbsolutePath(); try { Files.move(path1.resolve(fileName), path2.resolve(fileName), StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { Files.move(path1.resolve(fileName), path2.resolve(fileName)); } return; } super.move(fromDir, toDir, fileName, ioContext); }
Example #9
Source File: StandardDirectoryFactory.java From lucene-solr with Apache License 2.0 | 6 votes |
public void renameWithOverwrite(Directory dir, String fileName, String toName) throws IOException { Directory baseDir = getBaseDir(dir); if (baseDir instanceof FSDirectory) { Path path = ((FSDirectory) baseDir).getDirectory().toAbsolutePath(); try { Files.move(path.resolve(fileName), path.resolve(toName), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); } catch (AtomicMoveNotSupportedException e) { Files.move(FileSystems.getDefault().getPath(path.toString(), fileName), FileSystems.getDefault().getPath(path.toString(), toName), StandardCopyOption.REPLACE_EXISTING); } } else { super.renameWithOverwrite(dir, fileName, toName); } }
Example #10
Source File: ConfigManager.java From runelite with BSD 2-Clause "Simplified" License | 6 votes |
private void saveToFile(final File propertiesFile) throws IOException { File parent = propertiesFile.getParentFile(); parent.mkdirs(); File tempFile = new File(parent, RuneLite.DEFAULT_CONFIG_FILE.getName() + ".tmp"); try (FileOutputStream out = new FileOutputStream(tempFile)) { out.getChannel().lock(); properties.store(new OutputStreamWriter(out, StandardCharsets.UTF_8), "RuneLite configuration"); // FileOutputStream.close() closes the associated channel, which frees the lock } try { Files.move(tempFile.toPath(), propertiesFile.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException ex) { log.debug("atomic move not supported", ex); Files.move(tempFile.toPath(), propertiesFile.toPath(), StandardCopyOption.REPLACE_EXISTING); } }
Example #11
Source File: FileBasedObjectStore.java From brooklyn-server with Apache License 2.0 | 6 votes |
/** * Attempts an fs level atomic move then fall back to pure java rename. * Assumes files are on same mount point. * Overwriting existing destFile */ static void moveFile(File srcFile, File destFile) throws IOException, InterruptedException { if (destFile.isDirectory()) { deleteCompletely(destFile); } try { Files.move(srcFile.toPath(), destFile.toPath(), StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { if (!WARNED_ON_NON_ATOMIC_FILE_UPDATES) { WARNED_ON_NON_ATOMIC_FILE_UPDATES = true; log.warn("Unable to perform atomic file update ("+srcFile+" to "+destFile+"); file system not recommended for production HA/DR"); } Files.move(srcFile.toPath(), destFile.toPath(), StandardCopyOption.REPLACE_EXISTING); } if (log.isTraceEnabled()) { log.trace("Completly moved from {} to {} completed", new Object[] { srcFile, destFile }); } }
Example #12
Source File: SimpleFileOperations.java From nexus-public with Eclipse Public License 1.0 | 6 votes |
@Override public void copyIfLocked(final Path source, final Path target, final Mover mover) throws IOException { checkNotNull(source); checkNotNull(target); try { mover.accept(source, target); } catch (AtomicMoveNotSupportedException atomicMoveNotSupported) { throw atomicMoveNotSupported; } catch (FileSystemException e) { // NOSONAR // Windows can throw a FileSystemException on move or moveAtomic // if the file is in use; in this case, copy and attempt to delete // source log.warn("Using copy to move {} to {}", source, target); copy(source, target); try { delete(source); } catch (IOException deleteException) { // NOSONAR log.error("Unable to delete {} after move: {}", source, deleteException.getMessage()); } } }
Example #13
Source File: AtomicWriter.java From InflatableDonkey with MIT License | 5 votes |
static void move(Path source, Path target) throws IOException { try { Files.move(source, target, ATOMIC_MOVE, REPLACE_EXISTING); } catch (AtomicMoveNotSupportedException ex) { logger.debug(shortError, "-- move() - fallback, atomic move not supported: ", ex); Files.move(source, target, REPLACE_EXISTING); } }
Example #14
Source File: SimpleFileOperations.java From nexus-public with Eclipse Public License 1.0 | 5 votes |
@Override public void overwriteAtomic(final Path source, final Path target) throws IOException { checkNotNull(source); checkNotNull(target); DirectoryHelper.mkdir(target.getParent()); try { Files.move(source, target, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); } catch (UnsupportedOperationException e) { // NOSONAR throw new AtomicMoveNotSupportedException(source.toString(), target.toString(), e.getMessage()); } }
Example #15
Source File: FileSnapshot.java From atomix with Apache License 2.0 | 5 votes |
private void persistTemporaryFile() throws IOException { final Path temporaryPath = file.temporaryFile().toPath(); final Path persistedPath = file.file().toPath(); try { Files.move(temporaryPath, persistedPath, StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { try { Files.move(temporaryPath, persistedPath); } catch (FileAlreadyExistsException ignored) { LOGGER.debug("Snapshot {} was already previously completed", this); } } }
Example #16
Source File: FileUtils.java From stratio-cassandra with Apache License 2.0 | 5 votes |
/** * Move a file atomically, if it fails, it falls back to a non-atomic operation * @param from * @param to * @throws IOException */ private static void atomicMoveWithFallback(Path from, Path to) throws IOException { try { Files.move(from, to, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { logger.debug("Could not do an atomic move", e); Files.move(from, to, StandardCopyOption.REPLACE_EXISTING); } }
Example #17
Source File: ServerFileImpl.java From saros with GNU General Public License v2.0 | 5 votes |
@Override public void setContents(InputStream input) throws IOException { /* * We write the new contents to a temporary file first, then move that * file atomically to this file's location. This ensures that * setContents() as a whole is atomic: should something go wrong, the * file either has the old or new content, but never anything in * between. Similarly, the stream returned by getContents() will never * observe an inconsistent state while a setContents() is in progress. * * On Windows, this technique has the additional benefit of not having * to open the "real" file, thus not locking it during the write. */ Path tempFilePath = Files.createTempFile(getName(), null); if (input != null) { Files.copy(input, tempFilePath, StandardCopyOption.REPLACE_EXISTING); } try { Files.move( tempFilePath, toNioPath(), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); } catch (AtomicMoveNotSupportedException e) { Files.move(tempFilePath, toNioPath(), StandardCopyOption.REPLACE_EXISTING); } }
Example #18
Source File: UnixSshFileSystemProvider.java From jsch-nio with MIT License | 5 votes |
public void copyOrMove( String cpOrMv, Path from, Path to, CopyOption... copyOptions ) throws IOException { UnixSshPath unixFrom = checkPath( from ); UnixSshPath unixTo = checkPath( to ); Set<CopyOption> options = toSet( copyOptions ); if ( options.contains( StandardCopyOption.ATOMIC_MOVE ) ) { throw new AtomicMoveNotSupportedException( from.toString(), to.toString(), "to complicated to think about right now, try again at a later release." ); } BasicFileAttributesImpl fromAttributes = new BasicFileAttributesImpl( unixFrom ); if ( exists( unixTo ) ) { PosixFileAttributesImpl toAttributes = new PosixFileAttributesImpl( unixTo ); if ( fromAttributes.isSameFile( toAttributes ) ) return; if ( options.contains( StandardCopyOption.REPLACE_EXISTING ) ) { delete( unixTo, toAttributes ); } else { throw new FileAlreadyExistsException( to.toString() ); } } String command = unixFrom.getFileSystem().getCommand( cpOrMv ) + " " + unixFrom.toAbsolutePath().quotedString() + " " + unixTo.toAbsolutePath().quotedString(); executeForStdout( unixTo, command ); }
Example #19
Source File: FileRenameAction.java From logging-log4j2 with Apache License 2.0 | 5 votes |
private static boolean moveFile(Path source, Path target) throws IOException { try { Files.move(source, target, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); LOGGER.trace("Renamed file {} to {} with Files.move", source.toFile().getAbsolutePath(), target.toFile().getAbsolutePath()); return true; } catch (final AtomicMoveNotSupportedException ex) { Files.move(source, target, StandardCopyOption.REPLACE_EXISTING); LOGGER.trace("Renamed file {} to {} with Files.move", source.toFile().getAbsolutePath(), target.toFile().getAbsolutePath()); return true; } }
Example #20
Source File: FileBlobStoreIT.java From nexus-public with Eclipse Public License 1.0 | 5 votes |
@Test public void temporaryBlobMoveFallbackPersists() throws Exception { final byte[] content = new byte[TEST_DATA_LENGTH]; new Random().nextBytes(content); doThrow(new AtomicMoveNotSupportedException("", "", "")).when(fileOperations).moveAtomic(any(), any()); underTest.create(new ByteArrayInputStream(content), TEST_HEADERS); underTest.create(new ByteArrayInputStream(content), TEST_HEADERS); verify(fileOperations, times(1)).moveAtomic(any(), any()); verify(fileOperations, times(4)).move(any(), any()); }
Example #21
Source File: FileBlobStore.java From nexus-public with Eclipse Public License 1.0 | 5 votes |
private void overwrite(final Path source, final Path target) throws IOException { if (supportsAtomicMove) { try { fileOperations.copyIfLocked(source, target, fileOperations::overwriteAtomic); return; } catch (AtomicMoveNotSupportedException e) { // NOSONAR supportsAtomicMove = false; log.warn("Disabling atomic moves for blob store {}, could not overwrite {} with {}, reason deleted: {}", blobStoreConfiguration.getName(), source, target, e.getReason()); } } log.trace("Using normal overwrite for blob store {}, overwriting {} with {}", blobStoreConfiguration.getName(), source, target); fileOperations.copyIfLocked(source, target, fileOperations::overwrite); }
Example #22
Source File: FileBlobStore.java From nexus-public with Eclipse Public License 1.0 | 5 votes |
private void move(final Path source, final Path target) throws IOException { if (supportsAtomicMove) { try { fileOperations.copyIfLocked(source, target, fileOperations::moveAtomic); return; } catch (AtomicMoveNotSupportedException e) { // NOSONAR supportsAtomicMove = false; log.warn("Disabling atomic moves for blob store {}, could not move {} to {}, reason deleted: {}", blobStoreConfiguration.getName(), source, target, e.getReason()); } } log.trace("Using normal move for blob store {}, moving {} to {}", blobStoreConfiguration.getName(), source, target); fileOperations.copyIfLocked(source, target, fileOperations::move); }
Example #23
Source File: SimpleFileOperations.java From nexus-public with Eclipse Public License 1.0 | 5 votes |
@Override public void moveAtomic(final Path source, final Path target) throws IOException { checkNotNull(source); checkNotNull(target); DirectoryHelper.mkdir(target.getParent()); try { Files.move(source, target, StandardCopyOption.ATOMIC_MOVE); } catch (UnsupportedOperationException e) { // NOSONAR throw new AtomicMoveNotSupportedException(source.toString(), target.toString(), e.getMessage()); } }
Example #24
Source File: FileSwitchDirectory.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public void rename(String source, String dest) throws IOException { Directory sourceDir = getDirectory(source); // won't happen with standard lucene index files since pending and commit will // always have the same extension ("") if (sourceDir != getDirectory(dest)) { throw new AtomicMoveNotSupportedException(source, dest, "source and dest are in different directories"); } sourceDir.rename(source, dest); }
Example #25
Source File: MCRDirectoryStream.java From mycore with GNU General Public License v3.0 | 5 votes |
@Override public void move(Path srcpath, SecureDirectoryStream<Path> targetdir, Path targetpath) throws IOException { checkClosed(); checkFileSystem(srcpath); checkFileSystem(targetpath); throw new AtomicMoveNotSupportedException(srcpath.toString(), targetpath.toString(), "Currently not implemented"); }
Example #26
Source File: AnnotatedConfig.java From Velocity with MIT License | 5 votes |
/** * Writes list of strings to file. * * @param lines list of strings to write * @param to Path of file where lines should be written * @throws IOException if error occurred during writing * @throws IllegalArgumentException if <pre>lines</pre> is empty list */ public static void saveConfig(List<String> lines, Path to) throws IOException { if (lines.isEmpty()) { throw new IllegalArgumentException("lines cannot be empty"); } Path temp = to.toAbsolutePath().getParent().resolve(to.getFileName().toString() + "__tmp"); Files.write(temp, lines, StandardCharsets.UTF_8, StandardOpenOption.CREATE); try { Files.move(temp, to, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); } catch (AtomicMoveNotSupportedException e) { Files.move(temp, to, StandardCopyOption.REPLACE_EXISTING); } }
Example #27
Source File: Utils.java From sofa-jraft with Apache License 2.0 | 4 votes |
@SuppressWarnings("ConstantConditions") public static boolean atomicMoveFile(final File source, final File target) throws IOException { // Move temp file to target path atomically. // The code comes from https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/util/AtomicFileWriter.java#L187 Requires.requireNonNull(source, "source"); Requires.requireNonNull(target, "target"); final Path sourcePath = source.toPath(); final Path targetPath = target.toPath(); try { return Files.move(sourcePath, targetPath, StandardCopyOption.ATOMIC_MOVE) != null; } catch (final IOException e) { // If it falls here that can mean many things. Either that the atomic move is not supported, // or something wrong happened. Anyway, let's try to be over-diagnosing if (e instanceof AtomicMoveNotSupportedException) { LOG.warn("Atomic move not supported. falling back to non-atomic move, error: {}.", e.getMessage()); } else { LOG.warn("Unable to move atomically, falling back to non-atomic move, error: {}.", e.getMessage()); } if (target.exists()) { LOG.info("The target file {} was already existing.", targetPath); } try { return Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING) != null; } catch (final IOException e1) { e1.addSuppressed(e); LOG.warn("Unable to move {} to {}. Attempting to delete {} and abandoning.", sourcePath, targetPath, sourcePath); try { Files.deleteIfExists(sourcePath); } catch (final IOException e2) { e2.addSuppressed(e1); LOG.warn("Unable to delete {}, good bye then!", sourcePath); throw e2; } throw e1; } } }