/org.openrdf/alibaba/trunk/blob-store
} |
|
public boolean erase() throws IOException { |
File index = new File(journal, "index"); |
File tmp = new File(journal, "index$"); |
lock(); |
try { |
new File(journal, "obsolete").delete(); |
eachEntry(new Closure<Void>() { |
if (index.exists()) { |
copy(index, tmp, null); |
} |
eachEntry(tmp, new Closure<Void>() { |
public Void call(String name, String iri) throws IOException { |
openVersion(iri).erase(); |
return null; |
}); |
return true; |
} finally { |
tmp.delete(); |
String[] list = journal.list(); |
if (list != null && list.length == 0) { |
journal.delete(); |
} |
unlock(); |
} |
} |
protected void removeFromIndex(String erasing) throws IOException { |
lock(); |
try { |
boolean empty = true; |
File index = new File(journal, "index"); |
File rest = new File(journal, "index$" |
+ Integer.toHexString(erasing.hashCode())); |
BufferedReader reader = new BufferedReader(new FileReader(index)); |
try { |
PrintWriter writer = new PrintWriter(new FileWriter(rest)); |
try { |
String line; |
while ((line = reader.readLine()) != null) { |
String iri = line.substring(line.indexOf(' ') + 1); |
if (!iri.equals(erasing)) { |
writer.println(line); |
empty = false; |
} |
} |
} finally { |
writer.close(); |
} |
} finally { |
reader.close(); |
} |
boolean empty = copy(index, rest, erasing); |
index.delete(); |
if (empty) { |
rest.delete(); |
} |
} |
|
private boolean copy(File source, File destintation, String exclude) |
throws FileNotFoundException, IOException { |
boolean empty = true; |
BufferedReader reader = new BufferedReader(new FileReader(source)); |
try { |
PrintWriter writer = new PrintWriter(new FileWriter(destintation)); |
try { |
String line; |
while ((line = reader.readLine()) != null) { |
String iri = line.substring(line.indexOf(' ') + 1); |
if (!iri.equals(exclude)) { |
writer.println(line); |
empty = false; |
} |
} |
} finally { |
writer.close(); |
} |
} finally { |
reader.close(); |
} |
return empty; |
} |
|
private void appendIndex(File file, String iri) throws IOException { |
lock(); |
try { |
} |
|
private <V> V eachEntry(Closure<V> closure) throws IOException { |
return eachEntry(new File(journal, "index"), closure); |
} |
|
private <V> V eachEntry(File index, Closure<V> closure) throws IOException { |
Lock readLock = readLock(); |
try { |
readLock.lock(); |
File index = new File(journal, "index"); |
if (!index.exists()) |
return null; |
BufferedReader reader = new BufferedReader(new FileReader(index)); |
} else { |
return deleted; |
} |
} catch (IOException e) { |
logger.error(e.toString(), e); |
return false; |
} finally { |
read.unlock(); |
} |
open = false; |
changed = false; |
deleted = false; |
deleteWriteFile(); |
try { |
deleteWriteFile(); |
} catch (IOException e) { |
logger.error(e.toString(), e); |
} |
} |
} |
|
} |
} |
|
private synchronized void written(boolean success, long size, byte[] digest, OutputStream stream) { |
private synchronized void written(boolean success, long size, |
byte[] digest, OutputStream stream) throws IOException { |
if (success) { |
if (readFile != null && readLength == size |
&& MessageDigest.isEqual(readDigest, digest)) { |
} |
} |
|
private boolean deleteWriteFile() { |
private boolean deleteWriteFile() throws IOException { |
if (writeStream != null) { |
writeStream.close(); |
writeStream = null; |
} |
if (writeFile != null && writeFile.delete()) { |
File d = writeFile.getParentFile(); |
while (!d.equals(disk.getDirectory()) && d.delete()) { |
d = d.getParentFile(); |
} |
writeFile = null; |
return true; |
} |
writeFile = null; |
return true; |
return false; |
} |
|
private void init(boolean write) throws IOException { |