>From Ali Alsuliman <[email protected]>:
Ali Alsuliman has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20832?usp=email )
Change subject: WIP: metadata auth
......................................................................
WIP: metadata auth
Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
A
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
M
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
M
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
A
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
M
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
10 files changed, 112 insertions(+), 11 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/32/20832/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
index 30c6623..4c809b4 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
@@ -23,6 +23,7 @@
import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory;
import org.apache.asterix.algebra.base.ILangExtension;
import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
import org.apache.asterix.lang.common.base.IParserFactory;
import org.apache.asterix.lang.common.base.IRewriterFactory;
@@ -58,6 +59,11 @@
IRuleSetFactory getRuleSetFactory();
/**
+ * @return the compilation context containing information useful during
compilation and job generation
+ */
+ ICompilationContextFactory getCompilationContextFactory();
+
+ /**
* @return all configurable parameters of a language implementation.
*/
Set<String> getCompilerOptions();
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
index ca97aa6..8281860 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
@@ -27,6 +27,7 @@
import org.apache.asterix.common.config.CompilerProperties;
import org.apache.asterix.external.feed.watch.FeedActivityDetails;
import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
import org.apache.asterix.lang.common.base.IParserFactory;
import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.statement.StartFeedStatement;
@@ -82,6 +83,11 @@
}
@Override
+ public ICompilationContextFactory getCompilationContextFactory() {
+ return ICompilationContextFactory.INSTANCE;
+ }
+
+ @Override
public Set<String> getCompilerOptions() {
return new HashSet<>(Set.of(CompilerProperties.COMPILER_JOINMEMORY_KEY,
CompilerProperties.COMPILER_GROUPMEMORY_KEY,
CompilerProperties.COMPILER_SORTMEMORY_KEY,
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
index fe4ada5..2acc502 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
@@ -159,7 +159,7 @@
UnnestingPositionWriterFactory.INSTANCE, null,
new ExpressionRuntimeProvider(new
QueryLogicalExpressionJobGen(metadataProvider.getFunctionManager())),
ExpressionTypeComputer.INSTANCE, null, null, null, null,
GlobalConfig.DEFAULT_FRAME_SIZE, null,
- NoOpWarningCollector.INSTANCE, 0, new
PhysicalOptimizationConfig());
+ NoOpWarningCollector.INSTANCE, 0, new
PhysicalOptimizationConfig(), null);
}
public void reset(IOptimizationContext context) {
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index 2988c97..ad5b7f9 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -63,6 +63,7 @@
import org.apache.asterix.formats.base.IDataFormat;
import org.apache.asterix.jobgen.QueryLogicalExpressionJobGen;
import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
import org.apache.asterix.lang.common.base.IQueryRewriter;
import org.apache.asterix.lang.common.base.IReturningStatement;
import org.apache.asterix.lang.common.base.IRewriterFactory;
@@ -146,6 +147,7 @@
private final IRuleSetFactory ruleSetFactory;
private final Set<String> configurableParameterNames;
private final ExecutionPlans executionPlans;
+ private final ICompilationContextFactory compilationContextFactory;
private PlanInfo lastPlan;
public APIFramework(ILangCompilationProvider compilationProvider) {
@@ -154,6 +156,7 @@
this.translatorFactory =
compilationProvider.getExpressionToPlanTranslatorFactory();
this.ruleSetFactory = compilationProvider.getRuleSetFactory();
this.configurableParameterNames =
compilationProvider.getCompilerOptions();
+ this.compilationContextFactory =
compilationProvider.getCompilationContextFactory();
executionPlans = new ExecutionPlans();
lastPlan = null;
}
@@ -321,6 +324,7 @@
builder.setSerializerDeserializerProvider(format.getSerdeProvider());
builder.setTypeTraitProvider(format.getTypeTraitProvider());
builder.setNormalizedKeyComputerFactoryProvider(format.getNormalizedKeyComputerFactoryProvider());
+
builder.setCompilationContext(compilationContextFactory.createCompilationContext(requestParameters));
IndexAdvisor indexAdvisor = new IndexAdvisor(isAdviceOnly);
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
new file mode 100644
index 0000000..8dba1d2
--- /dev/null
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.base;
+
+import org.apache.asterix.common.api.ICommonRequestParameters;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.hyracks.algebricks.core.jobgen.impl.ICompilationContext;
+
+@FunctionalInterface
+public interface ICompilationContextFactory {
+
+ ICompilationContextFactory INSTANCE = request ->
ICompilationContext.INSTANCE;
+
+ ICompilationContext createCompilationContext(ICommonRequestParameters
request) throws CompilationException;
+
+}
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 1d6d1a2..099c91b 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
@@ -169,6 +169,7 @@
import
org.apache.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor;
import
org.apache.hyracks.storage.am.common.api.IModificationOperationCallbackFactory;
import
org.apache.hyracks.storage.am.common.api.ISearchOperationCallbackFactory;
+import org.apache.hyracks.storage.am.common.api.ITupleFilter;
import org.apache.hyracks.storage.am.common.api.ITupleFilterFactory;
import
org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
import
org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
@@ -350,10 +351,6 @@
return dataFormat;
}
- public void setDataFormat(IDataFormat dataFormat) {
- this.dataFormat = dataFormat;
- }
-
public INamespaceResolver getNamespaceResolver() {
return namespaceResolver;
}
@@ -702,6 +699,12 @@
datasetPartitioningProp.getNumberOfPartitions());
}
+ ITupleFilterFactory extTupleFilterFactory =
getExtTupleFilterFactory(context, dataset, primaryKeyFields);
+ if (extTupleFilterFactory != null) {
+ tupleFilterFactory = tupleFilterFactory == null ?
extTupleFilterFactory
+ : andTupleFilter(tupleFilterFactory,
extTupleFilterFactory);
+ }
+
if (dataset.getDatasetType() == DatasetType.INTERNAL) {
btreeSearchOp = !isSecondary && isPrimaryIndexPointSearch
? new LSMBTreeBatchPointSearchOperatorDescriptor(jobSpec,
outputRecDesc, lowKeyFields,
@@ -728,6 +731,16 @@
return new Pair<>(btreeSearchOp,
datasetPartitioningProp.getConstraints());
}
+ private ITupleFilterFactory andTupleFilter(ITupleFilterFactory
tupleFilterFactory,
+ ITupleFilterFactory extTupleFilterFactory) {
+ return ctx -> {
+ ITupleFilter tupleFilter =
tupleFilterFactory.createTupleFilter(ctx);
+ ITupleFilter extTupleFilter =
extTupleFilterFactory.createTupleFilter(ctx);
+
+ return (ITupleFilter) tuple -> tupleFilter.accept(tuple) &&
extTupleFilter.accept(tuple);
+ };
+ }
+
public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>
getRtreeSearchRuntime(JobSpecification jobSpec,
List<LogicalVariable> outputVars, IOperatorSchema opSchema,
IVariableTypeEnvironment typeEnv,
JobGenContext context, boolean retainInput, boolean retainMissing,
@@ -2023,6 +2036,11 @@
return Collections.unmodifiableSet(accessedEntities);
}
+ protected ITupleFilterFactory getExtTupleFilterFactory(JobGenContext ctx,
Dataset ds, int[] pkFields)
+ throws AlgebricksException {
+ return null;
+ }
+
private void validateDatabaseObjectNameImpl(String name, SourceLocation
sourceLoc) throws AlgebricksException {
if (name == null || name.isEmpty()) {
throw new AsterixException(ErrorCode.INVALID_DATABASE_OBJECT_NAME,
sourceLoc, "");
diff --git
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
index b2b223e..8ec2a6f 100644
---
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
+++
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
@@ -32,6 +32,7 @@
import
org.apache.hyracks.algebricks.core.algebra.expressions.IMergeAggregationExpressionFactory;
import
org.apache.hyracks.algebricks.core.algebra.expressions.IMissableTypeComputer;
import
org.apache.hyracks.algebricks.core.algebra.expressions.IPartialAggregationTypeComputer;
+import org.apache.hyracks.algebricks.core.jobgen.impl.ICompilationContext;
import org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
import org.apache.hyracks.algebricks.core.rewriter.base.IRuleSetKind;
@@ -84,6 +85,7 @@
protected AlgebricksAbsolutePartitionConstraint clusterLocations;
protected IWarningCollector warningCollector;
protected long maxWarnings;
+ protected ICompilationContext compilationContext;
public abstract ICompilerFactory create();
@@ -316,4 +318,8 @@
public long getMaxWarnings() {
return maxWarnings;
}
+
+ public void setCompilationContext(ICompilationContext compilationContext) {
+ this.compilationContext = compilationContext;
+ }
}
diff --git
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
index a994fa3..6ab2fb3 100644
---
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
+++
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
@@ -84,10 +84,6 @@
private final IOptimizationContextFactory optCtxFactory;
- public HeuristicCompilerFactoryBuilder() {
- this.optCtxFactory = DefaultOptimizationContextFactory.INSTANCE;
- }
-
public HeuristicCompilerFactoryBuilder(IOptimizationContextFactory
optCtxFactory) {
this.optCtxFactory = optCtxFactory;
}
@@ -131,7 +127,7 @@
normalizedKeyComputerFactoryProvider,
expressionRuntimeProvider, expressionTypeComputer, oc,
expressionEvalSizeComputer,
partialAggregationTypeComputer, predEvaluatorFactoryProvider,
physicalOptimizationConfig.getFrameSize(),
clusterLocations, warningCollector, maxWarnings,
- physicalOptimizationConfig);
+ physicalOptimizationConfig, compilationContext);
return new PlanCompiler(context);
}
}
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
new file mode 100644
index 0000000..c52477b
--- /dev/null
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.algebricks.core.jobgen.impl;
+
+public interface ICompilationContext {
+
+ ICompilationContext INSTANCE = new ICompilationContext() {
+ };
+
+}
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
index 471380c..254fe7c 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
@@ -82,6 +82,7 @@
private final ITypingContext typingContext;
private final IWarningCollector warningCollector;
private final long maxWarnings;
+ private final ICompilationContext compilationContext;
public JobGenContext(IOperatorSchema outerFlowSchema, IMetadataProvider<?,
?> metadataProvider, Object appContext,
ISerializerDeserializerProvider serializerDeserializerProvider,
@@ -99,7 +100,8 @@
IPartialAggregationTypeComputer partialAggregationTypeComputer,
IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider,
int frameSize,
AlgebricksAbsolutePartitionConstraint clusterLocations,
IWarningCollector warningCollector,
- long maxWarnings, PhysicalOptimizationConfig
physicalOptimizationConfig) {
+ long maxWarnings, PhysicalOptimizationConfig
physicalOptimizationConfig,
+ ICompilationContext compilationContext) {
this.outerFlowSchema = outerFlowSchema;
this.metadataProvider = metadataProvider;
this.appContext = appContext;
@@ -126,6 +128,7 @@
this.predEvaluatorFactoryProvider = predEvaluatorFactoryProvider;
this.frameSize = frameSize;
this.physicalOptimizationConfig = physicalOptimizationConfig;
+ this.compilationContext = compilationContext;
this.varCounter = 0;
this.warningCollector = warningCollector;
this.maxWarnings = maxWarnings;
@@ -256,4 +259,8 @@
public PhysicalOptimizationConfig getPhysicalOptimizationConfig() {
return physicalOptimizationConfig;
}
+
+ public ICompilationContext geCompilationContext() {
+ return compilationContext;
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20832?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
Gerrit-Change-Number: 20832
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>