Skip to content

Commit 318d01b

Browse files
committed
abort the write if the file has been deleted
1 parent 54ae77f commit 318d01b

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/main/java/com/cloudant/fdblucene/FDBIndexOutput.java

+17-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.io.IOException;
1919
import java.util.concurrent.CompletableFuture;
20+
import java.util.function.Consumer;
2021
import java.util.zip.CRC32;
2122

2223
import org.apache.lucene.store.IndexOutput;
@@ -153,7 +154,9 @@ private void flushTxnBuffer() {
153154
lastFlushFuture = txc.runAsync(txn -> {
154155
readVersionCache.setReadVersion(txn);
155156
txn.options().setTransactionLoggingEnable(String.format("%s,out,flush,%d", getName(), pointer));
156-
flushTxnBuffer(subspace, txn, txnBuffer, txnBufferOffset, pointer, pageSize);
157+
applyIfExists(txn, value -> {
158+
flushTxnBuffer(subspace, txn, txnBuffer, txnBufferOffset, pointer, pageSize);
159+
});
157160
return AsyncUtil.DONE;
158161
});
159162
}
@@ -166,11 +169,21 @@ private void flushTxnBufferIfFull() {
166169

167170
private void setFileLength(final TransactionContext txc, final long length) {
168171
txc.run(txn -> {
169-
final byte[] value = txn.get(metaKey).join();
170-
final FileMetaData meta = new FileMetaData(value).setFileLength(length);
171-
txn.set(metaKey, meta.pack());
172+
applyIfExists(txn, value -> {
173+
final FileMetaData meta = new FileMetaData(value).setFileLength(length);
174+
txn.set(metaKey, meta.pack());
175+
});
172176
return null;
173177
});
174178
}
175179

180+
private void applyIfExists(final Transaction txn, final Consumer<byte[]> fun) {
181+
txn.get(metaKey).thenApply(value -> {
182+
if (value != null) {
183+
fun.accept(value);
184+
}
185+
return null;
186+
}).join();
187+
}
188+
176189
}

0 commit comments

Comments
 (0)