Additional refactoring to open the file only when necessary.
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/ResultState.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/ResultState.java
index 097c663..70d9714 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/ResultState.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/ResultState.java
@@ -58,14 +58,13 @@
this.frameSize = frameSize;
eos = new AtomicBoolean(false);
localPageList = new ArrayList<Page>();
+
+ writeFileHandle = null;
}
public synchronized void open(FileReference fileRef) throws HyracksDataException {
this.fileRef = fileRef;
- writeFileHandle = ioManager.open(fileRef, IIOManager.FileReadWriteMode.READ_WRITE,
- IIOManager.FileSyncMode.METADATA_ASYNC_DATA_ASYNC);
-
size = 0;
persistentSize = 0;
notifyAll();
@@ -170,6 +169,11 @@
page.getBuffer().flip();
+ if (writeFileHandle == null) {
+ writeFileHandle = ioManager.open(fileRef, IIOManager.FileReadWriteMode.READ_WRITE,
+ IIOManager.FileSyncMode.METADATA_ASYNC_DATA_ASYNC);
+ }
+
long delta = ioManager.syncWrite(writeFileHandle, persistentSize, page.getBuffer());
persistentSize += delta;
return page;