Fix so that lock files created in /tmp are removed when a directory is

re-created.  This way attempts to create a new index after a crashed
indexing run no longer have to manually remove lock files from /tmp.


git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@149991 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Doug Cutting 2003-05-29 20:18:18 +00:00
parent 956b3c988a
commit 1b36a9ddcc
1 changed files with 39 additions and 23 deletions

View File

@ -165,6 +165,17 @@ public final class FSDirectory extends Directory {
if (!file.delete())
throw new IOException("couldn't delete " + files[i]);
}
String lockPrefix = getLockPrefix().toString(); // clear old locks
File tmpdir = new File(System.getProperty("java.io.tmpdir"));
files = tmpdir.list();
for (int i = 0; i < files.length; i++) {
if (!files[i].startsWith(lockPrefix))
continue;
File file = new File(tmpdir, files[i]);
if (!file.delete())
throw new IOException("couldn't delete " + files[i]);
}
}
/** Returns an array of strings, one for each file in the directory. */
@ -298,27 +309,9 @@ public final class FSDirectory extends Directory {
* @return an instance of <code>Lock</code> holding the lock
*/
public final Lock makeLock(String name) {
// the fully-qualified file name which uniquely identifies this lock
String fullName;
try {
fullName = new File(directory, name).getCanonicalPath();
} catch (IOException e) {
throw new RuntimeException(e.toString());
}
// hash full name to create the tmp file name
byte digest[];
synchronized (DIGESTER) {
digest = DIGESTER.digest(fullName.getBytes());
}
StringBuffer buf = new StringBuffer();
buf.append("lucene-");
for (int i = 0; i < digest.length; i++) {
int b = digest[i];
buf.append(HEX_DIGITS[(b >> 4) & 0xf]);
buf.append(HEX_DIGITS[b & 0xf]);
}
buf.append(".lock");
StringBuffer buf = getLockPrefix();
buf.append("-");
buf.append(name);
// make the lock file in tmp, where anyone can create files.
final File lockFile = new File(System.getProperty("java.io.tmpdir"),
@ -347,6 +340,29 @@ public final class FSDirectory extends Directory {
};
}
private StringBuffer getLockPrefix() {
String dirName; // name to be hashed
try {
dirName = directory.getCanonicalPath();
} catch (IOException e) {
throw new RuntimeException(e.toString());
}
byte digest[];
synchronized (DIGESTER) {
digest = DIGESTER.digest(dirName.getBytes());
}
StringBuffer buf = new StringBuffer();
buf.append("lucene-");
for (int i = 0; i < digest.length; i++) {
int b = digest[i];
buf.append(HEX_DIGITS[(b >> 4) & 0xf]);
buf.append(HEX_DIGITS[b & 0xf]);
}
return buf;
}
/** Closes the store to future operations. */
public final synchronized void close() throws IOException {
if (--refCount <= 0) {