abdullah alamoudi has submitted this change and it was merged. 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 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1096 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Till Westmann <[email protected]> --- 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 M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixExtension.java 4 files changed, 54 insertions(+), 18 deletions(-) Approvals: Till Westmann: Looks good to me, approved Jenkins: Verified; No violations found; Verified 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..c73ab0f 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 @@ -181,8 +188,8 @@ metadataMergePolicyFactory = new PrefixMergePolicyFactory(); ILocalResourceRepositoryFactory persistentLocalResourceRepositoryFactory = - new PersistentLocalResourceRepositoryFactory(ioManager, ncApplicationContext.getNodeId(), - metadataProperties); + new PersistentLocalResourceRepositoryFactory( + ioManager, ncApplicationContext.getNodeId(), metadataProperties); localResourceRepository = (PersistentLocalResourceRepository) persistentLocalResourceRepositoryFactory .createRepository(); 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..582ff62 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 @@ -19,6 +19,7 @@ package org.apache.asterix.hyracks.bootstrap; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,6 +30,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; @@ -58,13 +60,17 @@ public class NCApplicationEntryPoint implements INCApplicationEntryPoint { private static final Logger LOGGER = Logger.getLogger(NCApplicationEntryPoint.class.getName()); - @Option(name = "-metadata-port", usage = "IP port to bind metadata listener (default: random port)", required = false) + @Option(name = "-metadata-port", usage = "IP port to bind metadata listener (default: random port)", + required = false) public int metadataRmiPort = 0; - @Option(name = "-initial-run", usage = "A flag indicating if it's the first time the NC is started (default: false)", required = false) + @Option(name = "-initial-run", + usage = "A flag indicating if it's the first time the NC is started (default: false)", required = false) public boolean initialRun = false; - @Option(name = "-virtual-NC", usage = "A flag indicating if this NC is running on virtual cluster (default: false)", required = false) + @Option(name = "-virtual-NC", + usage = "A flag indicating if this NC is running on virtual cluster " + "(default: false)", + required = false) public boolean virtualNC = false; private INCApplicationContext ncApplicationContext = null; @@ -96,11 +102,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())) { @@ -152,6 +157,10 @@ if (replicationEnabled && !pendingFailbackCompletion) { startReplicationService(); } + } + + protected List<AsterixExtension> getExtensions() { + return Collections.emptyList(); } private void startReplicationService() throws InterruptedException { @@ -206,8 +215,9 @@ LOGGER.info("Root Metadata Store: " + metadataProperties.getStores().get(nodeId)[0]); } - PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) runtimeContext - .getLocalResourceRepository(); + PersistentLocalResourceRepository localResourceRepository = + (PersistentLocalResourceRepository) runtimeContext + .getLocalResourceRepository(); localResourceRepository.initializeNewUniverse(AsterixClusterProperties.INSTANCE.getStorageDirectoryName()); } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixExtension.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixExtension.java index 7417bc6..d1d6e0c 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixExtension.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixExtension.java @@ -20,6 +20,7 @@ import java.util.List; +import org.apache.commons.lang3.ObjectUtils; import org.apache.hyracks.algebricks.common.utils.Pair; public class AsterixExtension { @@ -38,4 +39,18 @@ public String getClassName() { return className; } + + @Override + public boolean equals(Object o) { + if (o instanceof AsterixExtension) { + AsterixExtension other = (AsterixExtension) o; + return ObjectUtils.equals(className, other.className) && ObjectUtils.equals(args, other.args); + } + return false; + } + + @Override + public int hashCode() { + return ObjectUtils.hashCodeMulti(className); + } } \ No newline at end of file -- To view, visit https://asterix-gerrit.ics.uci.edu/1096 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I363df794c48644ca806958f583a05aea10a93166 Gerrit-PatchSet: 4 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: abdullah alamoudi <[email protected]>
