Return-Path: Delivered-To: apmail-lucene-dev-archive@www.apache.org Received: (qmail 85686 invoked from network); 28 Nov 2010 17:10:03 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 28 Nov 2010 17:10:03 -0000 Received: (qmail 1061 invoked by uid 500); 28 Nov 2010 17:10:01 -0000 Delivered-To: apmail-lucene-dev-archive@lucene.apache.org Received: (qmail 1022 invoked by uid 500); 28 Nov 2010 17:10:01 -0000 Mailing-List: contact dev-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list dev@lucene.apache.org Received: (qmail 1015 invoked by uid 99); 28 Nov 2010 17:10:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 28 Nov 2010 17:10:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.22] (HELO thor.apache.org) (140.211.11.22) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 28 Nov 2010 17:09:59 +0000 Received: from thor (localhost [127.0.0.1]) by thor.apache.org (8.13.8+Sun/8.13.8) with ESMTP id oASH9bHb004393 for ; Sun, 28 Nov 2010 17:09:37 GMT Message-ID: <27627945.7841290964177602.JavaMail.jira@thor> Date: Sun, 28 Nov 2010 12:09:37 -0500 (EST) From: "Yonik Seeley (JIRA)" To: dev@lucene.apache.org Subject: [jira] Commented: (LUCENE-2779) Use ConcurrentHashMap in RAMDirectory In-Reply-To: <10750696.314731290706214515.JavaMail.jira@thor> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/LUCENE-2779?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12964575#action_12964575 ] Yonik Seeley commented on LUCENE-2779: -------------------------------------- bq. I checked CHM iterators and they are safe w.r.t the map being modified after the iterator was obtained. Yes, but that wasn't the problem. The iterator for ketSet "guarantees to traverse elements as they existed upon construction of the iterator". The real problem is that the String[] is created based on the size of the keySet, and then later, an iterator is created over the keySet. If an addition to the set is done between those two events, the iterator will traverse more elements than there is room for - hence the AIOB exception. bq. About remove I'll have to look in the code (not near the comp now) - but I had a feeling that it is safe too, b/c the file is first removed, The createOutput issue is that get() was used (not remove) so multiple threads could overwrite the same file and all of them subtract the size. > 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.patch > > > 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: dev-unsubscribe@lucene.apache.org For additional commands, e-mail: dev-help@lucene.apache.org