Dmitry Lychagin has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/3378


Change subject: [NO ISSUE][CONF] Add compilation provider to NC application 
context
......................................................................

[NO ISSUE][CONF] Add compilation provider to NC application context

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

Details:
- Create NCExtensionManager in NCApplication instead of
  NCAppRuntimeContext (aligned with how CCApplication creates
  CCExtensionManager)
- Pass extension manager to application context via constructor
  instead of setter method (for both CC and NC contexts)
- Move getExtensionManager() from ICcApplicationContext
  to IApplicationContext, so it's available in NC application context
- Add compilation provider to NC application context
  (NCExtensionManager.getCompilationProvider())
- Add compilation provider to NCQueryServiceServlet constructor

Change-Id: Ibb4dc6d8dbc00c8a701fddb1a3205d1070078cb4
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IApplicationContext.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java
M 
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java
8 files changed, 63 insertions(+), 51 deletions(-)



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

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
index 5a6bdd7..8923ae8 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
@@ -39,6 +39,7 @@
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.common.messaging.api.INCMessageBroker;
 import org.apache.asterix.common.messaging.api.MessageFuture;
+import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.translator.IStatementExecutor;
 import org.apache.asterix.translator.ResultProperties;
@@ -63,9 +64,9 @@
 public class NCQueryServiceServlet extends QueryServiceServlet {

     public NCQueryServiceServlet(ConcurrentMap<String, Object> ctx, String[] 
paths, IApplicationContext appCtx,
-            ILangExtension.Language queryLanguage,
+            ILangExtension.Language queryLanguage, ILangCompilationProvider 
compilationProvider,
             Function<IServletRequest, Map<String, String>> 
optionalParamProvider) {
-        super(ctx, paths, appCtx, queryLanguage, null, null, null, 
optionalParamProvider);
+        super(ctx, paths, appCtx, queryLanguage, compilationProvider, null, 
null, optionalParamProvider);
     }

     @Override
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
index 182f982..e11302b 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
@@ -21,9 +21,7 @@
 import java.io.IOException;
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -42,21 +40,18 @@
 import org.apache.asterix.common.api.IReceptionistFactory;
 import org.apache.asterix.common.cluster.ClusterPartition;
 import org.apache.asterix.common.config.ActiveProperties;
-import org.apache.asterix.common.config.AsterixExtension;
 import org.apache.asterix.common.config.BuildProperties;
 import org.apache.asterix.common.config.CompilerProperties;
 import org.apache.asterix.common.config.ExternalProperties;
 import org.apache.asterix.common.config.MessagingProperties;
 import org.apache.asterix.common.config.MetadataProperties;
 import org.apache.asterix.common.config.NodeProperties;
-import org.apache.asterix.common.config.PropertiesAccessor;
 import org.apache.asterix.common.config.ReplicationProperties;
 import org.apache.asterix.common.config.StorageProperties;
 import org.apache.asterix.common.config.TransactionProperties;
 import org.apache.asterix.common.context.DatasetLifecycleManager;
 import org.apache.asterix.common.context.DatasetMemoryManager;
 import org.apache.asterix.common.context.IStorageComponentProvider;
-import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.library.ILibraryManager;
 import org.apache.asterix.common.replication.IReplicationChannel;
 import org.apache.asterix.common.replication.IReplicationManager;
@@ -157,10 +152,8 @@
     private ICacheManager cacheManager;
     private IConfigValidator configValidator;

-    public NCAppRuntimeContext(INCServiceContext ncServiceContext, 
List<AsterixExtension> extensions,
-            IPropertiesFactory propertiesFactory) throws AsterixException, 
InstantiationException,
-            IllegalAccessException, ClassNotFoundException, IOException {
-        List<AsterixExtension> allExtensions = new ArrayList<>();
+    public NCAppRuntimeContext(INCServiceContext ncServiceContext, 
NCExtensionManager extensionManager,
+            IPropertiesFactory propertiesFactory) {
         this.ncServiceContext = ncServiceContext;
         compilerProperties = propertiesFactory.newCompilerProperties();
         externalProperties = propertiesFactory.newExternalProperties();
@@ -173,12 +166,7 @@
         messagingProperties = propertiesFactory.newMessagingProperties();
         nodeProperties = propertiesFactory.newNodeProperties();
         libraryManager = new ExternalLibraryManager();
-        if (extensions != null) {
-            allExtensions.addAll(extensions);
-        }
-        PropertiesAccessor propertiesAccessor = 
PropertiesAccessor.getInstance(ncServiceContext.getAppConfig());
-        allExtensions.addAll(propertiesAccessor.getExtensions());
-        ncExtensionManager = new NCExtensionManager(allExtensions);
+        ncExtensionManager = extensionManager;
         componentProvider = new StorageComponentProvider();
         resourceIdFactory = new 
GlobalResourceIdFactoryProvider(ncServiceContext).createResourceIdFactory();
         persistedResourceRegistry = 
ncServiceContext.getPersistedResourceRegistry();
@@ -484,7 +472,8 @@
                 .setMetadataNode(metadataNodeStub);
     }

-    public NCExtensionManager getNcExtensionManager() {
+    @Override
+    public NCExtensionManager getExtensionManager() {
         return ncExtensionManager;
     }

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
index 6ea97d3..a1405a6 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
@@ -22,13 +22,19 @@
 import java.util.ArrayList;
 import java.util.List;

+import org.apache.asterix.algebra.base.ILangExtension;
+import org.apache.asterix.common.api.ExtensionId;
 import org.apache.asterix.common.api.IExtension;
 import org.apache.asterix.common.config.AsterixExtension;
 import org.apache.asterix.common.exceptions.ACIDException;
+import org.apache.asterix.compiler.provider.AqlCompilationProvider;
+import org.apache.asterix.compiler.provider.ILangCompilationProvider;
+import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.metadata.api.IMetadataExtension;
 import org.apache.asterix.metadata.api.INCExtensionManager;
 import 
org.apache.asterix.metadata.entitytupletranslators.MetadataTupleTranslatorProvider;
 import org.apache.asterix.utils.ExtensionUtil;
+import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.api.application.INCServiceContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;

@@ -38,6 +44,8 @@
  */
 public class NCExtensionManager implements INCExtensionManager {

+    private final ILangCompilationProvider aqlCompilationProvider;
+    private final ILangCompilationProvider sqlppCompilationProvider;
     private final MetadataTupleTranslatorProvider tupleTranslatorProvider;
     private final List<IMetadataExtension> mdExtensions;

@@ -57,6 +65,8 @@
      */
     public NCExtensionManager(List<AsterixExtension> list)
             throws InstantiationException, IllegalAccessException, 
ClassNotFoundException, HyracksDataException {
+        Pair<ExtensionId, ILangCompilationProvider> aqlcp = null;
+        Pair<ExtensionId, ILangCompilationProvider> sqlppcp = null;
         IMetadataExtension tupleTranslatorProviderExtension = null;
         mdExtensions = new ArrayList<>();
         if (list != null) {
@@ -64,6 +74,12 @@
                 IExtension extension = (IExtension) 
Class.forName(extensionConf.getClassName()).newInstance();
                 extension.configure(extensionConf.getArgs());
                 switch (extension.getExtensionKind()) {
+                    case LANG:
+                        ILangExtension le = (ILangExtension) extension;
+                        aqlcp = 
ExtensionUtil.extendLangCompilationProvider(ILangExtension.Language.AQL, aqlcp, 
le);
+                        sqlppcp =
+                                
ExtensionUtil.extendLangCompilationProvider(ILangExtension.Language.SQLPP, 
sqlppcp, le);
+                        break;
                     case METADATA:
                         IMetadataExtension mde = (IMetadataExtension) 
extension;
                         mdExtensions.add(mde);
@@ -75,10 +91,23 @@
                 }
             }
         }
+        this.aqlCompilationProvider = aqlcp == null ? new 
AqlCompilationProvider() : aqlcp.second;
+        this.sqlppCompilationProvider = sqlppcp == null ? new 
SqlppCompilationProvider() : sqlppcp.second;
         this.tupleTranslatorProvider = tupleTranslatorProviderExtension == 
null ? new MetadataTupleTranslatorProvider()
                 : 
tupleTranslatorProviderExtension.getMetadataTupleTranslatorProvider();
     }

+    public ILangCompilationProvider 
getCompilationProvider(ILangExtension.Language lang) {
+        switch (lang) {
+            case AQL:
+                return aqlCompilationProvider;
+            case SQLPP:
+                return sqlppCompilationProvider;
+            default:
+                throw new IllegalArgumentException(String.valueOf(lang));
+        }
+    }
+
     public List<IMetadataExtension> getMetadataExtensions() {
         return mdExtensions;
     }
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index 76e1d88..6f7ea46 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -67,6 +67,7 @@
 import org.apache.asterix.common.config.ReplicationProperties;
 import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
+import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.library.ILibraryManager;
 import org.apache.asterix.common.replication.INcLifecycleCoordinator;
 import org.apache.asterix.common.utils.Servlets;
@@ -151,13 +152,10 @@
         ExternalLibraryUtils.setUpExternaLibraries(libraryManager, false);
         componentProvider = new StorageComponentProvider();

-        List<AsterixExtension> extensions = new ArrayList<>();
-        extensions.addAll(getExtensions());
-        ccExtensionManager = new CCExtensionManager(extensions);
+        ccExtensionManager = new CCExtensionManager(new 
ArrayList<>(getExtensions()));
         IGlobalRecoveryManager globalRecoveryManager = 
createGlobalRecoveryManager();
         appCtx = createApplicationContext(libraryManager, 
globalRecoveryManager, lifecycleCoordinator,
-                () -> new Receptionist("CC"), ConfigValidator::new);
-        appCtx.setExtensionManager(ccExtensionManager);
+                () -> new Receptionist("CC"), ConfigValidator::new, 
ccExtensionManager);
         final CCConfig ccConfig = controllerService.getCCConfig();
         if (System.getProperty("java.rmi.server.hostname") == null) {
             System.setProperty("java.rmi.server.hostname", 
ccConfig.getClusterPublicAddress());
@@ -184,11 +182,11 @@

     protected ICcApplicationContext createApplicationContext(ILibraryManager 
libraryManager,
             IGlobalRecoveryManager globalRecoveryManager, 
INcLifecycleCoordinator lifecycleCoordinator,
-            IReceptionistFactory receptionistFactory, IConfigValidatorFactory 
configValidatorFactory)
-            throws AlgebricksException, IOException {
+            IReceptionistFactory receptionistFactory, IConfigValidatorFactory 
configValidatorFactory,
+            CCExtensionManager ccExtensionManager) throws AlgebricksException, 
IOException {
         return new CcApplicationContext(ccServiceCtx, getHcc(), 
libraryManager, () -> MetadataManager.INSTANCE,
                 globalRecoveryManager, lifecycleCoordinator, new 
ActiveNotificationHandler(), componentProvider,
-                new MetadataLockManager(), receptionistFactory, 
configValidatorFactory);
+                new MetadataLockManager(), receptionistFactory, 
configValidatorFactory, ccExtensionManager);
     }

     protected IGlobalRecoveryManager createGlobalRecoveryManager() throws 
Exception {
@@ -205,7 +203,7 @@
         LoggingConfigUtil.defaultIfMissing(GlobalConfig.ASTERIX_LOGGER_NAME, 
level);
     }

-    protected List<AsterixExtension> getExtensions() throws Exception {
+    protected List<AsterixExtension> getExtensions() throws IOException, 
AsterixException {
         return new 
ExtensionProperties(PropertiesAccessor.getInstance(ccServiceCtx.getAppConfig())).getExtensions();
     }

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
index 9135688..1bf3260 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
@@ -19,8 +19,8 @@
 package org.apache.asterix.hyracks.bootstrap;

 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;

@@ -30,6 +30,7 @@
 import org.apache.asterix.app.config.ConfigValidator;
 import org.apache.asterix.app.io.PersistedResourceRegistry;
 import org.apache.asterix.app.nc.NCAppRuntimeContext;
+import org.apache.asterix.app.nc.NCExtensionManager;
 import org.apache.asterix.app.nc.RecoveryManager;
 import 
org.apache.asterix.app.replication.message.RegistrationTasksRequestMessage;
 import org.apache.asterix.common.api.AsterixThreadFactory;
@@ -38,6 +39,7 @@
 import org.apache.asterix.common.api.IPropertiesFactory;
 import org.apache.asterix.common.api.IReceptionistFactory;
 import org.apache.asterix.common.config.AsterixExtension;
+import org.apache.asterix.common.config.ExtensionProperties;
 import org.apache.asterix.common.config.ExternalProperties;
 import org.apache.asterix.common.config.GlobalConfig;
 import org.apache.asterix.common.config.MessagingProperties;
@@ -84,6 +86,7 @@
     private static final Logger LOGGER = LogManager.getLogger();

     protected INCServiceContext ncServiceCtx;
+    protected NCExtensionManager ncExtensionManager;
     private INcApplicationContext runtimeContext;
     private String nodeId;
     private boolean stopInitiated;
@@ -124,7 +127,9 @@
                     
(controllerService).getConfiguration().getClusterPublicAddress());
         }
         MetadataBuiltinFunctions.init();
-        runtimeContext = new NCAppRuntimeContext(ncServiceCtx, 
getExtensions(), getPropertiesFactory());
+
+        ncExtensionManager = new NCExtensionManager(new 
ArrayList<>(getExtensions()));
+        runtimeContext = new NCAppRuntimeContext(ncServiceCtx, 
ncExtensionManager, getPropertiesFactory());
         MetadataProperties metadataProperties = 
runtimeContext.getMetadataProperties();
         if 
(!metadataProperties.getNodeNames().contains(this.ncServiceCtx.getNodeId())) {
             if (LOGGER.isInfoEnabled()) {
@@ -187,8 +192,8 @@
         webManager.add(apiServer);
     }

-    protected List<AsterixExtension> getExtensions() {
-        return Collections.emptyList();
+    protected List<AsterixExtension> getExtensions() throws IOException, 
AsterixException {
+        return new 
ExtensionProperties(PropertiesAccessor.getInstance(ncServiceCtx.getAppConfig())).getExtensions();
     }

     protected IPropertiesFactory getPropertiesFactory() throws IOException, 
AsterixException {
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IApplicationContext.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IApplicationContext.java
index a9b306f..0340898 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IApplicationContext.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IApplicationContext.java
@@ -83,4 +83,11 @@
      * @return the configuration validator
      */
     IConfigValidator getConfigValidator();
+
+    /**
+     * Returns the extension manager
+     *
+     * @return the extension manager instance
+     */
+    Object getExtensionManager();
 }
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java
index e4b70f6..3389962 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java
@@ -87,13 +87,6 @@
     IStorageComponentProvider getStorageComponentProvider();

     /**
-     * Returns the extension manager
-     *
-     * @return the extension manager instance
-     */
-    Object getExtensionManager();
-
-    /**
      * @return the metadata lock manager
      */
     IMetadataLockManager getMetadataLockManager();
@@ -107,13 +100,6 @@
      * @return the cluster state manager
      */
     IClusterStateManager getClusterStateManager();
-
-    /**
-     * Set the extension manager
-     *
-     * @param extensionManager
-     */
-    void setExtensionManager(Object extensionManager);

     /**
      * @return the extension properties
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java
index c72bf54..a0b10c6 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java
@@ -104,11 +104,13 @@
             IGlobalRecoveryManager globalRecoveryManager, 
INcLifecycleCoordinator ftStrategy,
             IJobLifecycleListener activeLifeCycleListener, 
IStorageComponentProvider storageComponentProvider,
             IMetadataLockManager mdLockManager, IReceptionistFactory 
receptionistFactory,
-            IConfigValidatorFactory configValidatorFactory) throws 
AlgebricksException, IOException {
+            IConfigValidatorFactory configValidatorFactory, Object 
extensionManager)
+            throws AlgebricksException, IOException {
         this.ccServiceCtx = ccServiceCtx;
         this.hcc = hcc;
         this.libraryManager = libraryManager;
         this.activeLifeCycleListener = activeLifeCycleListener;
+        this.extensionManager = extensionManager;
         // Determine whether to use old-style asterix-configuration.xml or 
new-style configuration.
         // QQQ strip this out eventually
         PropertiesAccessor propertiesAccessor = 
PropertiesAccessor.getInstance(ccServiceCtx.getAppConfig());
@@ -218,11 +220,6 @@
     @Override
     public Object getExtensionManager() {
         return extensionManager;
-    }
-
-    @Override
-    public void setExtensionManager(Object extensionManager) {
-        this.extensionManager = extensionManager;
     }

     @Override

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

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb4dc6d8dbc00c8a701fddb1a3205d1070078cb4
Gerrit-Change-Number: 3378
Gerrit-PatchSet: 1
Gerrit-Owner: Dmitry Lychagin <[email protected]>

Reply via email to