Ported changes in storage common
git-svn-id: https://hyracks.googlecode.com/svn/branches/hyracks_storage_cleanup@238 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
index 5a03045..76350e4 100644
--- a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
+++ b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
@@ -3,9 +3,9 @@
import java.util.Hashtable;
import java.util.Map;
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-public class FileMappingProvider implements IFileMappingProvider {
+public class FileMappingProvider implements IFileMapProvider {
private static final long serialVersionUID = 1L;
private int nextFileId = 0;
diff --git a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProviderProvider.java b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProviderProvider.java
index 4f2c8f4..1738d81 100644
--- a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProviderProvider.java
+++ b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProviderProvider.java
@@ -1,7 +1,7 @@
package edu.uci.ics.hyracks.examples.btree.helper;
import edu.uci.ics.hyracks.storage.am.btree.dataflow.IFileMappingProviderProvider;
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
public class FileMappingProviderProvider implements IFileMappingProviderProvider {
private static final long serialVersionUID = 1L;
@@ -9,7 +9,7 @@
public static final IFileMappingProviderProvider INSTANCE = new FileMappingProviderProvider();
@Override
- public IFileMappingProvider getFileMappingProvider() {
+ public IFileMapProvider getFileMappingProvider() {
return RuntimeContext.getInstance().getFileMappingProvider();
}
}
diff --git a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/RuntimeContext.java b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/RuntimeContext.java
index d542ed9..fd8e58d 100644
--- a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/RuntimeContext.java
+++ b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/RuntimeContext.java
@@ -7,7 +7,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.file.FileManager;
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
public class RuntimeContext {
private static RuntimeContext INSTANCE;
@@ -15,7 +15,7 @@
private FileManager fileManager;
private IBufferCache bufferCache;
private BTreeRegistry btreeRegistry;
- private IFileMappingProvider fileMappingProvider;
+ private IFileMapProvider fileMappingProvider;
private RuntimeContext() {
}
@@ -64,7 +64,7 @@
return btreeRegistry;
}
- public IFileMappingProvider getFileMappingProvider() {
+ public IFileMapProvider getFileMappingProvider() {
return fileMappingProvider;
}
}
\ No newline at end of file
diff --git a/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java b/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
index d10d622..3fe3012 100644
--- a/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
+++ b/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
@@ -72,7 +72,7 @@
import edu.uci.ics.hyracks.storage.am.btree.impls.RangeSearchCursor;
import edu.uci.ics.hyracks.storage.am.btree.tuples.TypeAwareTupleWriterFactory;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
import edu.uci.ics.hyracks.storage.common.file.FileManager;
import edu.uci.ics.hyracks.tests.integration.AbstractIntegrationTest;
@@ -350,7 +350,7 @@
int fileIdA = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId("/tmp/btreetestA.ix", true);
File fA = new File("/tmp/btreetestA.ix");
RandomAccessFile rafA = new RandomAccessFile(fA, "rw");
- FileInfo fiA = new FileInfo(fileIdA, rafA);
+ FileHandle fiA = new FileHandle(fileIdA, rafA);
fileManager.registerFile(fiA);
BTree btreeA = new BTree(bufferCache, primaryInteriorFrameFactory, primaryLeafFrameFactory, primaryCmp);
btreeA.create(fileIdA, primaryLeafFrameFactory.getFrame(), new MetaDataFrame());
@@ -361,7 +361,7 @@
int fileIdB = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId("/tmp/btreetestB.ix", true);
File fB = new File("/tmp/btreetestB.ix");
RandomAccessFile rafB = new RandomAccessFile(fB, "rw");
- FileInfo fiB = new FileInfo(fileIdB, rafB);
+ FileHandle fiB = new FileHandle(fileIdB, rafB);
fileManager.registerFile(fiB);
BTree btreeB = new BTree(bufferCache, secondaryInteriorFrameFactory, secondaryLeafFrameFactory, secondaryCmp);
btreeB.create(fileIdB, secondaryLeafFrameFactory.getFrame(), new MetaDataFrame());
@@ -372,7 +372,7 @@
int fileIdC = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId("/tmp/btreetestC.ix", true);
File fC = new File("/tmp/btreetestC.ix");
RandomAccessFile rafC = new RandomAccessFile(fC, "rw");
- FileInfo fiC = new FileInfo(fileIdC, rafC);
+ FileHandle fiC = new FileHandle(fileIdC, rafC);
fileManager.registerFile(fiC);
BTree btreeC = new BTree(bufferCache, secondaryInteriorFrameFactory, secondaryLeafFrameFactory, secondaryCmp);
btreeC.create(fileIdC, secondaryLeafFrameFactory.getFrame(), new MetaDataFrame());
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/api/DummySMI.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/api/DummySMI.java
new file mode 100644
index 0000000..cf36a70
--- /dev/null
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/api/DummySMI.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package edu.uci.ics.hyracks.storage.am.btree.api;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.storage.common.IStorageManagerInterface;
+import edu.uci.ics.hyracks.storage.common.buffercache.BufferCache;
+import edu.uci.ics.hyracks.storage.common.buffercache.ClockPageReplacementStrategy;
+import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
+import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
+import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
+import edu.uci.ics.hyracks.storage.common.buffercache.IPageReplacementStrategy;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
+
+public class DummySMI implements IStorageManagerInterface {
+
+ private static final long serialVersionUID = 1L;
+
+ private transient IBufferCache bufferCache = null;
+ private transient IFileMapManager fmManager;
+ private static final int PAGE_SIZE = 8192;
+ private static final int NUM_PAGES = 40;
+
+ public DummySMI() {
+ }
+
+ @Override
+ public synchronized IBufferCache getBufferCache() {
+ if (bufferCache == null) {
+ ICacheMemoryAllocator allocator = new HeapBufferAllocator();
+ IPageReplacementStrategy prs = new ClockPageReplacementStrategy();
+ fmManager = new IFileMapManager() {
+ private Map<Integer, String> id2nameMap = new HashMap<Integer, String>();
+ private Map<String, Integer> name2IdMap = new HashMap<String, Integer>();
+ private int idCounter = 0;
+
+ @Override
+ public String lookupFileName(int fileId) throws HyracksDataException {
+ String fName = id2nameMap.get(fileId);
+ if (fName == null) {
+ throw new HyracksDataException("No mapping found for id: " + fileId);
+ }
+ return fName;
+ }
+
+ @Override
+ public int lookupFileId(String fileName) throws HyracksDataException {
+ Integer fileId = name2IdMap.get(fileName);
+ if (fileId == null) {
+ throw new HyracksDataException("No mapping found for name: " + fileName);
+ }
+ return fileId;
+ }
+
+ @Override
+ public boolean isMapped(String fileName) {
+ return name2IdMap.containsKey(fileName);
+ }
+
+ @Override
+ public boolean isMapped(int fileId) {
+ return id2nameMap.containsKey(fileId);
+ }
+
+ @Override
+ public void unregisterFile(int fileId) throws HyracksDataException {
+ String fileName = id2nameMap.remove(fileId);
+ name2IdMap.remove(fileName);
+ }
+
+ @Override
+ public void registerFile(String fileName) throws HyracksDataException {
+ Integer fileId = idCounter++;
+ id2nameMap.put(fileId, fileName);
+ name2IdMap.put(fileName, fileId);
+ }
+ };
+ bufferCache = new BufferCache(allocator, prs, fmManager, PAGE_SIZE, NUM_PAGES);
+ }
+
+ return bufferCache;
+ }
+
+ public IFileMapProvider getFileMapProvider() {
+ return fmManager;
+ }
+}
\ No newline at end of file
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/AbstractBTreeOperatorDescriptor.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/AbstractBTreeOperatorDescriptor.java
index 2ceb58a..3f42e8e 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/AbstractBTreeOperatorDescriptor.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/AbstractBTreeOperatorDescriptor.java
@@ -23,71 +23,69 @@
import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeInteriorFrameFactory;
import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrameFactory;
+import edu.uci.ics.hyracks.storage.common.IStorageManagerInterface;
public abstract class AbstractBTreeOperatorDescriptor extends AbstractSingleActivityOperatorDescriptor {
-
- private static final long serialVersionUID = 1L;
-
- protected final IFileMappingProviderProvider fileMappingProviderProvider;
-
- protected final IFileSplitProvider fileSplitProvider;
-
- protected final IBinaryComparatorFactory[] comparatorFactories;
-
- protected final IBTreeInteriorFrameFactory interiorFrameFactory;
- protected final IBTreeLeafFrameFactory leafFrameFactory;
-
- protected final IBufferCacheProvider bufferCacheProvider;
- protected final IBTreeRegistryProvider btreeRegistryProvider;
-
- protected final ITypeTrait[] typeTraits;
-
- public AbstractBTreeOperatorDescriptor(JobSpecification spec, int inputArity, int outputArity, RecordDescriptor recDesc, IBufferCacheProvider bufferCacheProvider, IBTreeRegistryProvider btreeRegistryProvider, IFileSplitProvider fileSplitProvider, IFileMappingProviderProvider fileMappingProviderProvider, IBTreeInteriorFrameFactory interiorFactory, IBTreeLeafFrameFactory leafFactory, ITypeTrait[] typeTraits, IBinaryComparatorFactory[] comparatorFactories) {
+
+ private static final long serialVersionUID = 1L;
+
+ protected final IFileSplitProvider fileSplitProvider;
+
+ protected final IBinaryComparatorFactory[] comparatorFactories;
+
+ protected final IBTreeInteriorFrameFactory interiorFrameFactory;
+ protected final IBTreeLeafFrameFactory leafFrameFactory;
+
+ protected final IStorageManagerInterface smi;
+ protected final IBTreeRegistryProvider btreeRegistryProvider;
+
+ protected final ITypeTrait[] typeTraits;
+
+ public AbstractBTreeOperatorDescriptor(JobSpecification spec, int inputArity, int outputArity,
+ RecordDescriptor recDesc, IStorageManagerInterface smi, IBTreeRegistryProvider btreeRegistryProvider,
+ IFileSplitProvider fileSplitProvider, IBTreeInteriorFrameFactory interiorFactory,
+ IBTreeLeafFrameFactory leafFactory, ITypeTrait[] typeTraits, IBinaryComparatorFactory[] comparatorFactories) {
super(spec, inputArity, outputArity);
this.fileSplitProvider = fileSplitProvider;
- this.fileMappingProviderProvider = fileMappingProviderProvider;
- this.bufferCacheProvider = bufferCacheProvider;
- this.btreeRegistryProvider = btreeRegistryProvider;
+ this.smi = smi;
+ this.btreeRegistryProvider = btreeRegistryProvider;
this.interiorFrameFactory = interiorFactory;
this.leafFrameFactory = leafFactory;
this.typeTraits = typeTraits;
this.comparatorFactories = comparatorFactories;
- if(outputArity > 0) recordDescriptors[0] = recDesc;
+ if (outputArity > 0)
+ recordDescriptors[0] = recDesc;
}
- public IFileSplitProvider getFileSplitProvider() {
- return fileSplitProvider;
- }
+ public IFileSplitProvider getFileSplitProvider() {
+ return fileSplitProvider;
+ }
- public IFileMappingProviderProvider getFileMappingProviderProvider() {
- return fileMappingProviderProvider;
- }
+ public IBinaryComparatorFactory[] getComparatorFactories() {
+ return comparatorFactories;
+ }
- public IBinaryComparatorFactory[] getComparatorFactories() {
- return comparatorFactories;
- }
-
- public ITypeTrait[] getTypeTraits() {
- return typeTraits;
- }
-
- public IBTreeInteriorFrameFactory getInteriorFactory() {
- return interiorFrameFactory;
- }
+ public ITypeTrait[] getTypeTraits() {
+ return typeTraits;
+ }
- public IBTreeLeafFrameFactory getLeafFactory() {
- return leafFrameFactory;
- }
+ public IBTreeInteriorFrameFactory getInteriorFactory() {
+ return interiorFrameFactory;
+ }
- public IBufferCacheProvider getBufferCacheProvider() {
- return bufferCacheProvider;
- }
+ public IBTreeLeafFrameFactory getLeafFactory() {
+ return leafFrameFactory;
+ }
- public IBTreeRegistryProvider getBtreeRegistryProvider() {
- return btreeRegistryProvider;
- }
-
- public RecordDescriptor getRecordDescriptor() {
- return recordDescriptors[0];
- }
+ public IStorageManagerInterface getSMI() {
+ return smi;
+ }
+
+ public IBTreeRegistryProvider getBtreeRegistryProvider() {
+ return btreeRegistryProvider;
+ }
+
+ public RecordDescriptor getRecordDescriptor() {
+ return recordDescriptors[0];
+ }
}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
index 681eb9d..4ca44e8 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
@@ -28,8 +28,8 @@
import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
import edu.uci.ics.hyracks.storage.am.btree.impls.MultiComparator;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
-import edu.uci.ics.hyracks.storage.common.file.FileManager;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
final class BTreeOpHelper {
@@ -60,9 +60,7 @@
void init() throws HyracksDataException {
- IBufferCache bufferCache = opDesc.getBufferCacheProvider().getBufferCache();
- FileManager fileManager = opDesc.getBufferCacheProvider().getFileManager();
- IFileMappingProviderProvider fileMappingProviderProvider = opDesc.getFileMappingProviderProvider();
+ IBufferCache bufferCache = opDesc.getSMI().getBufferCache();
IFileSplitProvider fileSplitProvider = opDesc.getFileSplitProvider();
File f = fileSplitProvider.getFileSplits()[partition].getLocalFile();
@@ -78,7 +76,7 @@
}
String fileName = f.getAbsolutePath();
- Integer fileId = fileMappingProviderProvider.getFileMappingProvider().getFileId(fileName);
+ Integer fileId = opDesc.getSMI().getFileMapProvider().lookupFileId(fileName);
switch(mode) {
@@ -116,7 +114,7 @@
btreeFileId = fileId;
if(mode == BTreeMode.CREATE_BTREE || mode == BTreeMode.ENLIST_BTREE) {
- FileInfo fi = new FileInfo(btreeFileId, raf);
+ FileHandle fi = new FileHandle(btreeFileId, raf);
fileManager.registerFile(fi);
}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BufferCacheProvider.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BufferCacheProvider.java
deleted file mode 100644
index 289d99a..0000000
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BufferCacheProvider.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package edu.uci.ics.hyracks.storage.am.btree.dataflow;
-
-import java.nio.ByteBuffer;
-
-import edu.uci.ics.hyracks.storage.common.buffercache.BufferCache;
-import edu.uci.ics.hyracks.storage.common.buffercache.ClockPageReplacementStrategy;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
-import edu.uci.ics.hyracks.storage.common.buffercache.IPageReplacementStrategy;
-import edu.uci.ics.hyracks.storage.common.file.FileManager;
-
-public class BufferCacheProvider implements IBufferCacheProvider {
-
- private static final long serialVersionUID = 1L;
-
- private static IBufferCache bufferCache = null;
- private static FileManager fileManager = null;
- private static final int PAGE_SIZE = 8192;
- private static final int NUM_PAGES = 40;
-
- public void reset() {
- bufferCache = null;
- fileManager = null;
- }
-
- @Override
- public synchronized IBufferCache getBufferCache() {
-
- if(bufferCache == null) {
- if(fileManager == null) fileManager = new FileManager();
- ICacheMemoryAllocator allocator = new BufferAllocator();
- IPageReplacementStrategy prs = new ClockPageReplacementStrategy();
- bufferCache = new BufferCache(allocator, prs, fileManager, PAGE_SIZE, NUM_PAGES);
- }
-
- return bufferCache;
- }
-
- @Override
- public synchronized FileManager getFileManager() {
- if(fileManager == null) fileManager = new FileManager();
- return fileManager;
- }
-
- public class BufferAllocator implements ICacheMemoryAllocator {
- @Override
- public ByteBuffer[] allocate(int pageSize, int numPages) {
- ByteBuffer[] buffers = new ByteBuffer[numPages];
- for (int i = 0; i < numPages; ++i) {
- buffers[i] = ByteBuffer.allocate(pageSize);
- }
- return buffers;
- }
- }
-}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
deleted file mode 100644
index f4a68bf..0000000
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.btree.dataflow;
-
-import java.util.Hashtable;
-import java.util.Map;
-
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
-
-public class FileMappingProvider implements IFileMappingProvider {
-
- private static final long serialVersionUID = 1L;
- private int nextFileId = 0;
- private Map<String, Integer> map = new Hashtable<String, Integer>();
-
- @Override
- public synchronized Integer mapNameToFileId(String name, boolean create) {
- Integer val = map.get(name);
- if(create) {
- if(val == null) {
- int ret = nextFileId;
- map.put(name, nextFileId++);
- return ret;
- }
- else {
- return null; // create requested but value already exists
- }
- }
- else {
- return val; // just return value
- }
- }
-
- @Override
- public void unmapName(String name) {
- map.remove(name);
- }
-
- @Override
- public Integer getFileId(String name) {
- return map.get(name);
- }
-}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProviderProvider.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProviderProvider.java
deleted file mode 100644
index edf1898..0000000
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProviderProvider.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.btree.dataflow;
-
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
-
-public class FileMappingProviderProvider implements IFileMappingProviderProvider {
- private static final long serialVersionUID = 1L;
-
- private static IFileMappingProvider fileMappingProvider = null;
-
- @Override
- public IFileMappingProvider getFileMappingProvider() {
- if(fileMappingProvider == null) {
- fileMappingProvider = new FileMappingProvider();
- }
- return fileMappingProvider;
- }
-}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IFileMappingProviderProvider.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IFileMappingProviderProvider.java
deleted file mode 100644
index b88e058..0000000
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IFileMappingProviderProvider.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.btree.dataflow;
-
-import java.io.Serializable;
-
-import edu.uci.ics.hyracks.storage.common.file.IFileMappingProvider;
-
-public interface IFileMappingProviderProvider extends Serializable {
- public IFileMappingProvider getFileMappingProvider();
-}
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/BTree.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/BTree.java
index de0122d..ef1421b 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/BTree.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/BTree.java
@@ -35,7 +35,7 @@
import edu.uci.ics.hyracks.storage.am.btree.frames.NSMInteriorFrame;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
public class BTree {
@@ -113,7 +113,7 @@
if(created) return;
// initialize meta data page
- ICachedPage metaNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, metaDataPage), false);
+ ICachedPage metaNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, metaDataPage), false);
pins++;
metaNode.acquireWriteLatch();
@@ -130,7 +130,7 @@
}
// initialize root page
- ICachedPage rootNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, rootPage), true);
+ ICachedPage rootNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, rootPage), true);
pins++;
rootNode.acquireWriteLatch();
@@ -162,7 +162,7 @@
}
private int getFreePage(IBTreeMetaDataFrame metaFrame) throws Exception {
- ICachedPage metaNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, metaDataPage), false);
+ ICachedPage metaNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, metaDataPage), false);
pins++;
metaNode.acquireWriteLatch();
@@ -175,7 +175,7 @@
if (freePage < 0) { // no free page entry on this page
int nextPage = metaFrame.getNextPage();
if (nextPage > 0) { // sibling may have free pages
- ICachedPage nextNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, nextPage), false);
+ ICachedPage nextNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, nextPage), false);
pins++;
nextNode.acquireWriteLatch();
@@ -237,7 +237,7 @@
// root page is special, don't add it to free pages
if (freePage == rootPage) return;
- ICachedPage metaNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, metaDataPage), false);
+ ICachedPage metaNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, metaDataPage), false);
pins++;
metaNode.acquireWriteLatch();
@@ -256,7 +256,7 @@
throw new Exception("Inconsistent Meta Page State. It has no space, but it also has no entries.");
}
- ICachedPage newNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, newPage), false);
+ ICachedPage newNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, newPage), false);
pins++;
newNode.acquireWriteLatch();
@@ -293,7 +293,7 @@
}
public int getMaxPage(IBTreeMetaDataFrame metaFrame) throws HyracksDataException {
- ICachedPage metaNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, metaDataPage), false);
+ ICachedPage metaNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, metaDataPage), false);
pins++;
metaNode.acquireWriteLatch();
@@ -319,7 +319,7 @@
public void printTree(int pageId, ICachedPage parent, boolean unpin, IBTreeLeafFrame leafFrame,
IBTreeInteriorFrame interiorFrame, ISerializerDeserializer[] fields) throws Exception {
- ICachedPage node = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ ICachedPage node = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
node.acquireReadLatch();
readLatchesAcquired++;
@@ -378,7 +378,7 @@
int currentPageId = rootPage + 1;
int maxPageId = -1;
- ICachedPage metaNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, metaDataPage), false);
+ ICachedPage metaNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, metaDataPage), false);
pins++;
metaNode.acquireReadLatch();
@@ -395,7 +395,7 @@
unpins++;
}
- ICachedPage page = bufferCache.pin(FileInfo.getDiskPageId(fileId, currentPageId), false);
+ ICachedPage page = bufferCache.pin(FileHandle.getDiskPageId(fileId, currentPageId), false);
page.acquireReadLatch();
cursor.setBufferCache(bufferCache);
cursor.setFileId(fileId);
@@ -435,7 +435,7 @@
ICachedPage originalPage = ctx.interiorFrame.getPage();
for(int i = 0; i < ctx.smPages.size(); i++) {
int pageId = ctx.smPages.get(i);
- ICachedPage smPage = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ ICachedPage smPage = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
smPage.acquireWriteLatch(); // TODO: would like to set page dirty without latching
writeLatchesAcquired++;
@@ -463,18 +463,18 @@
currentLevel++;
// make sure the root is always at the same level
- ICachedPage leftNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, ctx.splitKey.getLeftPage()), false);
+ ICachedPage leftNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, ctx.splitKey.getLeftPage()), false);
pins++;
leftNode.acquireWriteLatch(); // TODO: think about whether latching is really required
writeLatchesAcquired++;
try {
- ICachedPage rightNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, ctx.splitKey.getRightPage()), false);
+ ICachedPage rightNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, ctx.splitKey.getRightPage()), false);
pins++;
rightNode.acquireWriteLatch(); // TODO: think about whether latching is really required
writeLatchesAcquired++;
try {
int newLeftId = getFreePage(ctx.metaFrame);
- ICachedPage newLeftNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, newLeftId), true);
+ ICachedPage newLeftNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, newLeftId), true);
pins++;
newLeftNode.acquireWriteLatch(); // TODO: think about whether latching is really required
writeLatchesAcquired++;
@@ -596,7 +596,7 @@
int rightSiblingPageId = ctx.leafFrame.getNextLeaf();
ICachedPage rightSibling = null;
if (rightSiblingPageId > 0) {
- rightSibling = bufferCache.pin(FileInfo.getDiskPageId(fileId, rightSiblingPageId), false);
+ rightSibling = bufferCache.pin(FileHandle.getDiskPageId(fileId, rightSiblingPageId), false);
pins++;
}
@@ -607,7 +607,7 @@
try {
int rightPageId = getFreePage(ctx.metaFrame);
- ICachedPage rightNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, rightPageId), true);
+ ICachedPage rightNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, rightPageId), true);
pins++;
rightNode.acquireWriteLatch();
writeLatchesAcquired++;
@@ -692,7 +692,7 @@
case INSUFFICIENT_SPACE: {
splitsByLevel[ctx.interiorFrame.getLevel()]++; // debug
int rightPageId = getFreePage(ctx.metaFrame);
- ICachedPage rightNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, rightPageId), true);
+ ICachedPage rightNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, rightPageId), true);
pins++;
rightNode.acquireWriteLatch();
writeLatchesAcquired++;
@@ -774,7 +774,7 @@
// tree is empty, reset level to zero
if (ctx.splitKey.getBuffer() != null) {
- ICachedPage rootNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, rootPage), false);
+ ICachedPage rootNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, rootPage), false);
pins++;
rootNode.acquireWriteLatch();
writeLatchesAcquired++;
@@ -812,12 +812,12 @@
int prevLeaf = ctx.leafFrame.getPrevLeaf();
if (prevLeaf > 0)
- leftNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, prevLeaf), false);
+ leftNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, prevLeaf), false);
try {
if (nextLeaf > 0)
- rightNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, nextLeaf), false);
+ rightNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, nextLeaf), false);
try {
treeLatch.writeLock().lock();
@@ -957,7 +957,7 @@
}
private boolean isConsistent(int pageId, BTreeOpContext ctx) throws Exception {
- ICachedPage node = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ ICachedPage node = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
node.acquireReadLatch();
readLatchesAcquired++;
@@ -975,7 +975,7 @@
}
private void performOp(int pageId, ICachedPage parent, BTreeOpContext ctx) throws Exception {
- ICachedPage node = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ ICachedPage node = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
ctx.interiorFrame.setPage(node);
@@ -1034,7 +1034,7 @@
case BTO_INSERT: {
if (ctx.splitKey.getBuffer() != null) {
- node = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ node = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
node.acquireWriteLatch();
writeLatchesAcquired++;
@@ -1054,7 +1054,7 @@
case BTO_DELETE: {
if (ctx.splitKey.getBuffer() != null) {
- node = bufferCache.pin(FileInfo.getDiskPageId(fileId, pageId), false);
+ node = bufferCache.pin(FileHandle.getDiskPageId(fileId, pageId), false);
pins++;
node.acquireWriteLatch();
writeLatchesAcquired++;
@@ -1169,7 +1169,7 @@
NodeFrontier leafFrontier = new NodeFrontier(leafFrame.createTupleReference());
leafFrontier.pageId = getFreePage(metaFrame);
- leafFrontier.page = bufferCache.pin(FileInfo.getDiskPageId(fileId, leafFrontier.pageId), bulkNewPage);
+ leafFrontier.page = bufferCache.pin(FileHandle.getDiskPageId(fileId, leafFrontier.pageId), bulkNewPage);
leafFrontier.page.acquireWriteLatch();
interiorFrame.setPage(leafFrontier.page);
@@ -1192,7 +1192,7 @@
private void addLevel() throws Exception {
NodeFrontier frontier = new NodeFrontier(tupleWriter.createTupleReference());
frontier.pageId = getFreePage(metaFrame);
- frontier.page = bufferCache.pin(FileInfo.getDiskPageId(fileId, frontier.pageId), bulkNewPage);
+ frontier.page = bufferCache.pin(FileHandle.getDiskPageId(fileId, frontier.pageId), bulkNewPage);
frontier.page.acquireWriteLatch();
frontier.lastTuple.setFieldCount(cmp.getKeyFieldCount());
interiorFrame.setPage(frontier.page);
@@ -1236,7 +1236,7 @@
ctx.splitKey.setRightPage(frontier.pageId);
propagateBulk(ctx, level + 1);
- frontier.page = bufferCache.pin(FileInfo.getDiskPageId(fileId, frontier.pageId), bulkNewPage);
+ frontier.page = bufferCache.pin(FileHandle.getDiskPageId(fileId, frontier.pageId), bulkNewPage);
frontier.page.acquireWriteLatch();
ctx.interiorFrame.setPage(frontier.page);
ctx.interiorFrame.initBuffer((byte) level);
@@ -1290,7 +1290,7 @@
ctx.splitKey.setRightPage(leafFrontier.pageId);
propagateBulk(ctx, 1);
- leafFrontier.page = bufferCache.pin(FileInfo.getDiskPageId(fileId, leafFrontier.pageId), bulkNewPage);
+ leafFrontier.page = bufferCache.pin(FileHandle.getDiskPageId(fileId, leafFrontier.pageId), bulkNewPage);
leafFrontier.page.acquireWriteLatch();
leafFrame.setPage(leafFrontier.page);
leafFrame.initBuffer((byte) 0);
@@ -1308,7 +1308,7 @@
public void endBulkLoad(BulkLoadContext ctx) throws Exception {
// copy root
- ICachedPage rootNode = bufferCache.pin(FileInfo.getDiskPageId(fileId, rootPage), bulkNewPage);
+ ICachedPage rootNode = bufferCache.pin(FileHandle.getDiskPageId(fileId, rootPage), bulkNewPage);
rootNode.acquireWriteLatch();
try {
ICachedPage toBeRoot = ctx.nodeFrontiers.get(ctx.nodeFrontiers.size() - 1).page;
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/DiskOrderScanCursor.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/DiskOrderScanCursor.java
index 0784692..95efa6a 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/DiskOrderScanCursor.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/DiskOrderScanCursor.java
@@ -21,7 +21,7 @@
import edu.uci.ics.hyracks.storage.am.btree.api.ISearchPredicate;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
public class DiskOrderScanCursor implements IBTreeCursor {
@@ -63,7 +63,7 @@
while( (frame.getLevel() != 0 || skipCurrent) && (currentPageId <= maxPageId) || (frame.getTupleCount() == 0) ) {
currentPageId++;
- ICachedPage nextPage = bufferCache.pin(FileInfo.getDiskPageId(fileId, currentPageId), false);
+ ICachedPage nextPage = bufferCache.pin(FileHandle.getDiskPageId(fileId, currentPageId), false);
nextPage.acquireReadLatch();
page.releaseReadLatch();
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/RangeSearchCursor.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/RangeSearchCursor.java
index 9970114..94d60f4 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/RangeSearchCursor.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/impls/RangeSearchCursor.java
@@ -22,7 +22,7 @@
import edu.uci.ics.hyracks.storage.am.btree.api.ISearchPredicate;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
public class RangeSearchCursor implements IBTreeCursor {
@@ -70,7 +70,7 @@
}
if(nextLeafPage >= 0) {
- ICachedPage nextLeaf = bufferCache.pin(FileInfo.getDiskPageId(fileId, nextLeafPage), false);
+ ICachedPage nextLeaf = bufferCache.pin(FileHandle.getDiskPageId(fileId, nextLeafPage), false);
nextLeaf.acquireReadLatch();
page.releaseReadLatch();
diff --git a/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeFieldPrefixNSMTest.java b/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeFieldPrefixNSMTest.java
index 0730254..3cfdf46 100644
--- a/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeFieldPrefixNSMTest.java
+++ b/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeFieldPrefixNSMTest.java
@@ -53,7 +53,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
import edu.uci.ics.hyracks.storage.common.buffercache.IPageReplacementStrategy;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
import edu.uci.ics.hyracks.storage.common.file.FileManager;
public class BTreeFieldPrefixNSMTest {
@@ -130,7 +130,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -154,7 +154,7 @@
Random rnd = new Random();
rnd.setSeed(50);
- ICachedPage page = bufferCache.pin(FileInfo.getDiskPageId(fileId, 0), false);
+ ICachedPage page = bufferCache.pin(FileHandle.getDiskPageId(fileId, 0), false);
try {
IPrefixSlotManager slotManager = new FieldPrefixSlotManager();
diff --git a/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeTest.java b/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeTest.java
index 78b6d4d..c448502 100644
--- a/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeTest.java
+++ b/hyracks-storage-am-btree/src/test/java/edu/uci/ics/hyracks/storage/am/btree/BTreeTest.java
@@ -65,7 +65,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
import edu.uci.ics.hyracks.storage.common.buffercache.IPageReplacementStrategy;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
import edu.uci.ics.hyracks.storage.common.file.FileManager;
@SuppressWarnings("unchecked")
@@ -117,7 +117,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -335,7 +335,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -523,7 +523,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -703,7 +703,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -869,7 +869,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
@@ -1028,7 +1028,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
diff --git a/hyracks-storage-am-invertedindex/src/test/java/edu/uci/ics/hyracks/storage/am/invertedindex/searchers/SimpleConjunctiveSearcherTest.java b/hyracks-storage-am-invertedindex/src/test/java/edu/uci/ics/hyracks/storage/am/invertedindex/searchers/SimpleConjunctiveSearcherTest.java
index 788e01b..34c3714 100644
--- a/hyracks-storage-am-invertedindex/src/test/java/edu/uci/ics/hyracks/storage/am/invertedindex/searchers/SimpleConjunctiveSearcherTest.java
+++ b/hyracks-storage-am-invertedindex/src/test/java/edu/uci/ics/hyracks/storage/am/invertedindex/searchers/SimpleConjunctiveSearcherTest.java
@@ -52,7 +52,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
import edu.uci.ics.hyracks.storage.common.buffercache.IPageReplacementStrategy;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
import edu.uci.ics.hyracks.storage.common.file.FileManager;
public class SimpleConjunctiveSearcherTest {
@@ -91,7 +91,7 @@
File f = new File(tmpDir + "/" + "btreetest.bin");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int fileId = 0;
- FileInfo fi = new FileInfo(fileId, raf);
+ FileHandle fi = new FileHandle(fileId, raf);
fileManager.registerFile(fi);
// declare fields
diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IBufferCacheProvider.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/IStorageManagerInterface.java
similarity index 72%
rename from hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IBufferCacheProvider.java
rename to hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/IStorageManagerInterface.java
index c1a0eb4..ad6f743 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/IBufferCacheProvider.java
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/IStorageManagerInterface.java
@@ -12,15 +12,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-package edu.uci.ics.hyracks.storage.am.btree.dataflow;
+package edu.uci.ics.hyracks.storage.common;
import java.io.Serializable;
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.FileManager;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-public interface IBufferCacheProvider extends Serializable {
- public IBufferCache getBufferCache();
- public FileManager getFileManager();
-}
+public interface IStorageManagerInterface extends Serializable {
+ public IBufferCache getBufferCache();
+
+ public IFileMapProvider getFileMapProvider();
+}
\ No newline at end of file
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/BufferCache.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/BufferCache.java
index 3dcf8dc..331c48c 100644
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/BufferCache.java
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/BufferCache.java
@@ -15,19 +15,24 @@
package edu.uci.ics.hyracks.storage.common.buffercache;
import java.io.IOException;
+import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.logging.Logger;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.storage.common.file.FileInfo;
-import edu.uci.ics.hyracks.storage.common.file.FileManager;
+import edu.uci.ics.hyracks.storage.common.file.FileHandle;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
public class BufferCache implements IBufferCacheInternal {
+ private static final Logger LOGGER = Logger.getLogger(BufferCache.class.getName());
private static final int MAP_FACTOR = 2;
private static final int MAX_VICTIMIZATION_TRY_COUNT = 3;
@@ -37,13 +42,14 @@
private final CachedPage[] cachedPages;
private final CacheBucket[] pageMap;
private final IPageReplacementStrategy pageReplacementStrategy;
- private final FileManager fileManager;
+ private final IFileMapManager fileMapManager;
private final CleanerThread cleanerThread;
+ private final Map<Integer, FileHandle> fileInfoMap;
private boolean closed;
public BufferCache(ICacheMemoryAllocator allocator, IPageReplacementStrategy pageReplacementStrategy,
- FileManager fileManager, int pageSize, int numPages) {
+ IFileMapManager fileMapManager, int pageSize, int numPages) {
this.pageSize = pageSize;
this.numPages = numPages;
pageReplacementStrategy.setBufferCache(this);
@@ -57,7 +63,8 @@
pageMap[i] = new CacheBucket();
}
this.pageReplacementStrategy = pageReplacementStrategy;
- this.fileManager = fileManager;
+ this.fileMapManager = fileMapManager;
+ fileInfoMap = new HashMap<Integer, FileHandle>();
cleanerThread = new CleanerThread();
cleanerThread.start();
closed = false;
@@ -269,21 +276,31 @@
}
private void read(CachedPage cPage) throws HyracksDataException {
- FileInfo fInfo = fileManager.getFileInfo(FileInfo.getFileId(cPage.dpid));
+ FileHandle fInfo = getFileInfo(cPage);
try {
cPage.buffer.clear();
- fInfo.getFileChannel().read(cPage.buffer, (long) FileInfo.getPageId(cPage.dpid) * pageSize);
+ fInfo.getFileChannel().read(cPage.buffer, (long) FileHandle.getPageId(cPage.dpid) * pageSize);
} catch (IOException e) {
throw new HyracksDataException(e);
}
}
+ private FileHandle getFileInfo(CachedPage cPage) throws HyracksDataException {
+ synchronized (fileInfoMap) {
+ FileHandle fInfo = fileInfoMap.get(FileHandle.getFileId(cPage.dpid));
+ if (fInfo == null) {
+ throw new HyracksDataException("No such file mapped");
+ }
+ return fInfo;
+ }
+ }
+
private void write(CachedPage cPage) throws HyracksDataException {
- FileInfo fInfo = fileManager.getFileInfo(FileInfo.getFileId(cPage.dpid));
+ FileHandle fInfo = getFileInfo(cPage);
try {
cPage.buffer.position(0);
cPage.buffer.limit(pageSize);
- fInfo.getFileChannel().write(cPage.buffer, (long) FileInfo.getPageId(cPage.dpid) * pageSize);
+ fInfo.getFileChannel().write(cPage.buffer, (long) FileHandle.getPageId(cPage.dpid) * pageSize);
} catch (IOException e) {
throw new HyracksDataException(e);
}
@@ -467,4 +484,108 @@
}
}
}
+
+ @Override
+ public void createFile(String fileName) throws HyracksDataException {
+ LOGGER.info("Deleting file: " + fileName + " in cache: " + this);
+ synchronized (fileInfoMap) {
+ fileMapManager.registerFile(fileName);
+ }
+ }
+
+ @Override
+ public void openFile(int fileId) throws HyracksDataException {
+ LOGGER.info("Opening file: " + fileId + " in cache: " + this);
+ synchronized (fileInfoMap) {
+ FileHandle fInfo;
+ fInfo = fileInfoMap.get(fileId);
+ if (fInfo == null) {
+ String fileName = fileMapManager.lookupFileName(fileId);
+ try {
+ fInfo = new FileHandle(fileId, new RandomAccessFile(fileName, "rw"));
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ fileInfoMap.put(fileId, fInfo);
+ }
+ fInfo.incReferenceCount();
+ }
+ }
+
+ private void sweepAndFlush(int fileId) throws HyracksDataException {
+ for (int i = 0; i < pageMap.length; ++i) {
+ CacheBucket bucket = pageMap[i];
+ bucket.bucketLock.lock();
+ try {
+ CachedPage prev = bucket.cachedPage;
+ while (prev != null) {
+ CachedPage cPage = prev.next;
+ if (cPage == null) {
+ break;
+ }
+ if (invalidateIfFileIdMatch(fileId, cPage)) {
+ prev.next = cPage.next;
+ cPage.next = null;
+ } else {
+ prev = cPage;
+ }
+ }
+ // Take care of the head of the chain.
+ if (bucket.cachedPage != null) {
+ if (invalidateIfFileIdMatch(fileId, bucket.cachedPage)) {
+ CachedPage cPage = bucket.cachedPage;
+ bucket.cachedPage = bucket.cachedPage.next;
+ cPage.next = null;
+ }
+ }
+ } finally {
+ bucket.bucketLock.unlock();
+ }
+ }
+ }
+
+ private boolean invalidateIfFileIdMatch(int fileId, CachedPage cPage) throws HyracksDataException {
+ if (FileHandle.getFileId(cPage.dpid) == fileId) {
+ if (cPage.dirty.get()) {
+ write(cPage);
+ cPage.dirty.set(false);
+ cPage.pinCount.decrementAndGet();
+ }
+ System.err.println("PinCount: " + cPage.pinCount.get());
+ if (cPage.pinCount.get() != 0) {
+ throw new IllegalStateException("Page is pinned and file is being closed");
+ }
+ cPage.valid = false;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void closeFile(int fileId) throws HyracksDataException {
+ LOGGER.info("Closing file: " + fileId + " in cache: " + this);
+ synchronized (fileInfoMap) {
+ FileHandle fInfo = fileInfoMap.get(fileId);
+ if (fInfo == null) {
+ throw new HyracksDataException("Closing unopened file");
+ }
+ if (fInfo.decReferenceCount() <= 0) {
+ sweepAndFlush(fileId);
+ fileInfoMap.remove(fileId);
+ fInfo.close();
+ }
+ }
+ }
+
+ @Override
+ public synchronized void deleteFile(int fileId) throws HyracksDataException {
+ LOGGER.info("Deleting file: " + fileId + " in cache: " + this);
+ synchronized (fileInfoMap) {
+ FileHandle fInfo = fileInfoMap.get(fileId);
+ if (fInfo != null) {
+ throw new HyracksDataException("Deleting open file");
+ }
+ fileMapManager.unregisterFile(fileId);
+ }
+ }
}
\ No newline at end of file
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/IBufferCache.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/IBufferCache.java
index 34bfc2f..2e7181e 100644
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/IBufferCache.java
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/buffercache/IBufferCache.java
@@ -17,6 +17,14 @@
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
public interface IBufferCache {
+ public void createFile(String fileName) throws HyracksDataException;
+
+ public void openFile(int fileId) throws HyracksDataException;
+
+ public void closeFile(int fileId) throws HyracksDataException;
+
+ public void deleteFile(int fileId) throws HyracksDataException;
+
public ICachedPage pin(long dpid, boolean newPage) throws HyracksDataException;
public void unpin(ICachedPage page) throws HyracksDataException;
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileInfo.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileHandle.java
similarity index 69%
rename from hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileInfo.java
rename to hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileHandle.java
index 9b9270d..ddbedb4 100644
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileInfo.java
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileHandle.java
@@ -14,17 +14,23 @@
*/
package edu.uci.ics.hyracks.storage.common.file;
+import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicInteger;
-public class FileInfo {
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public class FileHandle {
private final int fileId;
private final RandomAccessFile file;
+ private final AtomicInteger refCount;
private FileChannel channel;
- public FileInfo(int fileId, RandomAccessFile file) {
+ public FileHandle(int fileId, RandomAccessFile file) {
this.fileId = fileId;
this.file = file;
+ refCount = new AtomicInteger();
channel = file.getChannel();
}
@@ -40,6 +46,23 @@
return channel;
}
+ public void close() throws HyracksDataException {
+ try {
+ channel.close();
+ file.close();
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ public int incReferenceCount() {
+ return refCount.incrementAndGet();
+ }
+
+ public int decReferenceCount() {
+ return refCount.decrementAndGet();
+ }
+
public long getDiskPageId(int pageId) {
return getDiskPageId(fileId, pageId);
}
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
deleted file mode 100644
index 86e236d..0000000
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.hyracks.storage.common.file;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-
-public class FileManager {
- private final Map<Integer, FileInfo> fileRegistry;
-
- public FileManager() {
- fileRegistry = new HashMap<Integer, FileInfo>();
- }
-
- public void registerFile(FileInfo fInfo) throws HyracksDataException {
- if (fileRegistry.containsKey(fInfo.getFileId())) {
- throw new HyracksDataException("File " + fInfo.getFile().toString() + " with id " + fInfo.getFileId() + " is already registered");
- }
- fileRegistry.put(fInfo.getFileId(), fInfo);
- }
-
- public FileInfo unregisterFile(int fileId) throws HyracksDataException {
- if (!fileRegistry.containsKey(fileId)) {
- throw new HyracksDataException("File with id " + fileId + " not in registry");
- }
- return fileRegistry.remove(fileId);
- }
-
- public FileInfo getFileInfo(int fileId) throws HyracksDataException {
- FileInfo fInfo = fileRegistry.get(fileId);
- if (fInfo == null) {
- throw new HyracksDataException("File with id " + fileId + " not in registry");
- }
- return fInfo;
- }
-
- public void close() {
- for (FileInfo fInfo : fileRegistry.values()) {
- try {
- fInfo.getFileChannel().close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapManager.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapManager.java
new file mode 100644
index 0000000..d37e576
--- /dev/null
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapManager.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.storage.common.file;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * Maintains the mapping between file names and file ids.
+ *
+ * @author vinayakb
+ */
+public interface IFileMapManager extends IFileMapProvider {
+ /**
+ * Register a new file name.
+ *
+ * @param fileName
+ * - the name of the file to register
+ * @throws HyracksDataException
+ * - if a mapping for the file already exists.
+ */
+ public void registerFile(String fileName) throws HyracksDataException;
+
+ /**
+ * Unregister a file mapping
+ *
+ * @param fileId
+ * - The file id whose mapping is to be unregistered.
+ * @throws HyracksDataException
+ * - If the fileid is not mapped currently in this manager.
+ */
+ public void unregisterFile(int fileId) throws HyracksDataException;
+}
\ No newline at end of file
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapProvider.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapProvider.java
new file mode 100644
index 0000000..38d9f8c
--- /dev/null
+++ b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMapProvider.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.storage.common.file;
+
+import java.io.Serializable;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public interface IFileMapProvider extends Serializable {
+ /**
+ * Indicates if a given fileId is mapped
+ *
+ * @param fileId
+ * @return <code>true</code> if the given fileId is mapped, <code>false</code> otherwise.
+ */
+ public boolean isMapped(int fileId);
+
+ /**
+ * Indicates if a given file name is mapped.
+ *
+ * @param fileName
+ * @return <code>true</code> if the given file name is mapped, <code>false</code> otherwise.
+ */
+ public boolean isMapped(String fileName);
+
+ /**
+ * Lookup the file id for a file name
+ *
+ * @param fileName
+ * - The file name whose id should be looked up.
+ * @return The file id
+ * @throws HyracksDataException
+ * - If the file name is not currently mapped in this manager.
+ */
+ public int lookupFileId(String fileName) throws HyracksDataException;
+
+ /**
+ * Lookup the file name for a file id
+ *
+ * @param fileId
+ * - The file id whose name should be looked up.
+ * @return The file name
+ * @throws HyracksDataException
+ * - If the file id is not mapped currently in this manager.
+ */
+ public String lookupFileName(int fileId) throws HyracksDataException;
+}
\ No newline at end of file
diff --git a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
deleted file mode 100644
index 6fb44a1..0000000
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.hyracks.storage.common.file;
-
-import java.io.Serializable;
-
-public interface IFileMappingProvider extends Serializable {
- /**
- * Provide the mapping from a file name to an integer id.
- *
- * @param name
- * - Name of the file
- * @param create
- * - Indicate if a new mapping should be created if one does not exist
- * @return The file id on a successful lookup, null if unsuccessful.
- */
- public Integer mapNameToFileId(String name, boolean create);
-
- /**
- * Remove the mapping from a file name to an integer id.
- *
- * @param name
- * - Name of the file
- *
- * @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