Subversion Repositories aduna

Compare Revisions

Rev 11802 → Rev 11808

src/main/java/org/openrdf/store/blob/disk/DiskBlobStore.java
187,10 → 187,15
}
 
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;
198,6 → 203,11
});
return true;
} finally {
tmp.delete();
String[] list = journal.list();
if (list != null && list.length == 0) {
journal.delete();
}
unlock();
}
}
266,28 → 276,10
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();
303,6 → 295,30
}
}
 
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 {
345,10 → 361,13
}
 
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));
src/main/java/org/openrdf/store/blob/disk/DiskBlob.java
155,6 → 155,9
} else {
return deleted;
}
} catch (IOException e) {
logger.error(e.toString(), e);
return false;
} finally {
read.unlock();
}
324,7 → 327,11
open = false;
changed = false;
deleted = false;
deleteWriteFile();
try {
deleteWriteFile();
} catch (IOException e) {
logger.error(e.toString(), e);
}
}
}
 
407,7 → 414,8
}
}
 
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)) {
425,15 → 433,20
}
}
 
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 {