>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

Reply via email to