[
https://issues.apache.org/jira/browse/LUCENE-9138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17017864#comment-17017864
]
Adrien Grand commented on LUCENE-9138:
--------------------------------------
Your analysis sounds right to me. It looks we don't have similar warnings on
slice() because it doesn't need the current position of the input unlike
clone().
> Behaviour of concurrent calls to IndexInput#clone is unclear
> ------------------------------------------------------------
>
> Key: LUCENE-9138
> URL: https://issues.apache.org/jira/browse/LUCENE-9138
> Project: Lucene - Core
> Issue Type: Improvement
> Components: core/store
> Affects Versions: 8.4
> Reporter: David Turner
> Priority: Minor
>
> I think this is a documentation issue, rather than anything actually wrong,
> but need expert guidance to propose a fix.
> The Javadocs for {{IndexInput#clone}} warn that it is not thread safe:
> * <p>This method is NOT thread safe, so if the current \{@code IndexInput}
> * is being used by one thread while \{@code clone} is called by another,
> * disaster could strike.
> */
> @Override
> public IndexInput clone() {
>
> However, there are places where {{clone()}} may be called concurrently. For
> instance I believe {{SegmentReader#getFieldsReader}} clones an {{IndexInput}}
> and requires no extra synchronization. I think this comment is supposed to
> mean that you should not {{clone()}} an {{IndexInput}} while you're _reading
> or seeking from it_ concurrently, but the precise guarantees aren't totally
> clear.
>
> Furthermore there's no mention of the threadsafety of {{slice()}} and there
> seem to be similar concurrent usages of it in e.g.
> {{Lucene80DocValuesProducer}}. Does this have the same guarantees as
> {{clone()}}?
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]