This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 6f8a910ccf [ASTERIXDB-3259][MTD] Prepare steps for dropping database 
artifacts
6f8a910ccf is described below

commit 6f8a910ccfc790741f438f3290670bf9dd8d9635
Author: Ali Alsuliman <[email protected]>
AuthorDate: Wed Oct 4 14:05:34 2023 -0700

    [ASTERIXDB-3259][MTD] Prepare steps for dropping database artifacts
    
    - user model changes: no
    - storage format changes: no
    - interface changes: yes
    
    Details:
    The drop jobs will be changed to operate at the database level.
    
    Change-Id: Iec9b559b6de09fa191d7b54a759c05a874d15913
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17841
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
---
 .../asterix/app/translator/QueryTranslator.java    | 67 ++++++++++++++++++----
 .../org/apache/asterix/utils/DataverseUtil.java    | 11 ++++
 .../apache/asterix/metadata/MetadataManager.java   | 30 ++++++++++
 .../org/apache/asterix/metadata/MetadataNode.java  |  6 +-
 .../asterix/metadata/api/IMetadataManager.java     |  4 ++
 .../apache/asterix/metadata/api/IMetadataNode.java |  4 ++
 .../metadata/declared/MetadataProvider.java        |  4 ++
 .../metadata/utils/DataPartitioningProvider.java   |  2 +
 .../utils/DynamicDataPartitioningProvider.java     |  8 +++
 .../metadata/utils/SplitsAndConstraintsUtil.java   | 17 ++++++
 .../utils/StaticDataPartitioningProvider.java      | 16 +++++-
 11 files changed, 154 insertions(+), 15 deletions(-)

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 024cb17e94..89161b9f15 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -1927,6 +1927,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         List<FeedEventsListener> feedsToStop = new ArrayList<>();
         List<JobSpecification> jobsToExecute = new ArrayList<>();
+        //TODO(DB): resolve database directory
         try {
             Database database = MetadataManager.INSTANCE.getDatabase(mdTxnCtx, 
databaseName);
             if (database == null) {
@@ -1941,16 +1942,49 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             validateDatabaseStateBeforeDrop(metadataProvider, database, 
sourceLoc);
 
             // #. prepare jobs which will drop corresponding feed storage
-            //TODO(DB):
+            ActiveNotificationHandler activeEventHandler =
+                    (ActiveNotificationHandler) 
appCtx.getActiveNotificationHandler();
+            IActiveEntityEventsListener[] activeListeners = 
activeEventHandler.getEventListeners();
+            for (IActiveEntityEventsListener listener : activeListeners) {
+                EntityId activeEntityId = listener.getEntityId();
+                if 
(activeEntityId.getExtensionName().equals(Feed.EXTENSION_NAME)
+                        && 
activeEntityId.getDatabaseName().equals(databaseName)) {
+                    FeedEventsListener feedListener = (FeedEventsListener) 
listener;
+                    feedsToStop.add(feedListener);
+                    jobsToExecute
+                            
.add(FeedOperations.buildRemoveFeedStorageJob(metadataProvider, 
feedListener.getFeed()));
+                }
+            }
 
             // #. prepare jobs which will drop corresponding datasets with 
indexes
-            //TODO(DB):
+            List<Dataset> datasets = 
MetadataManager.INSTANCE.getDatabaseDatasets(mdTxnCtx, databaseName);
+            for (Dataset dataset : datasets) {
+                String datasetName = dataset.getDatasetName();
+                DatasetType dsType = dataset.getDatasetType();
+                switch (dsType) {
+                    case INTERNAL:
+                        List<Index> indexes = 
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, databaseName,
+                                dataset.getDataverseName(), datasetName);
+                        for (Index index : indexes) {
+                            jobsToExecute
+                                    
.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, dataset, 
sourceLoc));
+                        }
+                        break;
+                    case EXTERNAL:
+                    case VIEW:
+                        break;
+                }
+            }
 
             // #. prepare jobs which will drop corresponding libraries
