[ 
https://issues.apache.org/jira/browse/LUCENE-2779?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shai Erera updated LUCENE-2779:
-------------------------------

    Attachment: LUCENE-2779.patch

Attached patch combines the changes to RAMDir and the changes to MockRAMDir 
under backwards.

I also made the map final, as Uwe suggested, but it means that on close() it 
cannot be nullified, so instead I clear()-ed it. I think it achieves the same 
goal - clearing the references to RAMFiles.

Also, what do you know, I've hit an AIOB exception thrown from listAll() when 
it called toArray() :). So I cloned the set of keys first, which protects 
against it. After the set is cloned, it's not affected by any changes to the 
map, and therefore toArray() works safely, and returns some point in time 
snapshot of the map. The "point in time" is not necessarily the one that 
existed when you called listAll(), but the cloned set becomes the "point in 
time" snapshot. I think it's ok.

I've hit it when running backwards tests (from TestIndexWriterExceptions), but 
not from core. Perhaps it was just a threading issue.

If you're ok w/ that, I'll make the same changes to trunk as well (making the 
map final and cloning the set).

All tests pass (this time, including backwards :)).

> Use ConcurrentHashMap in RAMDirectory
> -------------------------------------
>
>                 Key: LUCENE-2779
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2779
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Store
>            Reporter: Shai Erera
>            Assignee: Shai Erera
>            Priority: Minor
>             Fix For: 3.1, 4.0
>
>         Attachments: LUCENE-2779-backwardsfix.patch, LUCENE-2779.patch, 
> LUCENE-2779.patch, LUCENE-2779.patch, TestCHM.java
>
>
> RAMDirectory synchronizes on its instance in many places to protect access to 
> map of RAMFiles, in addition to updating the sizeInBytes member. In many 
> places the sync is done for 'read' purposes, while only in few places we need 
> 'write' access. This looks like a perfect use case for ConcurrentHashMap
> Also, syncing around sizeInBytes is unnecessary IMO, since it's an AtomicLong 
> ...
> I'll post a patch shortly.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to