apache / apache/lucene

Lucene test cases do not properly close input and output instances [LUCENE-3067]

Open
#4,140 3 comments 0 reactions 0 assignees View on GitHub
affects-version:3.1 affects-version:4.0-ALPHA legacy-jira-priority:Minor tool:build type:bug type:test
Dominant language
Java
Stars
3.6k
Forks
1.4k
Avg merge
2d 11h
Merged PRs (30d)
88

Description

The Lucene tests do not take care to close all file handles. Unless I am missing something, every single instance of Directory, IndexReader, IndexWriter, IndexSearcher, TermPositions, etc. should be wrapped with a try-finally pattern, such that the instance is always closed. Not doing so risks leaving files open, depending on the GC behavior. I believe this causes tests to fail with a "could not delete" exception, inconsistently. I at least observe this on a fast machine with Windows, where deletion is a little more sensitive to open handles. It seems dangerous and undesirable, anyway (again, unless I am missing something). I don't know of another pattern in Java that would actually be safe.

Some of these objects may just happen to be safe to let dangle in the wind, until the GC reaps, but by the contracts that really can't be allowed. The close methods need to be called to release resources.

Fixing this **appears** to alleviate the test failures, but it is hard to tell due to the nondeterministic behavior. I am reluctant to make up the whole patch if this is inaccurate - it is somewhat tedious. The classes involved can be instrumented to expose this problem. (In particular, I would imagine that the finalizer should never be reached without the close() methods being previously invoked.)

---
Migrated from [LUCENE-3067](https://issues.apache.org/jira/browse/LUCENE-3067) by Robert Ragno (@rragno), updated Nov 24 2011

Contributor guide

Open the contributing guide

Research direction

Start by inventorying the Lucene tests and resource types named in the issue, including Directory, IndexReader, IndexWriter, IndexSearcher, and TermPositions. Reproduce the intermittent Windows deletion failure if possible, then verify that every opened resource is closed reliably and that the relevant tests no longer leave file handles open.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
search
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.