-            //TODO(DB):
+            List<Library> libraries = 
MetadataManager.INSTANCE.getDatabaseLibraries(mdTxnCtx, databaseName);
+            for (Library library : libraries) {
+                
jobsToExecute.add(ExternalLibraryJobUtils.buildDropLibraryJobSpec(library.getDataverseName(),
+                        library.getName(), metadataProvider));
+            }
 
             // #. prepare jobs which will drop the database
-            //TODO(DB):
+            jobsToExecute.add(DataverseUtil.dropDatabaseJobSpec(databaseName, 
metadataProvider));
 
             // #. mark PendingDropOp on the database record by
             // first, deleting the database record from the 'Database' 
collection
@@ -1983,11 +2017,20 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             MetadataManager.INSTANCE.dropDatabase(mdTxnCtx, databaseName);
 
             // drop all node groups that no longer needed
-            //TODO(DB):
+            for (Dataset dataset : datasets) {
+                String nodeGroup = dataset.getNodeGroupName();
+                
lockManager.acquireNodeGroupWriteLock(metadataProvider.getLocks(), nodeGroup);
+                if (MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodeGroup) 
!= null) {
+                    MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, 
nodeGroup, true);
+                }
+            }
 
             //TODO(DB): switch active database to the DEFAULT if the dropped 
database is the currently active one
+            if (activeDataverse.getDatabaseName().equals(databaseName)) {
+                activeDataverse = MetadataBuiltinEntities.DEFAULT_DATAVERSE;
+            }
 
-            //TODO(DB): validateDatabaseDatasetsStateAfterDrop
+            validateDatasetsStateAfterNamespaceDrop(metadataProvider, 
mdTxnCtx, datasets);
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return true;
@@ -1997,7 +2040,9 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             }
 
             if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
-                //TODO(DB): switch active database to the DEFAULT if the 
dropped database is the currently active one
+                if (activeDataverse.getDatabaseName().equals(databaseName)) {
+                    activeDataverse = 
MetadataBuiltinEntities.DEFAULT_DATAVERSE;
+                }
 
                 // #. execute compensation operations
                 // remove the all artifacts in NC
@@ -2018,7 +2063,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                 } catch (Exception e2) {
                     e.addSuppressed(e2);
                     abort(e, e2, mdTxnCtx);
-                    throw new IllegalStateException("System is inconsistent 
state: pending dataverse(" + databaseName
+                    throw new IllegalStateException("System is inconsistent 
state: pending database(" + databaseName
                             + ") couldn't be removed from the metadata", e);
                 }
             }
@@ -2165,7 +2210,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                 activeDataverse = MetadataBuiltinEntities.DEFAULT_DATAVERSE;
             }
 
-            validateDataverseDatasetsStateAfterDrop(metadataProvider, 
mdTxnCtx, datasets);
+            validateDatasetsStateAfterNamespaceDrop(metadataProvider, 
mdTxnCtx, datasets);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return true;
         } catch (Exception e) {
@@ -2220,9 +2265,9 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         // may be overridden by product extensions for additional checks 
before dropping the dataverse
     }
 
