<div dir="ltr">We&#39;ve observed an issue in SharedIndexWorkspaceImpl that appears to be a bug.<div><br></div><div style>within </div><div style>SharedIndexWorkspaceImpl#getIndexWriter()</div><div style>SharedIndexWorkspaceImpl#getIndexWriter(ErrorContextBuilder errorContextBuilder)<br>
</div><div style><br></div><div style>The openWritersUsers is incremented before an IndexWriter is successfully obtained. </div><div style><br></div><div style>We are seeing a scenario with two separate jvms writing to the same index where one process holds a lock long enough to cause a locktimeout and the second process fails to obtain an IndexWriter (yet it still increments the openWritersUsers).  Subsequent writes from the second process create a lock which is never closed due to openWriterUsers being &gt; 0.</div>
<div style><br></div><div style>Our fix:</div><div style><div><span class="" style="white-space:pre">        </span>@Override</div><div><span class="" style="white-space:pre">        </span>public IndexWriter getIndexWriter() {</div><div>
<span class="" style="white-space:pre">                </span>synchronized ( lock ) {</div><div><span class="" style="white-space:pre">                        </span>IndexWriter indexWriter = super.getIndexWriter();</div><div><span class="" style="white-space:pre">                        </span>if(indexWriter != null) {</div>
<div><span class="" style="white-space:pre">                                </span>openWriterUsers++;</div><div><span class="" style="white-space:pre">                        </span>}</div><div><span class="" style="white-space:pre">                        </span>return indexWriter;</div><div>
<span class="" style="white-space:pre">                </span>}</div><div><span class="" style="white-space:pre">        </span>}</div><div><br></div><div><span class="" style="white-space:pre">        </span>public IndexWriter getIndexWriter(ErrorContextBuilder errorContextBuilder) {</div>
<div><span class="" style="white-space:pre">                </span>synchronized ( lock ) {</div><div><span class="" style="white-space:pre">                        </span>IndexWriter indexWriter = super.getIndexWriter( errorContextBuilder );</div><div><span class="" style="white-space:pre">                        </span>if(indexWriter != null) {</div>
<div><span class="" style="white-space:pre">                                </span>openWriterUsers++;</div><div><span class="" style="white-space:pre">                        </span>}</div><div><span class="" style="white-space:pre">                        </span>return indexWriter;</div><div>
<span class="" style="white-space:pre">                </span>}</div><div><span class="" style="white-space:pre">        </span>}</div><div><br></div><div style>Thanks,</div><div style>Tobias</div></div></div>