You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksey Plekhanov (Jira)" <ji...@apache.org> on 2022/04/18 14:55:00 UTC

[jira] [Updated] (IGNITE-16872) 'Invalid cross-device link error' exception when extending WAL segments size

     [ https://issues.apache.org/jira/browse/IGNITE-16872?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aleksey Plekhanov updated IGNITE-16872:
---------------------------------------
    Description: 
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).

  was:
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).


> '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
>            Priority: Major
>
> 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)