Murtadha Hubail has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/3180

Change subject: [NO ISSUE][TX] Maintain Txn Accessed Datasets
......................................................................

[NO ISSUE][TX] Maintain Txn Accessed Datasets

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- For every transaction, maintain a list of datasets
  the transaction is attempting to access.

Change-Id: I54cb04ac313d73981dd43d575875fa003fcd3bb9
---
M 
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
2 files changed, 33 insertions(+), 6 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/80/3180/1

diff --git 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
index 50b13e2..02cda1d 100644
--- 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
+++ 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
@@ -44,6 +44,7 @@
 import org.apache.asterix.lang.sqlpp.visitor.CheckDatasetOnlyResolutionVisitor;
 import 
org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -188,20 +189,32 @@
 
     private boolean datasetExists(String dataverseName, String datasetName, 
SourceLocation sourceLoc)
             throws CompilationException {
+        Dataset dataset = null;
         try {
-            return metadataProvider.findDataset(dataverseName, datasetName) != 
null
-                    || fullyQualifiedDatasetNameExists(datasetName);
+            dataset = metadataProvider.findDataset(dataverseName, datasetName);
+            if (dataset != null) {
+                return true;
+            }
+            dataset = findDatasetByFullyQualifiedName(datasetName);
+            return dataset != null;
         } catch (AlgebricksException e) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, e, 
sourceLoc, e.getMessage());
+        } finally {
+            if (dataset != null) {
+                metadataProvider.addAccessedDataset(dataset);
+            }
         }
     }
 
-    private boolean fullyQualifiedDatasetNameExists(String name) throws 
AlgebricksException {
+    private Dataset findDatasetByFullyQualifiedName(String name) throws 
AlgebricksException {
         if (name.indexOf('.') < 0) {
-            return false;
+            return null;
         }
         String[] path = StringUtils.split(name, '.');
-        return path.length == 2 && metadataProvider.findDataset(path[0], 
path[1]) != null;
+        if (path.length != 2) {
+            return null;
+        }
+        return metadataProvider.findDataset(path[0], path[1]);
     }
 
     @Override
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 85beb95..adfaa89 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
@@ -21,10 +21,13 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.asterix.common.cluster.IClusterStateManager;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
@@ -124,9 +127,9 @@
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
-import org.apache.hyracks.api.result.ResultSetId;
 import org.apache.hyracks.api.io.FileSplit;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.api.result.ResultSetId;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import 
org.apache.hyracks.dataflow.common.data.marshalling.ShortSerializerDeserializer;
 import org.apache.hyracks.dataflow.std.file.IFileSplitProvider;
@@ -151,6 +154,7 @@
     private final IFunctionManager functionManager;
     private final LockList locks;
     private final Map<String, Object> config;
+    private final Set<Dataset> txnAccessedDatasets;
 
     private Dataverse defaultDataverse;
     private MetadataTransactionContext mdTxnCtx;
@@ -173,6 +177,7 @@
         functionManager = ((IFunctionExtensionManager) 
appCtx.getExtensionManager()).getFunctionManager();
         locks = new LockList();
         config = new HashMap<>();
+        txnAccessedDatasets = new HashSet<>();
     }
 
     @SuppressWarnings("unchecked")
@@ -233,6 +238,7 @@
 
     public void setMetadataTxnContext(MetadataTransactionContext mdTxnCtx) {
         this.mdTxnCtx = mdTxnCtx;
+        txnAccessedDatasets.clear();
     }
 
     public MetadataTransactionContext getMetadataTxnContext() {
@@ -1621,4 +1627,12 @@
     public ICompressionManager getCompressionManager() {
         return appCtx.getCompressionManager();
     }
+
+    public void addAccessedDataset(Dataset dataset) {
+        txnAccessedDatasets.add(dataset);
+    }
+
+    public Set<Dataset> getAccssedDatasets() {
+        return Collections.unmodifiableSet(txnAccessedDatasets);
+    }
 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3180
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I54cb04ac313d73981dd43d575875fa003fcd3bb9
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <[email protected]>

Reply via email to