Till Westmann has posted comments on this change.

Change subject: Add Asterix Extension Manager
......................................................................


Patch Set 13:

(27 comments)

One rounds of comments - didn't make it all the way through (had to fight with 
some build-problems ...)

https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java
File 
asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java:

Line 85:                 runtime.stop();
We're stopping the runtime for every message delivery?


Line 101:                 LOGGER.warn("Failed to stop runtime: " + runtimeId, 
e);
Is a warning enough here? Will the system continue to work as before? Or are we 
building up garbage?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveRuntimeManager.java
File 
asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveRuntimeManager.java:

Line 64:     public ActiveSourceOperatorNodePushable 
getFeedRuntime(ActiveRuntimeId runtimeId) {
Method name seems wrong.


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java:

Line 37:     public enum Language {
Not sure that we should limit the languages with an enum, but it's good enough 
for now. If somebody wants to add another language there's another opportunity 
to improve extension points ...


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionFunctionIdentifier.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionFunctionIdentifier.java:

Line 27: public class ExtensionFunctionIdentifier extends FunctionIdentifier {
It feels a little strange that we would need this. It would be nice if every 
function just had an identifier and we could get relevant properties from the 
function or via the identifier. Maybe we should file an issue to remove the 
ExtensionFunctionIdentifier at a later stage?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IExtensionStatement.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IExtensionStatement.java:

Line 29: public interface IExtensionStatement extends Statement {
Looks like a nice interface.


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java:

Line 23: import org.apache.asterix.lang.common.util.FunctionUtils;
I think that the number of modified files will go down a bit if we remove the 
's' as well.


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java:

Line 154:     //TODO(amoudi/yingyi): refactor this to use a provider instead of 
passing the extensionManager
I completely agree. Could you add JIRA issues for the big TODO's?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java:

Line 794:                     
FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.AND), filterExpressions));
Please remove the 's' :)


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java:

Line 101:             } ;
Don't need the space or the semicolon ..


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java:

Line 112:             } ;
remove space and semicolon


Line 233:                     }
Would be nice to pull out

    ((AqlDataSource) dataSourceScan.getDataSource()).getDatasourceType()

BTW, do we know that the cast to (AqlDataSource) will always succeed?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java:

Line 37: import org.apache.asterix.lang.common.util.FunctionUtils;
Probably not needed at all ...


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java:

Line 104:     JobSpecification rewriteCompileQuery(AqlMetadataProvider 
metadataProvider, Query query,
It seems that this is a sub-functionality of statement execution. Probably we 
should have a separate interface (IQueryCompiler?) for this - there could still 
be one class that implements both ...
Maybe file an issue for that?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultPrinter.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultPrinter.java:

Line 19: package org.apache.asterix.translator;
Why would the ResultReader be part of the translator package? It's also unclear 
why it should be in the "algebra" module.


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultReader.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultReader.java:

Line 19: package org.apache.asterix.translator;
Seems that the old package was better. Even though we currently have execution 
very close to translation it should be different - especially if the result is 
picked up asynchronously ...


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultUtils.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultUtils.java:

Line 54:             .collect(Collectors.toMap(Map.Entry::getKey, 
Map.Entry::getValue)));
Funky. Why is this better? (Just curious)


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ConstantExpressionUtils.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ConstantExpressionUtils.java:

Line 34: public class ConstantExpressionUtils {
This will clash with the ConstantExpressionUtil in 
https://asterix-gerrit.ics.uci.edu/1074/. But we'll solve that once we get 
there ...


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java:

Line 98:     private final CompilerExtensionManager ccExtensionManager;
s/ccExtensionManager/cExtensionManager/?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java:

Line 42: import org.apache.log4j.Logger;
All good except for the use of log4j (ASTERIXDB-1564) ...


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java:

Line 67:         this.parserFactory = compilationProvider.getParserFactory(); 
WS


Line 217:             if (!(st.getAPI() == Statement.API.ALL || getAPI() == 
Statement.API.ALL || st.getAPI() == getAPI())) {
That doesn't seem to make a lot of sense. Now the allowedStatements are usused 
..
What should this change achieve?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CompilerExtensionManager.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CompilerExtensionManager.java:

Line 115:                     SqlppCompilationProvider.class.getSimpleName());
Probably shouldn't be the SQL++ provider for any language.


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java:

Line 46:      * 
WS


Line 97:      * 
WS


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IMetadataEntity.java
File 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IMetadataEntity.java:

Line 24: public interface IMetadataEntity extends Serializable {
I'm not sure what these operations are (maybe we could comment on them) but it 
seems that they are only need in asterix-algebra and asterix-app and so they 
could stay in asterix-metadata. Further, the relationship between the class 
name IMetadataEntity and the constants if not very clear (at least to me). 
Maybe we shouldn't touch this for this change?


https://asterix-gerrit.ics.uci.edu/#/c/1017/13/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java
File 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java:

Line 44:     public byte getAPI();
This is very confusing:
1) The comment is just copied.
2) It doesn't seem right to mix API information with the language here.
We could consider statement categories (DDL, UPDATE, QUERY), but I don't know 
if that's sufficient for the use-case ...


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

Gerrit-MessageType: comment
Gerrit-Change-Id: I280268495cc3aad00f898cba21f7299f7120ce5c
Gerrit-PatchSet: 13
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>
Gerrit-Reviewer: Steven Jacobs <sjaco...@ucr.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-Reviewer: Yingyi Bu <buyin...@gmail.com>
Gerrit-Reviewer: abdullah alamoudi <bamou...@gmail.com>
Gerrit-HasComments: Yes

Reply via email to