Return-Path: Delivered-To: apmail-lucene-solr-commits-archive@minotaur.apache.org Received: (qmail 4169 invoked from network); 20 Mar 2010 14:57:53 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 20 Mar 2010 14:57:53 -0000 Received: (qmail 48822 invoked by uid 500); 20 Mar 2010 14:57:53 -0000 Delivered-To: apmail-lucene-solr-commits-archive@lucene.apache.org Received: (qmail 48796 invoked by uid 500); 20 Mar 2010 14:57:53 -0000 Mailing-List: contact solr-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: solr-dev@lucene.apache.org Delivered-To: mailing list solr-commits@lucene.apache.org Received: (qmail 48789 invoked by uid 99); 20 Mar 2010 14:57:53 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 20 Mar 2010 14:57:53 +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.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 20 Mar 2010 14:57:50 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 40F0F238896F; Sat, 20 Mar 2010 14:57:29 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r925620 - in /lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core: RAMDirectoryFactory.java RefCntRamDirectory.java Date: Sat, 20 Mar 2010 14:57:29 -0000 To: solr-commits@lucene.apache.org From: markrmiller@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100320145729.40F0F238896F@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: markrmiller Date: Sat Mar 20 14:57:28 2010 New Revision: 925620 URL: http://svn.apache.org/viewvc?rev=925620&view=rev Log: Change to RefCntRamDirectory rather than RamDirectory Added: lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RefCntRamDirectory.java Modified: lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RAMDirectoryFactory.java Modified: lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RAMDirectoryFactory.java URL: http://svn.apache.org/viewvc/lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RAMDirectoryFactory.java?rev=925620&r1=925619&r2=925620&view=diff ============================================================================== --- lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RAMDirectoryFactory.java (original) +++ lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RAMDirectoryFactory.java Sat Mar 20 14:57:28 2010 @@ -29,15 +29,17 @@ import java.util.HashMap; * Directory provider for using lucene RAMDirectory */ public class RAMDirectoryFactory extends StandardDirectoryFactory { - private Map directories = new HashMap(); + private Map directories = new HashMap(); @Override public Directory open(String path) throws IOException { synchronized (this) { - Directory directory = directories.get(path); - if (directory == null) { - directory = openNew(path); + RefCntRamDirectory directory = directories.get(path); + if (directory == null || !directory.isOpen()) { + directory = (RefCntRamDirectory) openNew(path); directories.put(path, directory); + } else { + directory.incRef(); } return directory; @@ -53,9 +55,9 @@ public class RAMDirectoryFactory extends boolean indexExists = dirFile.canRead(); if (indexExists) { Directory dir = super.open(path); - directory = new RAMDirectory(dir); + directory = new RefCntRamDirectory(dir); } else { - directory = new RAMDirectory(); + directory = new RefCntRamDirectory(); } return directory; } Added: lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RefCntRamDirectory.java URL: http://svn.apache.org/viewvc/lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RefCntRamDirectory.java?rev=925620&view=auto ============================================================================== --- lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RefCntRamDirectory.java (added) +++ lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core/RefCntRamDirectory.java Sat Mar 20 14:57:28 2010 @@ -0,0 +1,46 @@ +package org.apache.solr.core; + +import java.io.IOException; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.RAMDirectory; + +public class RefCntRamDirectory extends RAMDirectory { + + private final AtomicInteger refCount = new AtomicInteger(); + + public RefCntRamDirectory() { + super(); + incRef(); + } + + public RefCntRamDirectory(Directory dir) throws IOException { + this(); + Directory.copy(dir, this, false); + } + + public void incRef() { + ensureOpen(); + refCount.incrementAndGet(); + } + + public void decRef() { + ensureOpen(); + if (refCount.getAndDecrement() == 1) { + close(); + } + } + + public final synchronized void close() { + if (isOpen) { + decRef(); + super.close(); + } + } + + public boolean isOpen() { + return isOpen; + } + +}