abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/1096
Change subject: Enable Extensions Through EntryPoints ...................................................................... Enable Extensions Through EntryPoints This change enable an instance with its implementations of entry points to add extensions programmatically. Change-Id: I363df794c48644ca806958f583a05aea10a93166 --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/AsterixNCAppRuntimeContext.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java 3 files changed, 30 insertions(+), 16 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/96/1096/1 diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/AsterixNCAppRuntimeContext.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/AsterixNCAppRuntimeContext.java index 3ebe873..c76af73 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/AsterixNCAppRuntimeContext.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/AsterixNCAppRuntimeContext.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -33,6 +35,7 @@ import org.apache.asterix.common.cluster.ClusterPartition; import org.apache.asterix.common.config.AsterixBuildProperties; import org.apache.asterix.common.config.AsterixCompilerProperties; +import org.apache.asterix.common.config.AsterixExtension; import org.apache.asterix.common.config.AsterixExtensionProperties; import org.apache.asterix.common.config.AsterixExternalProperties; import org.apache.asterix.common.config.AsterixFeedProperties; @@ -134,9 +137,10 @@ private final ILibraryManager libraryManager; private final NCExtensionManager ncExtensionManager; - public AsterixNCAppRuntimeContext(INCApplicationContext ncApplicationContext, int metadataRmiPort) - throws AsterixException, InstantiationException, IllegalAccessException, ClassNotFoundException, - IOException { + public AsterixNCAppRuntimeContext(INCApplicationContext ncApplicationContext, int metadataRmiPort, + List<AsterixExtension> extensions) throws AsterixException, InstantiationException, IllegalAccessException, + ClassNotFoundException, IOException { + List<AsterixExtension> allExtensions = new ArrayList<>(); this.ncApplicationContext = ncApplicationContext; // Determine whether to use old-style asterix-configuration.xml or new-style configuration. // QQQ strip this out eventually @@ -159,8 +163,11 @@ AsterixClusterProperties.INSTANCE.getCluster()); this.metadataRmiPort = metadataRmiPort; libraryManager = new ExternalLibraryManager(); - ncExtensionManager = new NCExtensionManager( - new AsterixExtensionProperties(propertiesAccessor).getExtensions()); + if (extensions != null) { + allExtensions.addAll(extensions); + } + allExtensions.addAll(new AsterixExtensionProperties(propertiesAccessor).getExtensions()); + ncExtensionManager = new NCExtensionManager(allExtensions); } @Override @@ -180,15 +187,14 @@ metadataMergePolicyFactory = new PrefixMergePolicyFactory(); - ILocalResourceRepositoryFactory persistentLocalResourceRepositoryFactory = - new PersistentLocalResourceRepositoryFactory(ioManager, ncApplicationContext.getNodeId(), - metadataProperties); + ILocalResourceRepositoryFactory persistentLocalResourceRepositoryFactory = new PersistentLocalResourceRepositoryFactory( + ioManager, ncApplicationContext.getNodeId(), metadataProperties); localResourceRepository = (PersistentLocalResourceRepository) persistentLocalResourceRepositoryFactory .createRepository(); - IAsterixAppRuntimeContextProvider asterixAppRuntimeContextProvider = - new AsterixAppRuntimeContextProviderForRecovery(this); + IAsterixAppRuntimeContextProvider asterixAppRuntimeContextProvider = new AsterixAppRuntimeContextProviderForRecovery( + this); txnSubsystem = new TransactionSubsystem(ncApplicationContext.getNodeId(), asterixAppRuntimeContextProvider, txnProperties); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java index cf57174..1e40d837 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java @@ -47,6 +47,7 @@ import org.apache.asterix.app.external.ExternalLibraryUtils; import org.apache.asterix.common.api.AsterixThreadFactory; import org.apache.asterix.common.api.IClusterManagementWork.ClusterState; +import org.apache.asterix.common.config.AsterixExtension; import org.apache.asterix.common.config.AsterixExternalProperties; import org.apache.asterix.common.config.AsterixMetadataProperties; import org.apache.asterix.common.library.ILibraryManager; @@ -96,8 +97,7 @@ ExternalLibraryUtils.setUpExternaLibraries(libraryManager, false); AsterixAppContextInfo.initialize(appCtx, getNewHyracksClientConnection(), GlobalRecoveryManager.instance(), libraryManager); - ccExtensionManager = new CompilerExtensionManager( - AsterixAppContextInfo.getInstance().getExtensionProperties().getExtensions()); + ccExtensionManager = new CompilerExtensionManager(getExtensions()); AsterixAppContextInfo.getInstance().setExtensionManager(ccExtensionManager); if (System.getProperty("java.rmi.server.hostname") == null) { @@ -126,6 +126,10 @@ ccAppCtx.setMessageBroker(messageBroker); } + protected List<AsterixExtension> getExtensions() { + return AsterixAppContextInfo.getInstance().getExtensionProperties().getExtensions(); + } + protected List<Server> configureServers() throws Exception { AsterixExternalProperties externalProperties = AsterixAppContextInfo.getInstance().getExternalProperties(); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java index 5abe6bc..8129d86 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java @@ -29,6 +29,7 @@ import org.apache.asterix.app.nc.AsterixNCAppRuntimeContext; import org.apache.asterix.common.api.AsterixThreadFactory; import org.apache.asterix.common.api.IAsterixAppRuntimeContext; +import org.apache.asterix.common.config.AsterixExtension; import org.apache.asterix.common.config.AsterixMetadataProperties; import org.apache.asterix.common.config.AsterixTransactionProperties; import org.apache.asterix.common.config.IAsterixPropertiesProvider; @@ -96,11 +97,10 @@ } if (System.getProperty("java.rmi.server.hostname") == null) { - System.setProperty("java.rmi.server.hostname", - ((NodeControllerService) ncAppCtx.getControllerService()) - .getConfiguration().clusterNetPublicIPAddress); + System.setProperty("java.rmi.server.hostname", ((NodeControllerService) ncAppCtx.getControllerService()) + .getConfiguration().clusterNetPublicIPAddress); } - runtimeContext = new AsterixNCAppRuntimeContext(ncApplicationContext, metadataRmiPort); + runtimeContext = new AsterixNCAppRuntimeContext(ncApplicationContext, metadataRmiPort, getExtensions()); AsterixMetadataProperties metadataProperties = ((IAsterixPropertiesProvider) runtimeContext) .getMetadataProperties(); if (!metadataProperties.getNodeNames().contains(ncApplicationContext.getNodeId())) { @@ -154,6 +154,10 @@ } } + protected List<AsterixExtension> getExtensions() { + return null; + } + private void startReplicationService() throws InterruptedException { //Open replication channel runtimeContext.getReplicationChannel().start(); -- To view, visit https://asterix-gerrit.ics.uci.edu/1096 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I363df794c48644ca806958f583a05aea10a93166 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>