Index: src/java/org/apache/lucene/index/IndexWriter.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/IndexWriter.java,v retrieving revision 1.19 diff -w -u -r1.19 IndexWriter.java --- src/java/org/apache/lucene/index/IndexWriter.java 21 Oct 2003 17:59:16 -0000 1.19 +++ src/java/org/apache/lucene/index/IndexWriter.java 22 Oct 2003 04:11:43 -0000 @@ -300,6 +300,7 @@ int minSegment = segmentInfos.size() - mergeFactor; mergeSegments(minSegment < 0 ? 0 : minSegment); } + directory.touchFile("segments"); } /** Merges all segments from an array of indexes into this index. Index: src/java/org/apache/lucene/store/FSDirectory.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/store/FSDirectory.java,v retrieving revision 1.21 diff -w -u -r1.21 FSDirectory.java --- src/java/org/apache/lucene/store/FSDirectory.java 25 Sep 2003 21:50:11 -0000 1.21 +++ src/java/org/apache/lucene/store/FSDirectory.java 22 Oct 2003 04:11:43 -0000 @@ -54,11 +54,7 @@ * . */ -import java.io.IOException; -import java.io.File; -import java.io.RandomAccessFile; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.io.*; import java.util.Hashtable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -189,23 +185,65 @@ return file.exists(); } + static class TimestampFileFilter implements FileFilter + { + private String name; + + TimestampFileFilter(String name) { + this.name = name; + } + + public boolean accept(File pathname) { + return pathname.getName().startsWith(name + "."); + } + } + + private static long getLatestTimestamp(File[] files) + { + long latest = 0; + for(int i = 0; i < files.length; i++) { + File timestampFile = files[i]; + String fileName = timestampFile.getName(); + long timestamp = Long.parseLong(fileName.substring(fileName.lastIndexOf('.')+1)); + if(timestamp > latest) latest = timestamp; + } + return latest; + } + /** Returns the time the named file was last modified. */ public final long fileModified(String name) throws IOException { - File file = new File(directory, name); - return file.lastModified(); + FileFilter filter = new TimestampFileFilter(name); + File[] timestamps = directory.listFiles(filter); + return getLatestTimestamp(timestamps); } /** Returns the time the named file was last modified. */ - public static final long fileModified(File directory, String name) + public static final long fileModified(File directory, final String name) throws IOException { - File file = new File(directory, name); - return file.lastModified(); + FileFilter filter = new TimestampFileFilter(name); + File[] timestamps = directory.listFiles(filter); + return getLatestTimestamp(timestamps); } /** Set the modified time of an existing file to now. */ public void touchFile(String name) throws IOException { - File file = new File(directory, name); - file.setLastModified(System.currentTimeMillis()); + //delete all old timestamps + FileFilter filter = new TimestampFileFilter(name); + File[] timestamps = directory.listFiles(filter); + for(int i = 0; i < timestamps.length; i++) { + timestamps[i].delete(); + } + File file = new File(directory, name + "." + System.currentTimeMillis()); + while(file.exists()) { + try { + Thread.sleep(0, 1); + file.delete(); + } + catch(InterruptedException e) { + } + file = new File(directory, name + "." + System.currentTimeMillis()); + } + file.createNewFile(); } /** Returns the length in bytes of a file in the directory. */