[
https://issues.apache.org/jira/browse/SOLR-9859?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15751827#comment-15751827
]
Mark Miller commented on SOLR-9859:
-----------------------------------
bq. Is there a way we can write a temp file and do a mv to rename/overwrite
replication.properties
Nothing great. Java 7 gives us an atomic move that can overwrite an existing
file, but it's impl dependent on if that is supported and it wouldn't work for
the arbitrary FileSystem's we support. We would still need some start up logic
that could address a crashed state.
bq. Alternate solution would be to keep appending to existing file and read the
latest stats from the file.
The problem is we use this same strategy for index.properties which is not so
straightforward to do this way.
bq. I think we can simply delete the exist replication.properties before write
a new one.
That is the easy fix I mention above, but it's fragile, and like
index.properties, not robust in a crash.
> replication.properties does not get updated the second time around if index
> recovers via replication
> ----------------------------------------------------------------------------------------------------
>
> Key: SOLR-9859
> URL: https://issues.apache.org/jira/browse/SOLR-9859
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Affects Versions: 5.5.3, 6.3
> Reporter: Pushkar Raste
> Assignee: Mark Miller
> Priority: Minor
> Attachments: SOLR-9859.patch
>
>
> If a shard recovers via replication (vs PeerSync) a file named
> {{replication.properties}} gets created. If the same shard recovers once more
> via replication, IndexFetcher fails to write latest replication information
> as it tries to create {{replication.properties}} but as file already exists.
> Here is the stack trace I saw
> {code}
> java.nio.file.FileAlreadyExistsException:
> <solr_home>\shard-3-001\cores\collection1\data\replication.properties
> at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
> at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
> at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
> at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source)
> at java.nio.file.spi.FileSystemProvider.newOutputStream(Unknown Source)
> at java.nio.file.Files.newOutputStream(Unknown Source)
> at
> org.apache.lucene.store.FSDirectory$FSIndexOutput.<init>(FSDirectory.java:413)
> at
> org.apache.lucene.store.FSDirectory$FSIndexOutput.<init>(FSDirectory.java:409)
> at
> org.apache.lucene.store.FSDirectory.createOutput(FSDirectory.java:253)
> at
> org.apache.solr.handler.IndexFetcher.logReplicationTimeAndConfFiles(IndexFetcher.java:689)
> at
> org.apache.solr.handler.IndexFetcher.fetchLatestIndex(IndexFetcher.java:501)
> at
> org.apache.solr.handler.IndexFetcher.fetchLatestIndex(IndexFetcher.java:265)
> at
> org.apache.solr.handler.ReplicationHandler.doFetch(ReplicationHandler.java:397)
> at
> org.apache.solr.cloud.RecoveryStrategy.replicate(RecoveryStrategy.java:157)
> at
> org.apache.solr.cloud.RecoveryStrategy.doRecovery(RecoveryStrategy.java:409)
> at org.apache.solr.cloud.RecoveryStrategy.run(RecoveryStrategy.java:222)
> at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at
> org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$0(ExecutorUtil.java:229)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]