-    protected void validateDataverseDatasetsStateAfterDrop(MetadataProvider 
metadataProvider,
+    protected void validateDatasetsStateAfterNamespaceDrop(MetadataProvider 
metadataProvider,
             MetadataTransactionContext mdTxnCtx, List<Dataset> datasets) 
throws AlgebricksException {
-        // may be overridden by product extensions for additional checks after 
dropping the dataverse
+        // may be overridden by product extensions for additional checks after 
dropping a database/dataverse
     }
 
     public void handleDatasetDropStatement(MetadataProvider metadataProvider, 
Statement stmt,
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/DataverseUtil.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/DataverseUtil.java
index 61b526c887..3b7cb00202 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/DataverseUtil.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/DataverseUtil.java
@@ -41,4 +41,15 @@ public class DataverseUtil {
         jobSpec.addRoot(frod);
         return jobSpec;
     }
+
+    public static JobSpecification dropDatabaseJobSpec(String database, 
MetadataProvider metadata) {
+        JobSpecification jobSpec = 
RuntimeUtils.createJobSpecification(metadata.getApplicationContext());
+        PartitioningProperties partitioningProperties = 
metadata.splitAndConstraints(database);
+        FileRemoveOperatorDescriptor frod = new 
FileRemoveOperatorDescriptor(jobSpec,
+                partitioningProperties.getSplitsProvider(), false, 
partitioningProperties.getComputeStorageMap());
+        
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(jobSpec, 
frod,
+                partitioningProperties.getConstraints());
+        jobSpec.addRoot(frod);
+        return jobSpec;
+    }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
index 040b48945f..ed3474d777 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
@@ -300,6 +300,21 @@ public abstract class MetadataManager implements 
IMetadataManager {
         return dataverse;
     }
 
+    @Override
+    public List<Dataset> getDatabaseDatasets(MetadataTransactionContext ctx, 
String database)
+            throws AlgebricksException {
+        List<Dataset> databaseDatasets;
+        try {
+            Objects.requireNonNull(database);
+            // assuming that the transaction can read its own writes on the 
metadata node
+            databaseDatasets = 
metadataNode.getDatabaseDatasets(ctx.getTxnId(), database);
+        } catch (RemoteException e) {
+            throw new 
MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e);
+        }
+        // don't update the cache to avoid checking against the transaction's 
uncommitted datasets
+        return databaseDatasets;
+    }
+
     @Override
     public List<Dataset> getDataverseDatasets(MetadataTransactionContext ctx, 
String database,
             DataverseName dataverseName) throws AlgebricksException {
@@ -902,6 +917,21 @@ public abstract class MetadataManager implements 
IMetadataManager {
         ctx.dropLibrary(database, dataverseName, libraryName);
     }
 
+    @Override
+    public List<Library> getDatabaseLibraries(MetadataTransactionContext ctx, 
String database)
+            throws AlgebricksException {
+        List<Library> databaseLibraries;
+        try {
+            // assuming that the transaction can read its own writes on the 
metadata node
+            Objects.requireNonNull(database);
+            databaseLibraries = 
metadataNode.getDatabaseLibraries(ctx.getTxnId(), database);
+        } catch (RemoteException e) {
+            throw new 
MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e);
+        }
+        // don't update the cache to avoid checking against the transaction's 
uncommitted functions
+        return databaseLibraries;
+    }
+
     @Override
     public List<Library> getDataverseLibraries(MetadataTransactionContext ctx, 
String database,
             DataverseName dataverseName) throws AlgebricksException {
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index 3871ffb1b2..cc1251bd96 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -1183,7 +1183,8 @@ public class MetadataNode implements IMetadataNode {
         }
     }
 
-    private List<Dataset> getDatabaseDatasets(TxnId txnId, String database) 
throws AlgebricksException {
+    @Override
+    public List<Dataset> getDatabaseDatasets(TxnId txnId, String database) 
throws AlgebricksException {
         try {
             ITupleReference searchKey = createTuple(database);
             DatasetTupleTranslator tupleReaderWriter = 
tupleTranslatorProvider.getDatasetTupleTranslator(false);
@@ -1239,7 +1240,8 @@ public class MetadataNode implements IMetadataNode {
         }
     }
 
-    private List<Library> getDatabaseLibraries(TxnId txnId, String database) 
throws AlgebricksException {
+    @Override
+    public List<Library> getDatabaseLibraries(TxnId txnId, String database) 
throws AlgebricksException {
         try {
             ITupleReference searchKey = createTuple(database);
             LibraryTupleTranslator tupleReaderWriter = 
tupleTranslatorProvider.getLibraryTupleTranslator(false);
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
index 226dd70034..f3cc811f6f 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
@@ -132,6 +132,8 @@ public interface IMetadataManager extends 
IMetadataBootstrap {
     Dataverse getDataverse(MetadataTransactionContext ctx, String database, 
DataverseName dataverseName)
             throws AlgebricksException;
 
+    List<Dataset> getDatabaseDatasets(MetadataTransactionContext ctx, String 
database) throws AlgebricksException;
+
     /**
      * Retrieves all datasets belonging to the given dataverse.
      *
@@ -671,6 +673,8 @@ public interface IMetadataManager extends 
IMetadataBootstrap {
     Library getLibrary(MetadataTransactionContext ctx, String database, 
DataverseName dataverseName, String libraryName)
             throws AlgebricksException, RemoteException;
 
+    List<Library> getDatabaseLibraries(MetadataTransactionContext ctx, String 
database) throws AlgebricksException;
+
     /**
      * Retireve libraries installed in a given dataverse.
      *
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
index b738533b43..a4f2ca7bdc 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
@@ -143,6 +143,8 @@ public interface IMetadataNode extends Remote, Serializable 
{
      */
     List<Dataverse> getDataverses(TxnId txnId) throws AlgebricksException, 
RemoteException;
 
+    List<Dataset> getDatabaseDatasets(TxnId txnId, String database) throws 
AlgebricksException, RemoteException;
+
     /**
      * Retrieves all datasets belonging to the given dataverse, acquiring local
      * locks on behalf of the given transaction id.
@@ -714,6 +716,8 @@ public interface IMetadataNode extends Remote, Serializable 
{
     Library getLibrary(TxnId txnId, String database, DataverseName 
dataverseName, String libraryName)
             throws AlgebricksException, RemoteException;
 
+    List<Library> getDatabaseLibraries(TxnId txnId, String database) throws 
AlgebricksException, RemoteException;
+
     /**
      * Retireve libraries installed in a given dataverse.
      *
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index f2dcde4aaf..0ecef7d012 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -955,6 +955,10 @@ public class MetadataProvider implements 
IMetadataProvider<DataSourceId, String>
                 numKeyFields / 2);
     }
 
+    public PartitioningProperties splitAndConstraints(String databaseName) {
+        return 
dataPartitioningProvider.getPartitioningProperties(databaseName);
+    }
+
     public PartitioningProperties splitAndConstraints(DataverseName 
dataverseName) {
         return 
dataPartitioningProvider.getPartitioningProperties(dataverseName);
     }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DataPartitioningProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DataPartitioningProvider.java
index d763430336..d99aa137cf 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DataPartitioningProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DataPartitioningProvider.java
@@ -68,6 +68,8 @@ public abstract class DataPartitioningProvider implements 
IDataPartitioningProvi
         }
     }
 
+    public abstract PartitioningProperties getPartitioningProperties(String 
databaseName);
+
     public abstract PartitioningProperties 
getPartitioningProperties(DataverseName dataverseName);
 
     public abstract PartitioningProperties 
getPartitioningProperties(MetadataTransactionContext mdTxnCtx, Dataset ds,
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DynamicDataPartitioningProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DynamicDataPartitioningProvider.java
index 95dae4a267..803a53b7d9 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DynamicDataPartitioningProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DynamicDataPartitioningProvider.java
@@ -36,6 +36,14 @@ public class DynamicDataPartitioningProvider extends 
DataPartitioningProvider {
         super(appCtx);
     }
 
+    @Override
+    public PartitioningProperties getPartitioningProperties(String 
databaseName) {
+        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> 
splitsAndConstraints = SplitsAndConstraintsUtil
+                
.getDatabaseSplitProviderAndConstraints(appCtx.getClusterStateManager(), 
databaseName);
+        int[][] partitionsMap = 
getOneToOnePartitionsMap(getLocationsCount(splitsAndConstraints.second));
+        return PartitioningProperties.of(splitsAndConstraints.first, 
splitsAndConstraints.second, partitionsMap);
+    }
+
     @Override
     public PartitioningProperties getPartitioningProperties(DataverseName 
dataverseName) {
         Pair<IFileSplitProvider, AlgebricksPartitionConstraint> 
splitsAndConstraints = SplitsAndConstraintsUtil
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SplitsAndConstraintsUtil.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SplitsAndConstraintsUtil.java
index a83b8dc8e1..2abb4f6ad5 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SplitsAndConstraintsUtil.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SplitsAndConstraintsUtil.java
@@ -45,6 +45,17 @@ public class SplitsAndConstraintsUtil {
     private SplitsAndConstraintsUtil() {
     }
 
+    private static FileSplit[] getDatabaseSplits(IClusterStateManager 
clusterStateManager, String databaseName) {
+        List<FileSplit> splits = new ArrayList<>();
+        // get all partitions
+        for (ClusterPartition clusterPartition : 
clusterStateManager.getClusterPartitons()) {
+            File f = new 
File(StoragePathUtil.prepareStoragePartitionPath(clusterPartition.getPartitionId()),
+                    databaseName);
+            
splits.add(StoragePathUtil.getFileSplitForClusterPartition(clusterPartition, 
f.getPath()));
+        }
+        return splits.toArray(new FileSplit[] {});
+    }
+
     private static FileSplit[] getDataverseSplits(IClusterStateManager 
clusterStateManager,
             DataverseName dataverseName) {
         List<FileSplit> splits = new ArrayList<>();
@@ -84,6 +95,12 @@ public class SplitsAndConstraintsUtil {
         return splits.toArray(new FileSplit[] {});
     }
 
+    public static Pair<IFileSplitProvider, AlgebricksPartitionConstraint> 
getDatabaseSplitProviderAndConstraints(
+            IClusterStateManager clusterStateManager, String databaseName) {
+        FileSplit[] splits = getDatabaseSplits(clusterStateManager, 
databaseName);
+        return StoragePathUtil.splitProviderAndPartitionConstraints(splits);
+    }
+
     public static Pair<IFileSplitProvider, AlgebricksPartitionConstraint> 
getDataverseSplitProviderAndConstraints(
             IClusterStateManager clusterStateManager, DataverseName 
dataverseName) {
         FileSplit[] splits = getDataverseSplits(clusterStateManager, 
dataverseName);
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/StaticDataPartitioningProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/StaticDataPartitioningProvider.java
index ffcdc57929..f8f967ad97 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/StaticDataPartitioningProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/StaticDataPartitioningProvider.java
@@ -48,6 +48,15 @@ public class StaticDataPartitioningProvider extends 
DataPartitioningProvider {
         super(appCtx);
     }
 
+    @Override
+    public PartitioningProperties getPartitioningProperties(String 
databaseName) {
+        SplitComputeLocations dataverseSplits = getSplits(databaseName);
+        StorageComputePartitionsMap partitionMap = 
clusterStateManager.getStorageComputeMap();
+        int[][] partitionsMap = partitionMap.getComputeToStorageMap(false);
+        return PartitioningProperties.of(dataverseSplits.getSplitsProvider(), 
dataverseSplits.getConstraints(),
+                partitionsMap);
+    }
+
     @Override
     public PartitioningProperties getPartitioningProperties(DataverseName 
dataverseName) {
         SplitComputeLocations dataverseSplits = 
getDataverseSplits(dataverseName);
@@ -69,13 +78,16 @@ public class StaticDataPartitioningProvider extends 
DataPartitioningProvider {
     }
 
     private SplitComputeLocations getDataverseSplits(DataverseName 
dataverseName) {
+        return getSplits(StoragePathUtil.prepareDataverseName(dataverseName));
+    }
+
+    private SplitComputeLocations getSplits(String subPath) {
         List<FileSplit> splits = new ArrayList<>();
         List<String> locations = new ArrayList<>();
         Set<Integer> uniqueLocations = new HashSet<>();
         StorageComputePartitionsMap partitionMap = 
clusterStateManager.getStorageComputeMap();
         for (int i = 0; i < storagePartitionsCounts; i++) {
-            File f = new File(StoragePathUtil.prepareStoragePartitionPath(i),
-                    StoragePathUtil.prepareDataverseName(dataverseName));
+            File f = new File(StoragePathUtil.prepareStoragePartitionPath(i), 
subPath);
             ComputePartition computePartition = 
partitionMap.getComputePartition(i);
             splits.add(new MappedFileSplit(computePartition.getNodeId(), 
f.getPath(), 0));
             if (!uniqueLocations.contains(computePartition.getId())) {

Reply via email to