Murtadha Hubail has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/343
Change subject: Add support for persistent local resources to
IndexLifecycleManager
......................................................................
Add support for persistent local resources to IndexLifecycleManager
Change-Id: I2e8e974fc2f746959639ce94351f8e419a7f9093
---
M
hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IIndexLifecycleManager.java
M
hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IModificationOperationCallbackFactory.java
M
hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
M
hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
M
hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/impls/NoOpOperationCallbackFactory.java
M
hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeDataflowHelper.java
M
hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeWithBuddyDataflowHelper.java
M
hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeDataflowHelper.java
8 files changed, 158 insertions(+), 40 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/hyracks refs/changes/43/343/1
diff --git
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IIndexLifecycleManager.java
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IIndexLifecycleManager.java
index de4ce5a..2f3fdb2 100644
---
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IIndexLifecycleManager.java
+++
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IIndexLifecycleManager.java
@@ -30,5 +30,18 @@
public void close(long resourceID) throws HyracksDataException;
public List<IIndex> getOpenIndexes();
-
+
+ public boolean supportsPersistentLocalResources();
+
+ public void register(String resourceName, IIndex index) throws
HyracksDataException;
+
+ public void open(String resourceName) throws HyracksDataException;
+
+ public void close(String resourceName) throws HyracksDataException;
+
+ public IIndex getIndex(String resourceName) throws HyracksDataException;
+
+ public void unregister(String resourceName) throws HyracksDataException;
+
+ public IIndex getIndex(int datasetID, long resourceID) throws
HyracksDataException;
}
\ No newline at end of file
diff --git
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IModificationOperationCallbackFactory.java
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IModificationOperationCallbackFactory.java
index 968acd0..1d85256 100644
---
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IModificationOperationCallbackFactory.java
+++
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/api/IModificationOperationCallbackFactory.java
@@ -20,6 +20,9 @@
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
public interface IModificationOperationCallbackFactory extends Serializable {
- public IModificationOperationCallback
createModificationOperationCallback(long resourceId, Object resource,
IHyracksTaskContext ctx)
- throws HyracksDataException;
+ public IModificationOperationCallback
createModificationOperationCallback(long resourceId, Object resource,
+ IHyracksTaskContext ctx) throws HyracksDataException;
+
+ public IModificationOperationCallback
createModificationOperationCallback(String resourceName, long resourceId,
+ Object resource, IHyracksTaskContext ctx) throws
HyracksDataException;
}
diff --git
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
index d67f585..816d743 100644
---
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
+++
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
@@ -69,11 +69,21 @@
public void create() throws HyracksDataException {
synchronized (lcManager) {
long resourceID = getResourceID();
- index = lcManager.getIndex(resourceID);
- if (index != null) {
- lcManager.unregister(resourceID);
+
+ if (lcManager.supportsPersistentLocalResources()) {
+ index = lcManager.getIndex(file.getFile().getPath());
+ if (index != null) {
+ lcManager.unregister(file.getFile().getPath());
+ } else {
+ index = createIndexInstance();
+ }
} else {
- index = createIndexInstance();
+ index = lcManager.getIndex(resourceID);
+ if (index != null) {
+ lcManager.unregister(resourceID);
+ } else {
+ index = createIndexInstance();
+ }
}
// The previous resource ID needs to be removed since calling
IIndex.create() may possibly destroy
@@ -93,7 +103,12 @@
} catch (IOException e) {
throw new HyracksDataException(e);
}
- lcManager.register(resourceID, index);
+
+ if (lcManager.supportsPersistentLocalResources()) {
+ lcManager.register(file.getFile().getPath(), index);
+ } else {
+ lcManager.register(resourceID, index);
+ }
}
}
@@ -106,19 +121,32 @@
throw new HyracksDataException("Index does not have a valid
resource ID. Has it been created yet?");
}
- index = lcManager.getIndex(resourceID);
- if (index == null) {
- index = createIndexInstance();
- lcManager.register(resourceID, index);
+ if (lcManager.supportsPersistentLocalResources()) {
+ index = lcManager.getIndex(file.getFile().getPath());
+ if (index == null) {
+ index = createIndexInstance();
+ lcManager.register(file.getFile().getPath(), index);
+ }
+ lcManager.open(file.getFile().getPath());
+ } else {
+ index = lcManager.getIndex(resourceID);
+ if (index == null) {
+ index = createIndexInstance();
+ lcManager.register(resourceID, index);
+ }
+ lcManager.open(resourceID);
}
- lcManager.open(resourceID);
}
}
@Override
public void close() throws HyracksDataException {
synchronized (lcManager) {
- lcManager.close(getResourceID());
+ if (lcManager.supportsPersistentLocalResources()) {
+ lcManager.close(file.getFile().getPath());
+ } else {
+ lcManager.close(getResourceID());
+ }
}
}
@@ -126,11 +154,20 @@
public void destroy() throws HyracksDataException {
synchronized (lcManager) {
long resourceID = getResourceID();
- index = lcManager.getIndex(resourceID);
- if (index != null) {
- lcManager.unregister(resourceID);
+ if (lcManager.supportsPersistentLocalResources()) {
+ index = lcManager.getIndex(file.getFile().getPath());
+ if (index != null) {
+ lcManager.unregister(file.getFile().getPath());
+ } else {
+ index = createIndexInstance();
+ }
} else {
- index = createIndexInstance();
+ index = lcManager.getIndex(resourceID);
+ if (index != null) {
+ lcManager.unregister(resourceID);
+ } else {
+ index = createIndexInstance();
+ }
}
if (resourceID != -1) {
diff --git
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
index 8543433..970ef93 100644
---
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
+++
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
@@ -231,4 +231,39 @@
}
os.write(sb.toString().getBytes());
}
+
+ @Override
+ public void register(String resourceName, IIndex index) throws
HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void open(String resourceName) throws HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean supportsPersistentLocalResources() {
+ return false;
+ }
+
+ @Override
+ public void close(String resourceName) throws HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public IIndex getIndex(String resourceName) throws HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void unregister(String resourceName) throws HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public IIndex getIndex(int datasetID, long resourceID) throws
HyracksDataException {
+ throw new UnsupportedOperationException();
+ }
}
\ No newline at end of file
diff --git
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/impls/NoOpOperationCallbackFactory.java
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/impls/NoOpOperationCallbackFactory.java
index 7a9ae4c..a0f678c 100644
---
a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/impls/NoOpOperationCallbackFactory.java
+++
b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/impls/NoOpOperationCallbackFactory.java
@@ -15,6 +15,7 @@
package edu.uci.ics.hyracks.storage.am.common.impls;
import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import
edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
import
edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallbackFactory;
import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
@@ -29,7 +30,8 @@
INSTANCE;
@Override
- public IModificationOperationCallback
createModificationOperationCallback(long resourceId, Object resource,
IHyracksTaskContext ctx) {
+ public IModificationOperationCallback
createModificationOperationCallback(long resourceId, Object resource,
+ IHyracksTaskContext ctx) {
return NoOpOperationCallback.INSTANCE;
}
@@ -37,4 +39,10 @@
public ISearchOperationCallback createSearchOperationCallback(long
resourceId, IHyracksTaskContext ctx) {
return NoOpOperationCallback.INSTANCE;
}
+
+ @Override
+ public IModificationOperationCallback
createModificationOperationCallback(String resourceName, long resourceId,
+ Object resource, IHyracksTaskContext ctx) throws
HyracksDataException {
+ return NoOpOperationCallback.INSTANCE;
+ }
}
diff --git
a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeDataflowHelper.java
b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeDataflowHelper.java
index b913e28..87a1acf 100644
---
a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeDataflowHelper.java
+++
b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeDataflowHelper.java
@@ -36,8 +36,7 @@
public ExternalBTreeDataflowHelper(IIndexOperatorDescriptor opDesc,
IHyracksTaskContext ctx, int partition,
double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy,
ILSMOperationTrackerProvider opTrackerFactory,
ILSMIOOperationScheduler ioScheduler,
- ILSMIOOperationCallbackFactory ioOpCallbackFactory, boolean
needKeyDupCheck, int version,
- boolean durable) {
+ ILSMIOOperationCallbackFactory ioOpCallbackFactory, boolean
needKeyDupCheck, int version, boolean durable) {
super(opDesc, ctx, partition, null, bloomFilterFalsePositiveRate,
mergePolicy, opTrackerFactory, ioScheduler,
ioOpCallbackFactory, false, null, null, null, null, durable);
this.version = version;
@@ -46,8 +45,7 @@
public ExternalBTreeDataflowHelper(IIndexOperatorDescriptor opDesc,
IHyracksTaskContext ctx, int partition,
List<IVirtualBufferCache> virtualBufferCaches, ILSMMergePolicy
mergePolicy,
ILSMOperationTrackerProvider opTrackerFactory,
ILSMIOOperationScheduler ioScheduler,
- ILSMIOOperationCallbackFactory ioOpCallbackFactory, boolean
needKeyDupCheck, int version,
- boolean durable) {
+ ILSMIOOperationCallbackFactory ioOpCallbackFactory, boolean
needKeyDupCheck, int version, boolean durable) {
this(opDesc, ctx, partition, DEFAULT_BLOOM_FILTER_FALSE_POSITIVE_RATE,
mergePolicy, opTrackerFactory,
ioScheduler, ioOpCallbackFactory, needKeyDupCheck, version,
durable);
}
@@ -63,10 +61,18 @@
} catch (HyracksDataException e) {
return null;
}
- try {
- index = lcManager.getIndex(resourceID);
- } catch (HyracksDataException e) {
- return null;
+ if (lcManager.supportsPersistentLocalResources()) {
+ try {
+ index = lcManager.getIndex(file.getFile().getPath());
+ } catch (HyracksDataException e) {
+ return null;
+ }
+ } else {
+ try {
+ index = lcManager.getIndex(resourceID);
+ } catch (HyracksDataException e) {
+ return null;
+ }
}
}
return index;
diff --git
a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeWithBuddyDataflowHelper.java
b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeWithBuddyDataflowHelper.java
index ff19c54..075b3ed 100644
---
a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeWithBuddyDataflowHelper.java
+++
b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/dataflow/ExternalBTreeWithBuddyDataflowHelper.java
@@ -63,10 +63,18 @@
} catch (HyracksDataException e) {
return null;
}
- try {
- index = lcManager.getIndex(resourceID);
- } catch (HyracksDataException e) {
- return null;
+ if (lcManager.supportsPersistentLocalResources()) {
+ try {
+ index = lcManager.getIndex(file.getFile().getPath());
+ } catch (HyracksDataException e) {
+ return null;
+ }
+ } else {
+ try {
+ index = lcManager.getIndex(resourceID);
+ } catch (HyracksDataException e) {
+ return null;
+ }
}
}
return index;
diff --git
a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeDataflowHelper.java
b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeDataflowHelper.java
index 4fee495..252775f 100644
---
a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeDataflowHelper.java
+++
b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeDataflowHelper.java
@@ -77,10 +77,18 @@
} catch (HyracksDataException e) {
return null;
}
- try {
- index = lcManager.getIndex(resourceID);
- } catch (HyracksDataException e) {
- return null;
+ if (lcManager.supportsPersistentLocalResources()) {
+ try {
+ index = lcManager.getIndex(file.getFile().getPath());
+ } catch (HyracksDataException e) {
+ return null;
+ }
+ } else {
+ try {
+ index = lcManager.getIndex(resourceID);
+ } catch (HyracksDataException e) {
+ return null;
+ }
}
}
return index;
@@ -95,11 +103,11 @@
ITypeTraits[] filterTypeTraits, IBinaryComparatorFactory[]
filterCmpFactories, int[] filterFields)
throws HyracksDataException {
try {
- return LSMRTreeUtils.createExternalRTree(file, diskBufferCache,
diskFileMapProvider, typeTraits,
- rtreeCmpFactories, btreeCmpFactories,
valueProviderFactories, rtreePolicyType,
- bloomFilterFalsePositiveRate, mergePolicy, opTracker,
ioScheduler,
- ioOpCallbackFactory.createIOOperationCallback(),
linearizeCmpFactory, btreeFields, version,
- durable);
+ return LSMRTreeUtils
+ .createExternalRTree(file, diskBufferCache,
diskFileMapProvider, typeTraits, rtreeCmpFactories,
+ btreeCmpFactories, valueProviderFactories,
rtreePolicyType, bloomFilterFalsePositiveRate,
+ mergePolicy, opTracker, ioScheduler,
ioOpCallbackFactory.createIOOperationCallback(),
+ linearizeCmpFactory, btreeFields, version,
durable);
} catch (TreeIndexException e) {
throw new HyracksDataException(e);
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/343
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2e8e974fc2f746959639ce94351f8e419a7f9093
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <[email protected]>