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]>