From a15fbd9bcc80b3d96186185ae074bc0a2804a448 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 8 Oct 2025 15:42:43 +0530 Subject: [PATCH] refactor: remove use of term entry-point from extensions code base (#11488) Addresses #11483 Signed-off-by: Abhishek Kumar --- .../extensions/api/DeleteExtensionCmd.java | 3 +- .../manager/ExtensionsManagerImpl.java | 32 +++++++++---------- .../ExternalPathPayloadProvisioner.java | 6 ++-- ui/src/views/extension/CreateExtension.vue | 12 +++---- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmd.java b/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmd.java index cdae48fdb3a..bef68c2d277 100644 --- a/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmd.java +++ b/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmd.java @@ -56,7 +56,8 @@ public class DeleteExtensionCmd extends BaseCmd { private Long id; @Parameter(name = ApiConstants.CLEANUP, type = CommandType.BOOLEAN, - entityType = ExtensionResponse.class, description = "Whether cleanup entry-point files for the extension") + entityType = ExtensionResponse.class, + description = "Whether to cleanup files for the extension. If true, the extension files will be deleted from all the management servers.") private Boolean cleanup; ///////////////////////////////////////////////////// diff --git a/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java b/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java index 9af5cb69739..f66c195399d 100644 --- a/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java +++ b/framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java @@ -152,7 +152,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana ConfigKey PathStateCheckInterval = new ConfigKey<>("Advanced", Integer.class, "extension.path.state.check.interval", "300", - "Interval (in seconds) for checking entry-point state of extensions", + "Interval (in seconds) for checking state of extensions path", false, ConfigKey.Scope.Global); @Inject @@ -264,11 +264,11 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana protected boolean prepareExtensionPathOnMSPeer(Extension extension, ManagementServerHostVO msHost) { final String msPeer = Long.toString(msHost.getMsid()); - logger.debug("Sending prepare extension entry-point for {} command to MS: {}", extension, msPeer); + logger.debug("Sending prepare extension path for {} command to MS: {}", extension, msPeer); final Command[] commands = new Command[1]; commands[0] = new PrepareExtensionPathCommand(ManagementServerNode.getManagementServerId(), extension); String answersStr = clusterManager.execute(msPeer, 0L, GsonHelper.getGson().toJson(commands), true); - return getResultFromAnswersString(answersStr, extension, msHost, "prepare entry-point").first(); + return getResultFromAnswersString(answersStr, extension, msHost, "prepare path").first(); } protected Pair prepareExtensionPathOnCurrentServer(String name, boolean userDefined, @@ -276,7 +276,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana try { externalProvisioner.prepareExtensionPath(name, userDefined, relativePath); } catch (CloudRuntimeException e) { - logger.error("Failed to prepare entry-point for Extension [name: {}, userDefined: {}, relativePath: {}] on this server", + logger.error("Failed to prepare path for Extension [name: {}, userDefined: {}, relativePath: {}] on this server", name, userDefined, relativePath, e); return new Pair<>(false, e.getMessage()); } @@ -285,11 +285,11 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana protected boolean cleanupExtensionFilesOnMSPeer(Extension extension, ManagementServerHostVO msHost) { final String msPeer = Long.toString(msHost.getMsid()); - logger.debug("Sending cleanup extension entry-point for {} command to MS: {}", extension, msPeer); + logger.debug("Sending cleanup extension files for {} command to MS: {}", extension, msPeer); final Command[] commands = new Command[1]; commands[0] = new CleanupExtensionFilesCommand(ManagementServerNode.getManagementServerId(), extension); String answersStr = clusterManager.execute(msPeer, 0L, GsonHelper.getGson().toJson(commands), true); - return getResultFromAnswersString(answersStr, extension, msHost, "cleanup entry-point").first(); + return getResultFromAnswersString(answersStr, extension, msHost, "cleanup files").first(); } protected Pair cleanupExtensionFilesOnCurrentServer(String name, String relativePath) { @@ -297,7 +297,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana externalProvisioner.cleanupExtensionPath(name, relativePath); externalProvisioner.cleanupExtensionData(name, 0, true); } catch (CloudRuntimeException e) { - logger.error("Failed to cleanup entry-point files for Extension [name: {}, relativePath: {}] on this server", + logger.error("Failed to cleanup files for Extension [name: {}, relativePath: {}] on this server", name, relativePath, e); return new Pair<>(false, e.getMessage()); } @@ -305,18 +305,18 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana } protected void cleanupExtensionFilesAcrossServers(Extension extension) { - boolean cleanup = true; + boolean cleanedUp = true; List msHosts = managementServerHostDao.listBy(ManagementServerHost.State.Up); for (ManagementServerHostVO msHost : msHosts) { if (msHost.getMsid() == ManagementServerNode.getManagementServerId()) { - cleanup = cleanup && cleanupExtensionFilesOnCurrentServer(extension.getName(), + cleanedUp = cleanedUp && cleanupExtensionFilesOnCurrentServer(extension.getName(), extension.getRelativePath()).first(); continue; } - cleanup = cleanup && cleanupExtensionFilesOnMSPeer(extension, msHost); + cleanedUp = cleanedUp && cleanupExtensionFilesOnMSPeer(extension, msHost); } - if (!cleanup) { - throw new CloudRuntimeException("Extension is deleted but its entry-point files are not cleaned up across servers"); + if (!cleanedUp) { + throw new CloudRuntimeException("Extension is deleted but its files are not cleaned up across servers"); } } @@ -327,7 +327,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana cmds[0] = new GetExtensionPathChecksumCommand(ManagementServerNode.getManagementServerId(), extension); String answersStr = clusterManager.execute(msPeer, 0L, GsonHelper.getGson().toJson(cmds), true); - return getResultFromAnswersString(answersStr, extension, msHost, "prepare entry-point"); + return getResultFromAnswersString(answersStr, extension, msHost, "get path checksum"); } protected List getParametersListFromMap(String actionName, Map parametersMap) { @@ -549,7 +549,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana final Pair msPeerChecksumResult = getChecksumForExtensionPathOnMSPeer(extension, msHost); if (!msPeerChecksumResult.first() || !checksum.equals(msPeerChecksumResult.second())) { - logger.error("Entry-point checksum for {} is different [msid: {}, checksum: {}] and [msid: {}, checksum: {}]", + logger.error("Path checksum for {} is different [msid: {}, checksum: {}] and [msid: {}, checksum: {}]", extension, ManagementServerNode.getManagementServerId(), checksum, msHost.getMsid(), (msPeerChecksumResult.first() ? msPeerChecksumResult.second() : "unknown")); updateExtensionPathReady(extension, false); @@ -630,7 +630,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana !prepareExtensionPathAcrossServers(extensionVO)) { disableExtension(extensionVO.getId()); throw new CloudRuntimeException(String.format( - "Failed to enable extension: %s as it entry-point is not ready", + "Failed to enable extension: %s as its path is not ready", extensionVO.getName())); } return extensionVO; @@ -736,7 +736,7 @@ public class ExtensionsManagerImpl extends ManagerBase implements ExtensionsMana !prepareExtensionPathAcrossServers(result)) { disableExtension(result.getId()); throw new CloudRuntimeException(String.format( - "Failed to enable extension: %s as it entry-point is not ready", + "Failed to enable extension: %s as it path is not ready", extensionVO.getName())); } updateAllExtensionHosts(extensionVO, null, false); diff --git a/plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java b/plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java index 046d0e2aa42..92205b13c6f 100644 --- a/plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java +++ b/plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java @@ -631,18 +631,18 @@ public class ExternalPathPayloadProvisioner extends ManagerBase implements Exter } if (!Files.isDirectory(filePath) && !Files.isRegularFile(filePath)) { throw new CloudRuntimeException( - String.format("Failed to cleanup extension entry-point: %s for extension: %s as it either " + + String.format("Failed to cleanup path: %s for extension: %s as it either " + "does not exist or is not a regular file/directory", extensionName, extensionRelativePath)); } if (!FileUtil.deleteRecursively(filePath)) { throw new CloudRuntimeException( - String.format("Failed to delete extension entry-point: %s for extension: %s", + String.format("Failed to delete path: %s for extension: %s", extensionName, filePath)); } } catch (IOException e) { throw new CloudRuntimeException( - String.format("Failed to cleanup extension entry-point: %s for extension: %s due to: %s", + String.format("Failed to cleanup path: %s for extension: %s due to: %s", extensionName, normalizedPath, e.getMessage()), e); } } diff --git a/ui/src/views/extension/CreateExtension.vue b/ui/src/views/extension/CreateExtension.vue index 0dfde238279..9a7e0c8ae76 100644 --- a/ui/src/views/extension/CreateExtension.vue +++ b/ui/src/views/extension/CreateExtension.vue @@ -46,15 +46,15 @@ -
- +
+ {{ extenstionBasePath }}
@@ -236,20 +236,20 @@ export default { } } -.entry-point-input-container { +.path-input-container { display: flex; align-items: center; gap: 8px; } -.entry-point-input-base-path { +.path-input-base { max-width: 70%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -.entry-point-input-relative-path { +.path-input-relative { flex: 1 1 0%; min-width: 0; }