You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Robert Muir <rc...@gmail.com> on 2011/01/30 14:56:55 UTC
Re: svn commit: r925620 - in /lucene/solr/branches/newtrunk/solr/src/java/org/apache/solr/core:
RAMDirectoryFactory.java RefCntRamDirectory.java
Mark, did you intend to add Apache License to this file?
On Sat, Mar 20, 2010 at 10:57 AM, <ma...@apache.org> wrote:
> 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<String, Directory> directories = new HashMap<String, Directory>();
> + private Map<String, RefCntRamDirectory> directories = new HashMap<String, RefCntRamDirectory>();
>
> @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;
> + }
> +
> +}
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org