>From Ritik Raj <[email protected]>:
Ritik Raj has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19443 )
Change subject: [ASTERIXDB-3563][STO] Delay activation of dataset until accessed
......................................................................
[ASTERIXDB-3563][STO] Delay activation of dataset until accessed
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
activate the dataset when its being accessed in cloud mode.
Ext-ref: MB-63037
Change-Id: If64a7fbd9701772ffa42761d1557223a3eea95be
---
M
hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/RuntimeContext.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
M
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/TransientLocalResourceRepository.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetResource.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/ILocalResourceRepository.java
M
hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/TestStorageManagerComponentHolder.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/StoragePathUtil.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IResourceLifecycleManager.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/TransientLocalResourceRepositoryFactory.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
16 files changed, 171 insertions(+), 22 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/43/19443/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
index 343baf0..8f9b96d 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
@@ -147,12 +147,12 @@
private static final Logger LOGGER = LogManager.getLogger();
private ILSMMergePolicyFactory metadataMergePolicyFactory;
- private final INCServiceContext ncServiceContext;
+ protected final INCServiceContext ncServiceContext;
private final IResourceIdFactory resourceIdFactory;
private final CompilerProperties compilerProperties;
private final ExternalProperties externalProperties;
private final MetadataProperties metadataProperties;
- private final StorageProperties storageProperties;
+ protected final StorageProperties storageProperties;
private final TransactionProperties txnProperties;
private final ActiveProperties activeProperties;
private final BuildProperties buildProperties;
@@ -162,11 +162,11 @@
private ExecutorService threadExecutor;
private IDatasetLifecycleManager datasetLifecycleManager;
private IBufferCache bufferCache;
- private IVirtualBufferCache virtualBufferCache;
- private ITransactionSubsystem txnSubsystem;
+ protected IVirtualBufferCache virtualBufferCache;
+ protected ITransactionSubsystem txnSubsystem;
private IMetadataNode metadataNodeStub;
private ILSMIOOperationScheduler lsmIOScheduler;
- private PersistentLocalResourceRepository localResourceRepository;
+ protected PersistentLocalResourceRepository localResourceRepository;
private IIOManager ioManager;
private IIOManager persistenceIOManager;
private boolean isShuttingdown;
@@ -179,7 +179,7 @@
private final IPersistedResourceRegistry persistedResourceRegistry;
private volatile HyracksConnection hcc;
private volatile ResultSet resultSet;
- private IIndexCheckpointManagerProvider indexCheckpointManagerProvider;
+ protected IIndexCheckpointManagerProvider indexCheckpointManagerProvider;
private IReplicaManager replicaManager;
private IReceptionist receptionist;
private final ICacheManager cacheManager;
@@ -286,8 +286,7 @@
// Must start vbc now instead of by life cycle component manager
(lccm) because lccm happens after
// the metadata bootstrap task
((ILifeCycleComponent) virtualBufferCache).start();
- datasetLifecycleManager = new
DatasetLifecycleManager(storageProperties, localResourceRepository,
- txnSubsystem.getLogManager(), virtualBufferCache,
indexCheckpointManagerProvider, lockNotifier);
+ datasetLifecycleManager = createDatasetLifecycleManager(recoveryMgr,
lockNotifier);
localResourceRepository.setDatasetLifecycleManager(datasetLifecycleManager);
final String nodeId = getServiceContext().getNodeId();
final Set<Integer> nodePartitions =
metadataProperties.getNodePartitions(nodeId);
@@ -371,6 +370,12 @@
diskWriteRateLimiterProvider = new DiskWriteRateLimiterProvider();
}
+ protected DatasetLifecycleManager
createDatasetLifecycleManager(IRecoveryManager recoveryMgr,
+ IDiskResourceCacheLockNotifier lockNotifier) {
+ return new DatasetLifecycleManager(ncServiceContext,
storageProperties, localResourceRepository, recoveryMgr,
+ txnSubsystem.getLogManager(), virtualBufferCache,
indexCheckpointManagerProvider, lockNotifier);
+ }
+
protected ICloudGuardian getCloudGuardian(CloudProperties cloudProperties)
{
return ICloudGuardian.NoOpCloudGuardian.INSTANCE;
}
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
index 78f574b..14ab703 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
@@ -901,6 +901,11 @@
return maxDiskLastLsn;
}
+ @Override
+ public void recoverIndexes(List<ILSMIndex> datasetPartitionIndexes) throws
HyracksDataException {
+ // do-nothing
+ }
+
private class JobEntityCommits {
private static final String PARTITION_FILE_NAME_SEPARATOR = "_";
private final long txnId;
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
index 43b5d1b..7ddf8cf 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
@@ -43,9 +43,11 @@
import org.apache.asterix.common.storage.ResourceReference;
import org.apache.asterix.common.storage.StorageIOStats;
import org.apache.asterix.common.transactions.ILogManager;
+import org.apache.asterix.common.transactions.IRecoveryManager;
import org.apache.asterix.common.transactions.LogRecord;
import org.apache.asterix.common.transactions.LogType;
import org.apache.asterix.common.utils.StoragePathUtil;
+import org.apache.hyracks.api.application.INCServiceContext;
import org.apache.hyracks.api.exceptions.ErrorCode;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.lifecycle.ILifeCycleComponent;
@@ -67,22 +69,26 @@
public class DatasetLifecycleManager implements IDatasetLifecycleManager,
ILifeCycleComponent {
private static final Logger LOGGER = LogManager.getLogger();
- private final Map<Integer, DatasetResource> datasets = new
ConcurrentHashMap<>();
+ protected final Map<Integer, DatasetResource> datasets = new
ConcurrentHashMap<>();
private final StorageProperties storageProperties;
- private final ILocalResourceRepository resourceRepository;
+ protected final ILocalResourceRepository resourceRepository;
private final IVirtualBufferCache vbc;
+ protected final INCServiceContext serviceCtx;
+ protected final IRecoveryManager recoveryMgr;
private final ILogManager logManager;
private final LogRecord waitLog;
- private final IDiskResourceCacheLockNotifier lockNotifier;
+ protected final IDiskResourceCacheLockNotifier lockNotifier;
private volatile boolean stopped = false;
private final IIndexCheckpointManagerProvider
indexCheckpointManagerProvider;
// all LSM-trees share the same virtual buffer cache list
private final List<IVirtualBufferCache> vbcs;
- public DatasetLifecycleManager(StorageProperties storageProperties,
ILocalResourceRepository resourceRepository,
- ILogManager logManager, IVirtualBufferCache vbc,
- IIndexCheckpointManagerProvider indexCheckpointManagerProvider,
+ public DatasetLifecycleManager(INCServiceContext serviceCtx,
StorageProperties storageProperties,
+ ILocalResourceRepository resourceRepository, IRecoveryManager
recoveryMgr, ILogManager logManager,
+ IVirtualBufferCache vbc, IIndexCheckpointManagerProvider
indexCheckpointManagerProvider,
IDiskResourceCacheLockNotifier lockNotifier) {
+ this.serviceCtx = serviceCtx;
+ this.recoveryMgr = recoveryMgr;
this.logManager = logManager;
this.storageProperties = storageProperties;
this.resourceRepository = resourceRepository;
@@ -130,7 +136,7 @@
datasetResource.register(resource, (ILSMIndex) index);
}
- private int getDIDfromResourcePath(String resourcePath) throws
HyracksDataException {
+ protected int getDIDfromResourcePath(String resourcePath) throws
HyracksDataException {
LocalResource lr = resourceRepository.get(resourcePath);
if (lr == null) {
return -1;
@@ -138,7 +144,7 @@
return ((DatasetLocalResource) lr.getResource()).getDatasetId();
}
- private long getResourceIDfromResourcePath(String resourcePath) throws
HyracksDataException {
+ protected long getResourceIDfromResourcePath(String resourcePath) throws
HyracksDataException {
LocalResource lr = resourceRepository.get(resourcePath);
if (lr == null) {
return -1;
@@ -190,6 +196,15 @@
}
}
+ public boolean resourceRecovered(String resourcePath) throws
HyracksDataException {
+ return true;
+ }
+
+ @Override
+ public synchronized void ensureIndexOpenAndConsistent(String resourcePath)
throws HyracksDataException {
+ open(resourcePath);
+ }
+
@Override
public synchronized void open(String resourcePath) throws
HyracksDataException {
validateDatasetLifecycleManagerState();
@@ -360,7 +375,7 @@
return rateLimiter;
}
- private void validateDatasetLifecycleManagerState() throws
HyracksDataException {
+ protected void validateDatasetLifecycleManagerState() throws
HyracksDataException {
if (stopped) {
throw new
HyracksDataException(DatasetLifecycleManager.class.getSimpleName() + " was
stopped.");
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetResource.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetResource.java
index db9eabb..cebc319 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetResource.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetResource.java
@@ -48,12 +48,14 @@
private final Map<Integer, PrimaryIndexOperationTracker>
datasetPrimaryOpTrackers;
private final Map<Integer, ILSMComponentIdGenerator>
datasetComponentIdGenerators;
private final Map<Integer, IRateLimiter> datasetRateLimiters;
+ private final Map<Integer, Boolean> indexRecovered;
public DatasetResource(DatasetInfo datasetInfo) {
this.datasetInfo = datasetInfo;
this.datasetPrimaryOpTrackers = new HashMap<>();
this.datasetComponentIdGenerators = new HashMap<>();
this.datasetRateLimiters = new HashMap<>();
+ this.indexRecovered = new HashMap<>();
}
public boolean isRegistered() {
@@ -127,6 +129,10 @@
return datasetComponentIdGenerators.get(partition);
}
+ public boolean areIndexesRecovered(int partitionId) {
+ return indexRecovered.containsKey(partitionId);
+ }
+
public IRateLimiter getRateLimiter(int partition) {
return datasetRateLimiters.get(partition);
}
@@ -139,6 +145,14 @@
datasetPrimaryOpTrackers.put(partition, opTracker);
}
+ public void setIndexRecovered(int partition) {
+ if (indexRecovered.containsKey(partition)) {
+ throw new IllegalStateException(
+ "Index has already been recovered for dataset" +
getDatasetID() + "partition " + partition);
+ }
+ indexRecovered.put(partition, true);
+ }
+
public void setIdGenerator(int partition, ILSMComponentIdGenerator
idGenerator) {
if (datasetComponentIdGenerators.containsKey(partition)) {
throw new IllegalStateException("LSMComponentIdGenerator has
already been set for partition " + partition);
@@ -187,5 +201,6 @@
datasetPrimaryOpTrackers.remove(partitionId);
datasetComponentIdGenerators.remove(partitionId);
datasetRateLimiters.remove(partitionId);
+ indexRecovered.remove(partitionId);
}
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
index aef2215..7cd910d 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
@@ -20,10 +20,12 @@
import java.io.File;
import java.io.IOException;
+import java.util.List;
import java.util.Set;
import org.apache.asterix.common.exceptions.ACIDException;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex;
/**
* Provides API for failure recovery. Failure could be at application level and
@@ -128,4 +130,10 @@
*/
void replayReplicaPartitionLogs(Set<Integer> partitions, boolean flush)
throws HyracksDataException;
+ /**
+ * recovers the index based on the componentId and rollbacks in case not
in sync
+ * @param datasetPartitionIndexes
+ * @throws HyracksDataException
+ */
+ void recoverIndexes(List<ILSMIndex> datasetPartitionIndexes) throws
HyracksDataException;
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/StoragePathUtil.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/StoragePathUtil.java
index 28fd27e..c0bbc9c 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/StoragePathUtil.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/StoragePathUtil.java
@@ -139,6 +139,13 @@
return
ResourceReference.of(fileAbsolutePath).getFileRelativePath().toString();
}
+ public static FileReference getIndexRootPath(IIOManager ioManager, String
relativePath)
+ throws HyracksDataException {
+ int rootSepIndex = relativePath.lastIndexOf(File.separatorChar);
+ String rootPath = relativePath.substring(0, rootSepIndex);
+ return ioManager.resolve(rootPath);
+ }
+
/**
* Create a file
* Note: this method is not thread safe. It is the responsibility of the
caller to ensure no path conflict when
@@ -229,7 +236,17 @@
}
public static boolean isRelativeParent(FileReference parent, FileReference
child) {
- return child.getRelativePath().startsWith(parent.getRelativePath());
+ String childPath = child.getRelativePath();
+ String parentPath = parent.getRelativePath();
+ boolean isMatch = childPath.startsWith(parentPath);
+ if (isMatch) {
+ int parentPathLength = parentPath.length();
+ if (childPath.length() == parentPathLength) {
+ return true;
+ }
+ return childPath.charAt(parentPathLength) == File.separatorChar;
+ }
+ return false;
}
public static String getNamespacePath(INamespacePathResolver
nsPathResolver, Namespace namespace, int partition) {
diff --git
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
index 5c7d5ac..6b88639 100644
---
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
+++
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
@@ -251,6 +251,7 @@
return ioManager.resolve(fileName);
}
+ @Override
public Map<Long, LocalResource> getResources(Predicate<LocalResource>
filter, List<FileReference> roots)
throws HyracksDataException {
beforeReadAccess();
@@ -348,6 +349,11 @@
}
}
+ @Override
+ public IIOManager getIOManager() {
+ return ioManager;
+ }
+
public void invalidateResource(String relativePath) {
resourceCache.invalidate(relativePath);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/RuntimeContext.java
b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/RuntimeContext.java
index f5edc74..493a9a4 100644
---
a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/RuntimeContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/RuntimeContext.java
@@ -65,7 +65,8 @@
this.ioManager = appCtx.getIoManager();
bufferCache = new BufferCache(ioManager, prs, new
DelayPageCleanerPolicy(1000), fileMapManager, 100, 10,
threadFactory, new HashMap<>(),
DefaultBufferCacheReadContextProvider.DEFAULT);
- ILocalResourceRepositoryFactory localResourceRepositoryFactory = new
TransientLocalResourceRepositoryFactory();
+ ILocalResourceRepositoryFactory localResourceRepositoryFactory =
+ new TransientLocalResourceRepositoryFactory(ioManager);
localResourceRepository =
localResourceRepositoryFactory.createRepository();
resourceIdFactory = (new
ResourceIdFactoryProvider(localResourceRepository)).createResourceIdFactory();
lcManager = new IndexLifecycleManager();
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
index b79c3b1..39aadf9 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
@@ -65,7 +65,13 @@
LocalResource lr = readIndex();
lcManager.register(lr.getPath(), index);
}
- lcManager.open(resourceRef.getRelativePath());
+ // If the partition has been recovered, send it to open.
+ if (lcManager.resourceRecovered(resourceRef.getRelativePath())) {
+ lcManager.open(resourceRef.getRelativePath());
+ } else {
+ // This will recover old index and also activated any new
indexes.
+
lcManager.ensureIndexOpenAndConsistent(resourceRef.getRelativePath());
+ }
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
index ab301a9..21ef7cf 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexLifecycleManager.java
@@ -124,6 +124,11 @@
}
@Override
+ public boolean resourceRecovered(String resourcePath) throws
HyracksDataException {
+ return true;
+ }
+
+ @Override
public void start() {
}
@@ -167,6 +172,11 @@
}
@Override
+ public void ensureIndexOpenAndConsistent(String resourcePath) throws
HyracksDataException {
+ open(resourcePath);
+ }
+
+ @Override
public void open(String resourcePath) throws HyracksDataException {
IndexInfo info = indexInfos.get(resourcePath);
if (info == null) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
index 4f7c624..c573e8a 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
@@ -193,6 +193,7 @@
diskComponents.clear();
}
+ // The only caller is LifeCycleManager.open(), so it seems nothing to
worry about isActive check and fail.
@Override
public synchronized void activate() throws HyracksDataException {
if (isActive) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/ILocalResourceRepository.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/ILocalResourceRepository.java
index 491d476..af3a6e7 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/ILocalResourceRepository.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/ILocalResourceRepository.java
@@ -18,7 +18,13 @@
*/
package org.apache.hyracks.storage.common;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.api.io.IIOManager;
public interface ILocalResourceRepository {
@@ -28,5 +34,10 @@
void delete(String name) throws HyracksDataException;
+ Map<Long, LocalResource> getResources(Predicate<LocalResource> filter,
List<FileReference> roots)
+ throws HyracksDataException;
+
long maxId() throws HyracksDataException;
+
+ IIOManager getIOManager();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IResourceLifecycleManager.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IResourceLifecycleManager.java
index 6200680..c7fa94d 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IResourceLifecycleManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IResourceLifecycleManager.java
@@ -36,6 +36,8 @@
*/
public List<R> getOpenResources();
+ public boolean resourceRecovered(String resourcePath) throws
HyracksDataException;
+
/**
* Registers a resource.
*
@@ -46,6 +48,8 @@
*/
public void register(String resourceId, R resource) throws
HyracksDataException;
+ public void ensureIndexOpenAndConsistent(String resourcePath) throws
HyracksDataException;
+
/**
* Opens a resource. The resource is moved to the open state
*
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/TransientLocalResourceRepository.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/TransientLocalResourceRepository.java
index 2e756ea..1c9b5a0 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/TransientLocalResourceRepository.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/TransientLocalResourceRepository.java
@@ -19,15 +19,25 @@
package org.apache.hyracks.storage.common;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.function.Predicate;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.api.io.IIOManager;
public class TransientLocalResourceRepository implements
ILocalResourceRepository {
+ private final IIOManager ioManager;
+
private Map<String, LocalResource> name2ResourceMap = new HashMap<>();
private Map<Long, LocalResource> id2ResourceMap = new HashMap<>();
+ public TransientLocalResourceRepository(IIOManager ioManager) {
+ this.ioManager = ioManager;
+ }
+
@Override
public LocalResource get(String path) throws HyracksDataException {
return name2ResourceMap.get(path);
@@ -55,6 +65,12 @@
}
@Override
+ public Map<Long, LocalResource> getResources(Predicate<LocalResource>
filter, List<FileReference> roots)
+ throws HyracksDataException {
+ return Map.of();
+ }
+
+ @Override
public long maxId() throws HyracksDataException {
long maxResourceId = 0;
@@ -63,4 +79,9 @@
}
return maxResourceId;
}
+
+ @Override
+ public IIOManager getIOManager() {
+ return ioManager;
+ }
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/TransientLocalResourceRepositoryFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/TransientLocalResourceRepositoryFactory.java
index 96b8f88..211045a 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/TransientLocalResourceRepositoryFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/TransientLocalResourceRepositoryFactory.java
@@ -19,13 +19,20 @@
package org.apache.hyracks.storage.common.file;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IIOManager;
import org.apache.hyracks.storage.common.ILocalResourceRepository;
import org.apache.hyracks.storage.common.TransientLocalResourceRepository;
public class TransientLocalResourceRepositoryFactory implements
ILocalResourceRepositoryFactory {
+ private final IIOManager ioManager;
+
+ public TransientLocalResourceRepositoryFactory(IIOManager ioManager) {
+ this.ioManager = ioManager;
+ }
+
@Override
public ILocalResourceRepository createRepository() throws
HyracksDataException {
- return new TransientLocalResourceRepository();
+ return new TransientLocalResourceRepository(ioManager);
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/TestStorageManagerComponentHolder.java
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/TestStorageManagerComponentHolder.java
index 7f696b4..ec9b425 100644
---
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/TestStorageManagerComponentHolder.java
+++
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/TestStorageManagerComponentHolder.java
@@ -114,7 +114,7 @@
if (localResourceRepository == null) {
try {
ILocalResourceRepositoryFactory localResourceRepositoryFactory
=
- new TransientLocalResourceRepositoryFactory();
+ new
TransientLocalResourceRepositoryFactory(getIOManager());
localResourceRepository =
localResourceRepositoryFactory.createRepository();
} catch (HyracksException e) {
//In order not to change the IStorageManagerInterface due to
the test code, throw runtime exception.
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19443
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: If64a7fbd9701772ffa42761d1557223a3eea95be
Gerrit-Change-Number: 19443
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-MessageType: newchange