Aleksey Plekhanov created IGNITE-16872:
------------------------------------------
Summary: 'Invalid cross-device link error' exception when
extending WAL segments size
Key: IGNITE-16872
URL: https://issues.apache.org/jira/browse/IGNITE-16872
Project: Ignite
Issue Type: Bug
Reporter: Aleksey Plekhanov
If required WAL segments size is more than current WAL segments size
(configuration changes) Ignite extend this size on startup (see
{{{}FileWriteAheadLogManager#formatWorkSegments{}}}). To do this each segment
copied to the new temp file, temp file is extended and temp file is moved to
the original segment file (using {{ATOMIC_MOVE}} option). But temp files are
created in the current work dir (\{{file().getName()}} used instead of
\{{file().getAbsolutePath()}}:
{code:java}
File tmpDst = new File(fd.file().getName() + TMP_SUFFIX);
{code}
And if WAL path is configured to another device there can be an exception
{{{}AtomicMoveNotSupportedException{}}}:
{noformat}
Caused by: java.nio.file.AtomicMoveNotSupportedException:
0000000000000000.wal.tmp ->
/opt/ignite/ssd/data/wal/consistentId/0000000000000000.wal: Invalid
cross-device link
at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:394) ~[?:1.8.0_321]
at
sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
~[?:1.8.0_321]
at java.nio.file.Files.move(Files.java:1395) ~[?:1.8.0_321]
at
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.formatWorkSegments(FileWriteAheadLogManager.java:3471){noformat}
We should create temp files in the same directory as WAL segments (on the same
device).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)