mirror of https://github.com/apache/lucene.git
LUCENE-1468: switch Directory.list() to Directory.listAll(), which does no filtering of returned array
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@723789 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5e3cd6711a
commit
4a0a5664dd
|
@ -38,6 +38,14 @@ API Changes
|
||||||
These methods can be used to avoid additional calls to doc().
|
These methods can be used to avoid additional calls to doc().
|
||||||
(Michael Busch)
|
(Michael Busch)
|
||||||
|
|
||||||
|
6. LUCENE-1468: Deprecate Directory.list(), which sometimes (in
|
||||||
|
FSDirectory) filters out files that don't look like index files, in
|
||||||
|
favor of new Directory.listAll(), which does no filtering. Also,
|
||||||
|
listAll() will never return null; instead, it throws an IOException
|
||||||
|
(or subclass). Specifically, FSDirectory.listAll() will throw the
|
||||||
|
newly added NoSuchDirectoryException if the directory does not
|
||||||
|
exist. (Marcel Reutegger, Mike McCandless)
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
|
|
||||||
1. LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
|
1. LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
|
||||||
|
|
|
@ -24,7 +24,6 @@ import java.io.BufferedReader;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.apache.lucene.benchmark.byTask.Benchmark;
|
|
||||||
import org.apache.lucene.benchmark.byTask.feeds.DocData;
|
import org.apache.lucene.benchmark.byTask.feeds.DocData;
|
||||||
import org.apache.lucene.benchmark.byTask.feeds.NoMoreDataException;
|
import org.apache.lucene.benchmark.byTask.feeds.NoMoreDataException;
|
||||||
import org.apache.lucene.benchmark.byTask.feeds.ReutersDocMaker;
|
import org.apache.lucene.benchmark.byTask.feeds.ReutersDocMaker;
|
||||||
|
@ -712,7 +711,7 @@ public class TestPerfTasksLogic extends TestCase {
|
||||||
ir.close();
|
ir.close();
|
||||||
|
|
||||||
// Make sure we have 3 segments:
|
// Make sure we have 3 segments:
|
||||||
final String[] files = benchmark.getRunData().getDirectory().list();
|
final String[] files = benchmark.getRunData().getDirectory().listAll();
|
||||||
int cfsCount = 0;
|
int cfsCount = 0;
|
||||||
for(int i=0;i<files.length;i++)
|
for(int i=0;i<files.length;i++)
|
||||||
if (files[i].endsWith(".cfs"))
|
if (files[i].endsWith(".cfs"))
|
||||||
|
|
|
@ -480,9 +480,7 @@ abstract class DirectoryIndexReader extends IndexReader {
|
||||||
/** @see IndexReader#listCommits */
|
/** @see IndexReader#listCommits */
|
||||||
public static Collection listCommits(Directory dir) throws IOException {
|
public static Collection listCommits(Directory dir) throws IOException {
|
||||||
|
|
||||||
final String[] files = dir.list();
|
final String[] files = dir.listAll();
|
||||||
if (files == null)
|
|
||||||
throw new IOException("cannot read directory " + dir + ": list() returned null");
|
|
||||||
|
|
||||||
Collection commits = new ArrayList();
|
Collection commits = new ArrayList();
|
||||||
|
|
||||||
|
|
|
@ -146,9 +146,7 @@ final class IndexFileDeleter {
|
||||||
long currentGen = segmentInfos.getGeneration();
|
long currentGen = segmentInfos.getGeneration();
|
||||||
IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
||||||
|
|
||||||
String[] files = directory.list();
|
String[] files = directory.listAll();
|
||||||
if (files == null)
|
|
||||||
throw new IOException("cannot read directory " + directory + ": list() returned null");
|
|
||||||
|
|
||||||
CommitPoint currentCommitPoint = null;
|
CommitPoint currentCommitPoint = null;
|
||||||
|
|
||||||
|
@ -306,9 +304,7 @@ final class IndexFileDeleter {
|
||||||
* that segment.
|
* that segment.
|
||||||
*/
|
*/
|
||||||
public void refresh(String segmentName) throws IOException {
|
public void refresh(String segmentName) throws IOException {
|
||||||
String[] files = directory.list();
|
String[] files = directory.listAll();
|
||||||
if (files == null)
|
|
||||||
throw new IOException("cannot read directory " + directory + ": list() returned null");
|
|
||||||
IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
||||||
String segmentPrefix1;
|
String segmentPrefix1;
|
||||||
String segmentPrefix2;
|
String segmentPrefix2;
|
||||||
|
|
|
@ -620,12 +620,11 @@ final class SegmentInfo {
|
||||||
else
|
else
|
||||||
prefix = name + "." + IndexFileNames.PLAIN_NORMS_EXTENSION;
|
prefix = name + "." + IndexFileNames.PLAIN_NORMS_EXTENSION;
|
||||||
int prefixLength = prefix.length();
|
int prefixLength = prefix.length();
|
||||||
String[] allFiles = dir.list();
|
String[] allFiles = dir.listAll();
|
||||||
if (allFiles == null)
|
final IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
||||||
throw new IOException("cannot read directory " + dir + ": list() returned null");
|
|
||||||
for(int i=0;i<allFiles.length;i++) {
|
for(int i=0;i<allFiles.length;i++) {
|
||||||
String fileName = allFiles[i];
|
String fileName = allFiles[i];
|
||||||
if (fileName.length() > prefixLength && Character.isDigit(fileName.charAt(prefixLength)) && fileName.startsWith(prefix)) {
|
if (filter.accept(null, fileName) && fileName.length() > prefixLength && Character.isDigit(fileName.charAt(prefixLength)) && fileName.startsWith(prefix)) {
|
||||||
files.add(fileName);
|
files.add(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,13 @@ package org.apache.lucene.index;
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.lucene.store.FSDirectory;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.store.IndexInput;
|
import org.apache.lucene.store.IndexInput;
|
||||||
import org.apache.lucene.store.IndexOutput;
|
import org.apache.lucene.store.IndexOutput;
|
||||||
import org.apache.lucene.store.ChecksumIndexOutput;
|
import org.apache.lucene.store.ChecksumIndexOutput;
|
||||||
import org.apache.lucene.store.ChecksumIndexInput;
|
import org.apache.lucene.store.ChecksumIndexInput;
|
||||||
|
import org.apache.lucene.store.NoSuchDirectoryException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
@ -129,8 +131,11 @@ final class SegmentInfos extends Vector {
|
||||||
* @param directory -- directory to search for the latest segments_N file
|
* @param directory -- directory to search for the latest segments_N file
|
||||||
*/
|
*/
|
||||||
public static long getCurrentSegmentGeneration(Directory directory) throws IOException {
|
public static long getCurrentSegmentGeneration(Directory directory) throws IOException {
|
||||||
String[] files = directory.list();
|
try {
|
||||||
return getCurrentSegmentGeneration(files);
|
return getCurrentSegmentGeneration(directory.listAll());
|
||||||
|
} catch (NoSuchDirectoryException nsde) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -558,9 +563,9 @@ final class SegmentInfos extends Vector {
|
||||||
long genA = -1;
|
long genA = -1;
|
||||||
|
|
||||||
if (directory != null)
|
if (directory != null)
|
||||||
files = directory.list();
|
files = directory.listAll();
|
||||||
else
|
else
|
||||||
files = fileDirectory.list();
|
files = FSDirectory.listAll(fileDirectory);
|
||||||
|
|
||||||
if (files != null)
|
if (files != null)
|
||||||
genA = getCurrentSegmentGeneration(files);
|
genA = getCurrentSegmentGeneration(files);
|
||||||
|
|
|
@ -19,6 +19,8 @@ package org.apache.lucene.store;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.lucene.index.IndexFileNameFilter;
|
||||||
|
|
||||||
/** A Directory is a flat list of files. Files may be written once, when they
|
/** A Directory is a flat list of files. Files may be written once, when they
|
||||||
* are created. Once a file is created it may only be opened for read, or
|
* are created. Once a file is created it may only be opened for read, or
|
||||||
* deleted. Random access is permitted both when reading and writing.
|
* deleted. Random access is permitted both when reading and writing.
|
||||||
|
@ -43,14 +45,29 @@ public abstract class Directory {
|
||||||
* this Directory instance). */
|
* this Directory instance). */
|
||||||
protected LockFactory lockFactory;
|
protected LockFactory lockFactory;
|
||||||
|
|
||||||
/** Returns an array of strings, one for each file in the
|
/** @deprecated For some Directory implementations ({@link
|
||||||
* directory. This method may return null (for example for
|
* FSDirectory}, and its subclasses), this method
|
||||||
* {@link FSDirectory} if the underlying directory doesn't
|
* silently filters its results to include only index
|
||||||
* exist in the filesystem or there are permissions
|
* files. Please use {@link #listAll} instead, which
|
||||||
* problems).*/
|
* does no filtering. */
|
||||||
public abstract String[] list()
|
public abstract String[] list()
|
||||||
throws IOException;
|
throws IOException;
|
||||||
|
|
||||||
|
/** Returns an array of strings, one for each file in the
|
||||||
|
* directory. Unlike {@link #list} this method does no
|
||||||
|
* filtering of the contents in a directory, and it will
|
||||||
|
* never return null (throws IOException instead).
|
||||||
|
*
|
||||||
|
* Currently this method simply fallsback to {@link
|
||||||
|
* #list} for Directory impls outside of Lucene's core &
|
||||||
|
* contrib, but in 3.0 that method will be removed and
|
||||||
|
* this method will become abstract. */
|
||||||
|
public String[] listAll()
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return list();
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns true iff a file with the given name exists. */
|
/** Returns true iff a file with the given name exists. */
|
||||||
public abstract boolean fileExists(String name)
|
public abstract boolean fileExists(String name)
|
||||||
throws IOException;
|
throws IOException;
|
||||||
|
@ -173,19 +190,26 @@ public abstract class Directory {
|
||||||
* are undefined and you could easily hit a
|
* are undefined and you could easily hit a
|
||||||
* FileNotFoundException.
|
* FileNotFoundException.
|
||||||
*
|
*
|
||||||
|
* <p><b>NOTE:</b> this method only copies files that look
|
||||||
|
* like index files (ie, have extensions matching the
|
||||||
|
* known extensions of index files).
|
||||||
|
*
|
||||||
* @param src source directory
|
* @param src source directory
|
||||||
* @param dest destination directory
|
* @param dest destination directory
|
||||||
* @param closeDirSrc if <code>true</code>, call {@link #close()} method on source directory
|
* @param closeDirSrc if <code>true</code>, call {@link #close()} method on source directory
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public static void copy(Directory src, Directory dest, boolean closeDirSrc) throws IOException {
|
public static void copy(Directory src, Directory dest, boolean closeDirSrc) throws IOException {
|
||||||
final String[] files = src.list();
|
final String[] files = src.listAll();
|
||||||
|
|
||||||
if (files == null)
|
IndexFileNameFilter filter = IndexFileNameFilter.getFilter();
|
||||||
throw new IOException("cannot read directory " + src + ": list() returned null");
|
|
||||||
|
|
||||||
byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
|
byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
|
|
||||||
|
if (!filter.accept(null, files[i]))
|
||||||
|
continue;
|
||||||
|
|
||||||
IndexOutput os = null;
|
IndexOutput os = null;
|
||||||
IndexInput is = null;
|
IndexInput is = null;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -18,6 +18,7 @@ package org.apache.lucene.store;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -242,6 +243,7 @@ public class FSDirectory extends Directory {
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated */
|
||||||
private void create() throws IOException {
|
private void create() throws IOException {
|
||||||
if (directory.exists()) {
|
if (directory.exists()) {
|
||||||
String[] files = directory.list(IndexFileNameFilter.getFilter()); // clear old files
|
String[] files = directory.list(IndexFileNameFilter.getFilter()); // clear old files
|
||||||
|
@ -265,9 +267,6 @@ public class FSDirectory extends Directory {
|
||||||
|
|
||||||
final void createDir() throws IOException {
|
final void createDir() throws IOException {
|
||||||
if (!checked) {
|
if (!checked) {
|
||||||
if (directory.exists() && !directory.isDirectory())
|
|
||||||
throw new IOException(directory + " not a directory");
|
|
||||||
|
|
||||||
if (!directory.exists())
|
if (!directory.exists())
|
||||||
if (!directory.mkdirs())
|
if (!directory.mkdirs())
|
||||||
throw new IOException("Cannot create directory: " + directory);
|
throw new IOException("Cannot create directory: " + directory);
|
||||||
|
@ -304,6 +303,9 @@ public class FSDirectory extends Directory {
|
||||||
|
|
||||||
directory = path;
|
directory = path;
|
||||||
|
|
||||||
|
if (directory.exists() && !directory.isDirectory())
|
||||||
|
throw new NoSuchDirectoryException("file '" + directory + "' exists but is not a directory");
|
||||||
|
|
||||||
boolean doClearLockID = false;
|
boolean doClearLockID = false;
|
||||||
|
|
||||||
if (lockFactory == null) {
|
if (lockFactory == null) {
|
||||||
|
@ -356,12 +358,46 @@ public class FSDirectory extends Directory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns an array of strings, one for each Lucene index file in the directory. */
|
/** Lists all files (not subdirectories) in the
|
||||||
|
* directory. This method never returns null (throws
|
||||||
|
* {@link IOException} instead).
|
||||||
|
*
|
||||||
|
* @throws NoSuchDirectoryException if the directory
|
||||||
|
* does not exist, or does exist but is not a
|
||||||
|
* directory.
|
||||||
|
* @throws IOException if list() returns null */
|
||||||
|
public static String[] listAll(File dir) throws IOException {
|
||||||
|
if (!dir.exists())
|
||||||
|
throw new NoSuchDirectoryException("directory '" + dir + "' does not exist");
|
||||||
|
else if (!dir.isDirectory())
|
||||||
|
throw new NoSuchDirectoryException("file '" + dir + "' exists but is not a directory");
|
||||||
|
|
||||||
|
// Exclude subdirs
|
||||||
|
String[] result = dir.list(new FilenameFilter() {
|
||||||
|
public boolean accept(File dir, String file) {
|
||||||
|
return !new File(dir, file).isDirectory();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
throw new IOException("directory '" + dir + "' exists and is a directory, but cannot be listed: list() returned null");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public String[] list() {
|
public String[] list() {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
return directory.list(IndexFileNameFilter.getFilter());
|
return directory.list(IndexFileNameFilter.getFilter());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Lists all files (not subdirectories) in the
|
||||||
|
* directory.
|
||||||
|
* @see #listAll(File) */
|
||||||
|
public String[] listAll() throws IOException {
|
||||||
|
ensureOpen();
|
||||||
|
return listAll(directory);
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns true iff a file with the given name exists. */
|
/** Returns true iff a file with the given name exists. */
|
||||||
public boolean fileExists(String name) {
|
public boolean fileExists(String name) {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.apache.lucene.store;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when you try to list a
|
||||||
|
* non-existent directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class NoSuchDirectoryException extends FileNotFoundException {
|
||||||
|
public NoSuchDirectoryException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -95,8 +95,11 @@ public class RAMDirectory extends Directory implements Serializable {
|
||||||
this(FSDirectory.getDirectory(dir), true);
|
this(FSDirectory.getDirectory(dir), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns an array of strings, one for each file in the directory. */
|
|
||||||
public synchronized final String[] list() {
|
public synchronized final String[] list() {
|
||||||
|
return listAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized final String[] listAll() {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
Set fileNames = fileMap.keySet();
|
Set fileNames = fileMap.keySet();
|
||||||
String[] result = new String[fileNames.size()];
|
String[] result = new String[fileNames.size()];
|
||||||
|
|
|
@ -447,7 +447,7 @@ public class TestBackwardsCompatibility extends LuceneTestCase
|
||||||
"segments_3",
|
"segments_3",
|
||||||
"segments.gen"};
|
"segments.gen"};
|
||||||
|
|
||||||
String[] actual = dir.list();
|
String[] actual = dir.listAll();
|
||||||
Arrays.sort(expected);
|
Arrays.sort(expected);
|
||||||
Arrays.sort(actual);
|
Arrays.sort(actual);
|
||||||
if (!Arrays.equals(expected, actual)) {
|
if (!Arrays.equals(expected, actual)) {
|
||||||
|
|
|
@ -333,10 +333,10 @@ public class TestDeletionPolicy extends LuceneTestCase
|
||||||
// should have orphan'd at least one index file.
|
// should have orphan'd at least one index file.
|
||||||
// Open & close a writer and assert that it
|
// Open & close a writer and assert that it
|
||||||
// actually removed something:
|
// actually removed something:
|
||||||
int preCount = dir.list().length;
|
int preCount = dir.listAll().length;
|
||||||
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, policy, IndexWriter.MaxFieldLength.LIMITED);
|
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, policy, IndexWriter.MaxFieldLength.LIMITED);
|
||||||
writer.close();
|
writer.close();
|
||||||
int postCount = dir.list().length;
|
int postCount = dir.listAll().length;
|
||||||
assertTrue(postCount < preCount);
|
assertTrue(postCount < preCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,6 +315,9 @@ public class TestFieldsReader extends LuceneTestCase {
|
||||||
public String[] list() throws IOException {
|
public String[] list() throws IOException {
|
||||||
return fsDir.list();
|
return fsDir.list();
|
||||||
}
|
}
|
||||||
|
public String[] listAll() throws IOException {
|
||||||
|
return fsDir.listAll();
|
||||||
|
}
|
||||||
public boolean fileExists(String name) throws IOException {
|
public boolean fileExists(String name) throws IOException {
|
||||||
return fsDir.fileExists(name);
|
return fsDir.fileExists(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class TestIndexFileDeleter extends LuceneTestCase
|
||||||
|
|
||||||
// Now, artificially create an extra .del file & extra
|
// Now, artificially create an extra .del file & extra
|
||||||
// .s0 file:
|
// .s0 file:
|
||||||
String[] files = dir.list();
|
String[] files = dir.listAll();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for(int j=0;j<files.length;j++) {
|
for(int j=0;j<files.length;j++) {
|
||||||
|
@ -142,14 +142,14 @@ public class TestIndexFileDeleter extends LuceneTestCase
|
||||||
// Create a bogus cfs file shadowing a non-cfs segment:
|
// Create a bogus cfs file shadowing a non-cfs segment:
|
||||||
copyFile(dir, "_2.cfs", "_3.cfs");
|
copyFile(dir, "_2.cfs", "_3.cfs");
|
||||||
|
|
||||||
String[] filesPre = dir.list();
|
String[] filesPre = dir.listAll();
|
||||||
|
|
||||||
// Open & close a writer: it should delete the above 4
|
// Open & close a writer: it should delete the above 4
|
||||||
// files and nothing more:
|
// files and nothing more:
|
||||||
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
|
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
String[] files2 = dir.list();
|
String[] files2 = dir.listAll();
|
||||||
dir.close();
|
dir.close();
|
||||||
|
|
||||||
Arrays.sort(files);
|
Arrays.sort(files);
|
||||||
|
|
|
@ -48,6 +48,7 @@ import org.apache.lucene.store.FSDirectory;
|
||||||
import org.apache.lucene.store.LockObtainFailedException;
|
import org.apache.lucene.store.LockObtainFailedException;
|
||||||
import org.apache.lucene.store.MockRAMDirectory;
|
import org.apache.lucene.store.MockRAMDirectory;
|
||||||
import org.apache.lucene.store.RAMDirectory;
|
import org.apache.lucene.store.RAMDirectory;
|
||||||
|
import org.apache.lucene.store.NoSuchDirectoryException;
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.util._TestUtil;
|
import org.apache.lucene.util._TestUtil;
|
||||||
|
|
||||||
|
@ -962,11 +963,11 @@ public class TestIndexReader extends LuceneTestCase
|
||||||
// new IndexFileDeleter, have it delete
|
// new IndexFileDeleter, have it delete
|
||||||
// unreferenced files, then verify that in fact
|
// unreferenced files, then verify that in fact
|
||||||
// no files were deleted:
|
// no files were deleted:
|
||||||
String[] startFiles = dir.list();
|
String[] startFiles = dir.listAll();
|
||||||
SegmentInfos infos = new SegmentInfos();
|
SegmentInfos infos = new SegmentInfos();
|
||||||
infos.read(dir);
|
infos.read(dir);
|
||||||
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
||||||
String[] endFiles = dir.list();
|
String[] endFiles = dir.listAll();
|
||||||
|
|
||||||
Arrays.sort(startFiles);
|
Arrays.sort(startFiles);
|
||||||
Arrays.sort(endFiles);
|
Arrays.sort(endFiles);
|
||||||
|
@ -1520,6 +1521,7 @@ public class TestIndexReader extends LuceneTestCase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// LUCENE-1474
|
// LUCENE-1474
|
||||||
public void testIndexReader() throws Exception {
|
public void testIndexReader() throws Exception {
|
||||||
Directory dir = new RAMDirectory();
|
Directory dir = new RAMDirectory();
|
||||||
|
@ -1542,4 +1544,18 @@ public class TestIndexReader extends LuceneTestCase
|
||||||
doc.add(new Field("id", id, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
|
doc.add(new Field("id", id, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468 -- make sure on attempting to open an
|
||||||
|
// IndexReader on a non-existent directory, you get a
|
||||||
|
// good exception
|
||||||
|
public void testNoDir() throws Throwable {
|
||||||
|
String tempDir = System.getProperty("java.io.tmpdir");
|
||||||
|
Directory dir = FSDirectory.getDirectory(new File(tempDir, "doesnotexist"), null);
|
||||||
|
try {
|
||||||
|
IndexReader.open(dir);
|
||||||
|
fail("did not hit expected exception");
|
||||||
|
} catch (NoSuchDirectoryException nsde) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ public class TestIndexReaderReopen extends LuceneTestCase {
|
||||||
dir1.close();
|
dir1.close();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dir1.list();
|
dir1.listAll();
|
||||||
fail("did not hit AlreadyClosedException");
|
fail("did not hit AlreadyClosedException");
|
||||||
} catch (AlreadyClosedException ace) {
|
} catch (AlreadyClosedException ace) {
|
||||||
// expected
|
// expected
|
||||||
|
|
|
@ -170,7 +170,7 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
addDocWithIndex(writer, 25*i+j);
|
addDocWithIndex(writer, 25*i+j);
|
||||||
}
|
}
|
||||||
writer.close();
|
writer.close();
|
||||||
String[] files = dirs[i].list();
|
String[] files = dirs[i].listAll();
|
||||||
for(int j=0;j<files.length;j++) {
|
for(int j=0;j<files.length;j++) {
|
||||||
inputDiskUsage += dirs[i].fileLength(files[j]);
|
inputDiskUsage += dirs[i].fileLength(files[j]);
|
||||||
}
|
}
|
||||||
|
@ -207,11 +207,11 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
// succeed and index should show all documents were
|
// succeed and index should show all documents were
|
||||||
// added.
|
// added.
|
||||||
|
|
||||||
// String[] files = startDir.list();
|
// String[] files = startDir.listAll();
|
||||||
long diskUsage = startDir.sizeInBytes();
|
long diskUsage = startDir.sizeInBytes();
|
||||||
|
|
||||||
long startDiskUsage = 0;
|
long startDiskUsage = 0;
|
||||||
String[] files = startDir.list();
|
String[] files = startDir.listAll();
|
||||||
for(int i=0;i<files.length;i++) {
|
for(int i=0;i<files.length;i++) {
|
||||||
startDiskUsage += startDir.fileLength(files[i]);
|
startDiskUsage += startDir.fileLength(files[i]);
|
||||||
}
|
}
|
||||||
|
@ -539,11 +539,11 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertNoUnreferencedFiles(Directory dir, String message) throws IOException {
|
public static void assertNoUnreferencedFiles(Directory dir, String message) throws IOException {
|
||||||
String[] startFiles = dir.list();
|
String[] startFiles = dir.listAll();
|
||||||
SegmentInfos infos = new SegmentInfos();
|
SegmentInfos infos = new SegmentInfos();
|
||||||
infos.read(dir);
|
infos.read(dir);
|
||||||
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
||||||
String[] endFiles = dir.list();
|
String[] endFiles = dir.listAll();
|
||||||
|
|
||||||
Arrays.sort(startFiles);
|
Arrays.sort(startFiles);
|
||||||
Arrays.sort(endFiles);
|
Arrays.sort(endFiles);
|
||||||
|
@ -708,7 +708,7 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
long startDiskUsage = 0;
|
long startDiskUsage = 0;
|
||||||
String[] files = dir.list();
|
String[] files = dir.listAll();
|
||||||
for(int i=0;i<files.length;i++) {
|
for(int i=0;i<files.length;i++) {
|
||||||
startDiskUsage += dir.fileLength(files[i]);
|
startDiskUsage += dir.fileLength(files[i]);
|
||||||
}
|
}
|
||||||
|
@ -988,7 +988,7 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
|
long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
|
||||||
assertTrue("segment generation should be > 1 but got " + gen, gen > 1);
|
assertTrue("segment generation should be > 1 but got " + gen, gen > 1);
|
||||||
|
|
||||||
String[] files = dir.list();
|
String[] files = dir.listAll();
|
||||||
for(int i=0;i<files.length;i++) {
|
for(int i=0;i<files.length;i++) {
|
||||||
if (files[i].endsWith(".cfs")) {
|
if (files[i].endsWith(".cfs")) {
|
||||||
dir.deleteFile(files[i]);
|
dir.deleteFile(files[i]);
|
||||||
|
@ -1276,12 +1276,12 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
RAMDirectory dir = new RAMDirectory();
|
RAMDirectory dir = new RAMDirectory();
|
||||||
IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
|
IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
|
||||||
writer.setRAMBufferSizeMB(0.000001);
|
writer.setRAMBufferSizeMB(0.000001);
|
||||||
int lastNumFile = dir.list().length;
|
int lastNumFile = dir.listAll().length;
|
||||||
for(int j=0;j<9;j++) {
|
for(int j=0;j<9;j++) {
|
||||||
Document doc = new Document();
|
Document doc = new Document();
|
||||||
doc.add(new Field("field", "aaa" + j, Field.Store.YES, Field.Index.ANALYZED));
|
doc.add(new Field("field", "aaa" + j, Field.Store.YES, Field.Index.ANALYZED));
|
||||||
writer.addDocument(doc);
|
writer.addDocument(doc);
|
||||||
int numFile = dir.list().length;
|
int numFile = dir.listAll().length;
|
||||||
// Verify that with a tiny RAM buffer we see new
|
// Verify that with a tiny RAM buffer we see new
|
||||||
// segment after every doc
|
// segment after every doc
|
||||||
assertTrue(numFile > lastNumFile);
|
assertTrue(numFile > lastNumFile);
|
||||||
|
@ -4254,4 +4254,31 @@ public class TestIndexWriter extends LuceneTestCase
|
||||||
r.close();
|
r.close();
|
||||||
dir.close();
|
dir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468 -- make sure opening an IndexWriter with
|
||||||
|
// create=true does not remove non-index files
|
||||||
|
|
||||||
|
public void testOtherFiles() throws Throwable {
|
||||||
|
File indexDir = new File(System.getProperty("tempDir"), "otherfiles");
|
||||||
|
Directory dir = new FSDirectory(indexDir, null);
|
||||||
|
try {
|
||||||
|
// Create my own random file:
|
||||||
|
|
||||||
|
IndexOutput out = dir.createOutput("myrandomfile");
|
||||||
|
out.writeByte((byte) 42);
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED).close();
|
||||||
|
|
||||||
|
assertTrue(dir.fileExists("myrandomfile"));
|
||||||
|
|
||||||
|
// Make sure this does not copy myrandomfile:
|
||||||
|
Directory dir2 = new RAMDirectory(dir);
|
||||||
|
assertTrue(!dir2.fileExists("myrandomfile"));
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
dir.close();
|
||||||
|
_TestUtil.rmDir(indexDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -668,11 +668,11 @@ public class TestIndexWriterDelete extends LuceneTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] startFiles = dir.list();
|
String[] startFiles = dir.listAll();
|
||||||
SegmentInfos infos = new SegmentInfos();
|
SegmentInfos infos = new SegmentInfos();
|
||||||
infos.read(dir);
|
infos.read(dir);
|
||||||
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
|
||||||
String[] endFiles = dir.list();
|
String[] endFiles = dir.listAll();
|
||||||
|
|
||||||
if (!Arrays.equals(startFiles, endFiles)) {
|
if (!Arrays.equals(startFiles, endFiles)) {
|
||||||
fail("docswriter abort() failed to delete unreferenced files:\n before delete:\n "
|
fail("docswriter abort() failed to delete unreferenced files:\n before delete:\n "
|
||||||
|
|
|
@ -239,7 +239,7 @@ public class TestIndexWriterMergePolicy extends LuceneTestCase {
|
||||||
assertTrue(numSegments < mergeFactor);
|
assertTrue(numSegments < mergeFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] files = writer.getDirectory().list();
|
String[] files = writer.getDirectory().listAll();
|
||||||
int segmentCfsCount = 0;
|
int segmentCfsCount = 0;
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
if (files[i].endsWith(".cfs")) {
|
if (files[i].endsWith(".cfs")) {
|
||||||
|
@ -249,6 +249,7 @@ public class TestIndexWriterMergePolicy extends LuceneTestCase {
|
||||||
assertEquals(segmentCount, segmentCfsCount);
|
assertEquals(segmentCount, segmentCfsCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
private void printSegmentDocCounts(IndexWriter writer) {
|
private void printSegmentDocCounts(IndexWriter writer) {
|
||||||
int segmentCount = writer.getSegmentCount();
|
int segmentCount = writer.getSegmentCount();
|
||||||
System.out.println("" + segmentCount + " segments total");
|
System.out.println("" + segmentCount + " segments total");
|
||||||
|
@ -257,4 +258,5 @@ public class TestIndexWriterMergePolicy extends LuceneTestCase {
|
||||||
+ " docs");
|
+ " docs");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,7 @@ public class TestOmitTf extends LuceneTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertNoPrx(Directory dir) throws Throwable {
|
private void assertNoPrx(Directory dir) throws Throwable {
|
||||||
final String[] files = dir.list();
|
final String[] files = dir.listAll();
|
||||||
for(int i=0;i<files.length;i++)
|
for(int i=0;i<files.length;i++)
|
||||||
assertFalse(files[i].endsWith(".prx"));
|
assertFalse(files[i].endsWith(".prx"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,6 +271,11 @@ public class TestBufferedIndexInput extends LuceneTestCase {
|
||||||
{
|
{
|
||||||
return dir.list();
|
return dir.list();
|
||||||
}
|
}
|
||||||
|
public String[] listAll()
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return dir.listAll();
|
||||||
|
}
|
||||||
|
|
||||||
public long fileLength(String name) throws IOException {
|
public long fileLength(String name) throws IOException {
|
||||||
return dir.fileLength(name);
|
return dir.fileLength(name);
|
||||||
|
|
|
@ -21,6 +21,8 @@ import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.util._TestUtil;
|
import org.apache.lucene.util._TestUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class TestDirectory extends LuceneTestCase {
|
public class TestDirectory extends LuceneTestCase {
|
||||||
|
|
||||||
|
@ -128,5 +130,60 @@ public class TestDirectory extends LuceneTestCase {
|
||||||
_TestUtil.rmDir(path);
|
_TestUtil.rmDir(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468
|
||||||
|
public void testRAMDirectoryFilter() throws IOException {
|
||||||
|
checkDirectoryFilter(new RAMDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468
|
||||||
|
public void testFSDirectoryFilter() throws IOException {
|
||||||
|
checkDirectoryFilter(FSDirectory.getDirectory("test"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468
|
||||||
|
private void checkDirectoryFilter(Directory dir) throws IOException {
|
||||||
|
String name = "file";
|
||||||
|
try {
|
||||||
|
dir.createOutput(name).close();
|
||||||
|
assertTrue(dir.fileExists(name));
|
||||||
|
assertTrue(Arrays.asList(dir.listAll()).contains(name));
|
||||||
|
} finally {
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468
|
||||||
|
public void testCopySubdir() throws Throwable {
|
||||||
|
File path = new File(System.getProperty("tempDir"), "testsubdir");
|
||||||
|
try {
|
||||||
|
path.mkdirs();
|
||||||
|
new File(path, "subdir").mkdirs();
|
||||||
|
Directory fsDir = new FSDirectory(path, null);
|
||||||
|
assertEquals(0, new RAMDirectory(fsDir).listAll().length);
|
||||||
|
} finally {
|
||||||
|
_TestUtil.rmDir(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LUCENE-1468
|
||||||
|
public void testNotDirectory() throws Throwable {
|
||||||
|
File path = new File(System.getProperty("tempDir"), "testnotdir");
|
||||||
|
Directory fsDir = new FSDirectory(path, null);
|
||||||
|
try {
|
||||||
|
IndexOutput out = fsDir.createOutput("afile");
|
||||||
|
out.close();
|
||||||
|
assertTrue(fsDir.fileExists("afile"));
|
||||||
|
try {
|
||||||
|
new FSDirectory(new File(path, "afile"), null);
|
||||||
|
fail("did not hit expected exception");
|
||||||
|
} catch (NoSuchDirectoryException nsde) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
fsDir.close();
|
||||||
|
_TestUtil.rmDir(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue