added more meaningful error messages for BTree op boundary cases
git-svn-id: https://hyracks.googlecode.com/svn/trunk@181 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
index c63be46..5a03045 100644
--- a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
+++ b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
@@ -33,4 +33,9 @@
public void unmapName(String name) {
map.remove(name);
}
+
+ @Override
+ public Integer getFileId(String name) {
+ return map.get(name);
+ }
}
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
index c2d3a10..3c84796 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
@@ -43,16 +43,22 @@
this.recordDescProvider = recordDescProvider;
tuple.setFieldPermutation(fieldPermutation);
}
-
+
@Override
- public void close() throws HyracksDataException {
+ public void open() throws HyracksDataException {
+ AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();
+ RecordDescriptor recDesc = recordDescProvider.getInputRecordDescriptor(opDesc.getOperatorId(), 0);
+ accessor = new FrameTupleAccessor(btreeOpHelper.getHyracksContext(), recDesc);
+ IBTreeMetaDataFrame metaFrame = new MetaDataFrame();
+ btreeOpHelper.init();
+ btreeOpHelper.getBTree().open(btreeOpHelper.getBTreeFileId());
try {
- btreeOpHelper.getBTree().endBulkLoad(bulkLoadCtx);
- } catch (Exception e) {
- e.printStackTrace();
- }
+ bulkLoadCtx = btreeOpHelper.getBTree().beginBulkLoad(fillFactor, btreeOpHelper.getLeafFrame(), btreeOpHelper.getInteriorFrame(), metaFrame);
+ } catch (Exception e) {
+ throw new HyracksDataException(e.getMessage());
+ }
}
-
+
@Override
public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
accessor.reset(buffer);
@@ -69,20 +75,14 @@
}
@Override
- public void open() throws HyracksDataException {
- AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();
- RecordDescriptor recDesc = recordDescProvider.getInputRecordDescriptor(opDesc.getOperatorId(), 0);
- accessor = new FrameTupleAccessor(btreeOpHelper.getHyracksContext(), recDesc);
- IBTreeMetaDataFrame metaFrame = new MetaDataFrame();
+ public void close() throws HyracksDataException {
try {
- btreeOpHelper.init();
- btreeOpHelper.getBTree().open(btreeOpHelper.getBTreeFileId());
- bulkLoadCtx = btreeOpHelper.getBTree().beginBulkLoad(fillFactor, btreeOpHelper.getLeafFrame(), btreeOpHelper.getInteriorFrame(), metaFrame);
+ btreeOpHelper.getBTree().endBulkLoad(bulkLoadCtx);
} catch (Exception e) {
e.printStackTrace();
}
}
-
+
@Override
public void flush() throws HyracksDataException {
}
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
index 6874f30..3bdf4a2 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
@@ -49,9 +49,13 @@
File f = fileSplitProvider.getFileSplits()[partition].getLocalFile();
String fileName = f.getAbsolutePath();
+
+ Integer fileId = fileMappingProviderProvider.getFileMappingProvider().getFileId(fileName);
+ if(fileId == null) {
+ throw new HyracksDataException("Cannot drop B-Tree with name " + fileName + ". No file mapping exists.");
+ }
+ int btreeFileId = fileId;
- int btreeFileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, false);
-
// unregister btree instance
btreeRegistry.lock();
try {
@@ -59,16 +63,16 @@
} finally {
btreeRegistry.unlock();
}
-
+
+ // remove name to id mapping
+ fileMappingProviderProvider.getFileMappingProvider().unmapName(fileName);
+
// unregister file
fileManager.unregisterFile(btreeFileId);
if (f.exists()) {
f.delete();
}
-
- // remove name to id mapping
- fileMappingProviderProvider.getFileMappingProvider().unmapName(fileName);
}
@Override
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
index e423487..277938d 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
@@ -15,10 +15,12 @@
package edu.uci.ics.hyracks.storage.am.btree.dataflow;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import edu.uci.ics.hyracks.api.context.IHyracksContext;
import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeInteriorFrame;
import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrame;
@@ -49,32 +51,49 @@
this.partition = partition;
}
- void init() throws Exception {
+ void init() throws HyracksDataException {
IBufferCache bufferCache = opDesc.getBufferCacheProvider().getBufferCache();
FileManager fileManager = opDesc.getBufferCacheProvider().getFileManager();
IFileMappingProviderProvider fileMappingProviderProvider = opDesc.getFileMappingProviderProvider();
IFileSplitProvider fileSplitProvider = opDesc.getFileSplitProvider();
- //String ncDataPath = System.getProperty("NodeControllerDataPath");
File f = fileSplitProvider.getFileSplits()[partition].getLocalFile();
if(!f.exists()) {
File dir = new File(f.getParent());
dir.mkdirs();
}
- RandomAccessFile raf = new RandomAccessFile(f, "rw");
+ RandomAccessFile raf;
+ try {
+ raf = new RandomAccessFile(f, "rw");
+ } catch (FileNotFoundException e) {
+ throw new HyracksDataException(e.getMessage());
+ }
String fileName = f.getAbsolutePath();
- btreeFileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, createBTree);
+ Integer fileId = fileMappingProviderProvider.getFileMappingProvider().getFileId(fileName);
+ if(fileId == null) {
+ if(createBTree) {
+ fileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, createBTree);
+ }
+ else {
+ throw new HyracksDataException("Cannot get id for file " + fileName + ". File name has not been mapped.");
+ }
+ }
+ else {
+ if(createBTree) {
+ throw new HyracksDataException("Cannot map file " + fileName + " to an id. File name has already been mapped.");
+ }
+ }
+ btreeFileId = fileId;
if (!f.exists() && !createBTree) {
- throw new Exception("Trying to open btree from file " + fileName + " but file doesn't exist.");
+ throw new HyracksDataException("Trying to open btree from file " + fileName + " but file doesn't exist.");
}
- try {
- FileInfo fi = new FileInfo(btreeFileId, raf);
- fileManager.registerFile(fi);
- } catch (Exception e) {
+ if(createBTree) {
+ FileInfo fi = new FileInfo(btreeFileId, raf);
+ fileManager.registerFile(fi);
}
interiorFrame = opDesc.getInteriorFactory().getFrame();
@@ -90,7 +109,7 @@
// check if btree has already been registered by another thread
btree = btreeRegistry.get(btreeFileId);
if (btree == null) {
- // this thread should create and register the btee
+ // this thread should create and register the btree
IBinaryComparator[] comparators = new IBinaryComparator[opDesc.getComparatorFactories().length];
for (int i = 0; i < opDesc.getComparatorFactories().length; i++) {
@@ -102,7 +121,11 @@
btree = new BTree(bufferCache, opDesc.getInteriorFactory(), opDesc.getLeafFactory(), cmp);
if (createBTree) {
MetaDataFrame metaFrame = new MetaDataFrame();
- btree.create(btreeFileId, leafFrame, metaFrame);
+ try {
+ btree.create(btreeFileId, leafFrame, metaFrame);
+ } catch (Exception e) {
+ throw new HyracksDataException(e.getMessage());
+ }
}
btree.open(btreeFileId);
btreeRegistry.register(btreeFileId, btree);
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
index cbdb713..e02a37c 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
@@ -30,7 +30,8 @@
ByteBuffer writeBuffer = ctx.getResourceManager().allocateFrame();
FrameTupleAppender appender = new FrameTupleAppender(ctx);
appender.reset(writeBuffer, true);
- appender.append(fieldSlots, tupleData, 0, tupleSize);
+ if(fieldSlots != null && tupleData != null && tupleSize > 0)
+ appender.append(fieldSlots, tupleData, 0, tupleSize);
FrameUtils.flushFrame(writeBuffer, writer);
writer.close();
}
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
index 995ed23..35eccc9 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
@@ -33,4 +33,9 @@
public void unmapName(String name) {
map.remove(name);
}
+
+ @Override
+ public Integer getFileId(String name) {
+ return map.get(name);
+ }
}
diff --git a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
index abdf9d3..86e236d 100644
--- a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
+++ b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
@@ -29,7 +29,7 @@
public void registerFile(FileInfo fInfo) throws HyracksDataException {
if (fileRegistry.containsKey(fInfo.getFileId())) {
- throw new HyracksDataException("File with id " + fInfo.getFileId() + " is already registered");
+ throw new HyracksDataException("File " + fInfo.getFile().toString() + " with id " + fInfo.getFileId() + " is already registered");
}
fileRegistry.put(fInfo.getFileId(), fInfo);
}
diff --git a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
index 76f0ab8..6fb44a1 100644
--- a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
+++ b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
@@ -37,4 +37,14 @@
* @return void
*/
public void unmapName(String name);
+
+ /**
+ * Get file id of an already mapped file
+ *
+ * @param name
+ * - Name of the file
+ *
+ * @return The file id on a successful lookup, null if unsuccessful.
+ */
+ public Integer getFileId(String name);
}
\ No newline at end of file