You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Jeff Miller (JIRA)" <ji...@apache.org> on 2018/04/17 22:16:00 UTC

[jira] [Created] (SOLR-12232) NativeFSLockFactory loses the channel when a thread is interrupted and the SolrCore becomes unusable after

Jeff Miller created SOLR-12232:
----------------------------------

             Summary: NativeFSLockFactory loses the channel when a thread is interrupted and the SolrCore becomes unusable after
                 Key: SOLR-12232
                 URL: https://issues.apache.org/jira/browse/SOLR-12232
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
    Affects Versions: 7.1.1
            Reporter: Jeff Miller


The condition is rare for us and seems basically a race.  If a thread that is running just happens to have the FileChannel open for NativeFSLockFactory and is interrupted, the channel is closed since it extends [AbstractInterruptibleChannel|https://docs.oracle.com/javase/7/docs/api/java/nio/channels/spi/AbstractInterruptibleChannel.html]

Unfortunately this means the Solr Core has to be unloaded and reopened to make the core usable again as the ensureValid check forever throws an exception after.

org.apache.lucene.store.AlreadyClosedException: FileLock invalidated by an external force: NativeFSLock(path=data/index/write.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive invalid],creationTime=2018-04-06T21:45:11Z) at org.apache.lucene.store.NativeFSLockFactory$NativeFSLock.ensureValid(NativeFSLockFactory.java:178) at org.apache.lucene.store.LockValidatingDirectoryWrapper.createOutput(LockValidatingDirectoryWrapper.java:43) at org.apache.lucene.store.TrackingDirectoryWrapper.createOutput(TrackingDirectoryWrapper.java:43) at org.apache.lucene.codecs.compressing.CompressingStoredFieldsWriter.<init>(CompressingStoredFieldsWriter.java:113) at org.apache.lucene.codecs.compressing.CompressingStoredFieldsFormat.fieldsWriter(CompressingStoredFieldsFormat.java:128) at org.apache.lucene.codecs.lucene50.Lucene50StoredFieldsFormat.fieldsWriter(Lucene50StoredFieldsFormat.java:183)

 

Proposed solution is using AsynchronousFileChannel instead, since this is only operating on a lock and .size method



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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