From 16555e42ca5a0058133f2769a617a1e6ef200c27 Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Tue, 9 May 2023 16:16:39 -0400 Subject: [PATCH] Adds ExtensionsManager.lookupExtensionSettingsById (#7466) * Add ExtensionsManager.lookupExtensionSettings Signed-off-by: Craig Perkins * Small change to name Signed-off-by: Craig Perkins * Add to CHANGELOG Signed-off-by: Craig Perkins * Move extensionSettingsMap.put Signed-off-by: Craig Perkins * Re-run CI Signed-off-by: Craig Perkins --------- Signed-off-by: Craig Perkins --- CHANGELOG.md | 3 ++- .../opensearch/extensions/ExtensionsManager.java | 15 +++++++++++++++ .../extensions/ExtensionsManagerTests.java | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f533bdd0c6be..5b46551344ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Allow mmap to use new JDK-19 preview APIs in Apache Lucene 9.4+ ([#5151](https://github.com/opensearch-project/OpenSearch/pull/5151)) - Add events correlation engine plugin ([#6854](https://github.com/opensearch-project/OpenSearch/issues/6854)) - Add connectToNodeAsExtension in TransportService ([#6866](https://github.com/opensearch-project/OpenSearch/pull/6866)) +- Adds ExtensionsManager.lookupExtensionSettingsById ([#7466](https://github.com/opensearch-project/OpenSearch/pull/7466)) ### Dependencies - Bump `log4j-core` from 2.18.0 to 2.19.0 @@ -117,4 +118,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Security [Unreleased 3.0]: https://github.com/opensearch-project/OpenSearch/compare/2.x...HEAD -[Unreleased 2.x]: https://github.com/opensearch-project/OpenSearch/compare/2.7...2.x \ No newline at end of file +[Unreleased 2.x]: https://github.com/opensearch-project/OpenSearch/compare/2.7...2.x diff --git a/server/src/main/java/org/opensearch/extensions/ExtensionsManager.java b/server/src/main/java/org/opensearch/extensions/ExtensionsManager.java index 94ad9ff84cfdb..f83e371f58943 100644 --- a/server/src/main/java/org/opensearch/extensions/ExtensionsManager.java +++ b/server/src/main/java/org/opensearch/extensions/ExtensionsManager.java @@ -108,6 +108,8 @@ public static enum OpenSearchRequestType { private final Path extensionsPath; private ExtensionTransportActionsHandler extensionTransportActionsHandler; + + private Map extensionSettingsMap; private Map initializedExtensions; private Map extensionIdMap; private RestActionsRequestHandler restActionsRequestHandler; @@ -129,6 +131,7 @@ public ExtensionsManager(Path extensionsPath) throws IOException { this.extensionsPath = extensionsPath; this.initializedExtensions = new HashMap(); this.extensionIdMap = new HashMap(); + this.extensionSettingsMap = new HashMap(); // will be initialized in initializeServicesAndRestHandler which is called after the Node is initialized this.transportService = null; this.clusterService = null; @@ -192,6 +195,16 @@ public Optional lookupInitializedExtensionById(final Str return Optional.ofNullable(this.initializedExtensions.get(extensionId)); } + /** + * Lookup the settings for an extension based on unique id for the settings placed in extensions.yml + * + * @param extensionId The unique extension identifier + * @return An optional of the Extension instance for the matching extension + */ + public Optional lookupExtensionSettingsById(final String extensionId) { + return Optional.ofNullable(this.extensionSettingsMap.get(extensionId)); + } + /** * Handles Transport Request from {@link org.opensearch.extensions.action.ExtensionTransportAction} which was invoked by an extension via {@link ExtensionTransportActionsHandler}. * @@ -336,7 +349,9 @@ private void loadExtension(Extension extension) throws IOException { Version.fromString(extension.getMinimumCompatibleVersion()), extension.getDependencies() ); + extensionIdMap.put(extension.getUniqueId(), discoveryExtensionNode); + extensionSettingsMap.put(extension.getUniqueId(), extension); logger.info("Loaded extension with uniqueId " + extension.getUniqueId() + ": " + extension); } catch (OpenSearchException e) { logger.error("Could not load extension with uniqueId " + extension.getUniqueId() + " due to " + e); diff --git a/server/src/test/java/org/opensearch/extensions/ExtensionsManagerTests.java b/server/src/test/java/org/opensearch/extensions/ExtensionsManagerTests.java index 0a9fd2e6b94fe..65fb0322ffa2f 100644 --- a/server/src/test/java/org/opensearch/extensions/ExtensionsManagerTests.java +++ b/server/src/test/java/org/opensearch/extensions/ExtensionsManagerTests.java @@ -243,6 +243,7 @@ public void testDiscover() throws Exception { assertEquals(extension.getVersion(), initializedExtension.getVersion()); assertEquals(extension.getMinimumCompatibleVersion(), initializedExtension.getMinimumCompatibleVersion()); assertEquals(extension.getDependencies(), initializedExtension.getDependencies()); + assertTrue(extensionsManager.lookupExtensionSettingsById(extension.getId()).isPresent()); } }