[ 
https://issues.apache.org/jira/browse/LUCENE-6770?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14737158#comment-14737158
 ] 

Uwe Schindler commented on LUCENE-6770:
---------------------------------------

Hi,

thansk for pointing to this. The additional lockFile.toRealPath() was added 
later during some more fixes in NativeFSLockFactory. So indeed the realPath 
call in FSDirectory may be unneccessary. But we wont fix this in a minor 
version. This needs a lot of good tests using symlinks.

For now I would just add more documentation to FSDirecory's ctor/open that 
explicitely states: "FSDirectory resolves the given Path in its constructor to 
a canonical path to ensure it can correctly lock the index directory and no 
other process can interfere with changing possible symlinks to the index 
directory inbetween. If you want to use symlinks and change them dynamically, 
close all IndexWriters and create a new FSDirecory instance."

> FSDirectory ctor should use getAbsolutePath instead of getRealPath for 
> directory
> --------------------------------------------------------------------------------
>
>                 Key: LUCENE-6770
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6770
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: core/store
>    Affects Versions: 5.2.1
>         Environment: OS X, Linux
>            Reporter: Vladimir Kuzmin
>            Assignee: Uwe Schindler
>         Attachments: LUCENE-6770.patch
>
>
> After upgrade from 4.1 to 5.2.1 I found that one of our test failed. Appeared 
> the guilty was FSDirectory that converts given Path to Path.getRealPath. As 
> result the test will fail:
> Path p = Paths.get("/var/lucene_store");
> FSDirectory d = new FSDirectory(p);
> assertEquals(p.toString(), d.getDirectory().toString());
> It because /var/lucene_store is a symlink and 
> Path directory =path.getRealPath(); 
> resolves it to /private/var/lucene_store
> I think this is bad design decision because "direcrory" isn't just internal 
> state but is exposed in a public interface and "getDirectory()" is widely 
> used to initialize other components. 
> It should use paths.getAbsolutePath() instead.
> build and "ant test" were successful after fix.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to