From 22170a0b99799ac5f33b05642a85c0deea9d4a5e Mon Sep 17 00:00:00 2001 From: Ekaterina_Kazachkova Date: Mon, 27 May 2024 16:53:50 +0400 Subject: [PATCH] Issue #3534: Tag compute resources according to the tool's metadata - cleanup --- .../CommonCustomInstanceTagsTypes.java | 11 +++++++++- .../cluster/autoscale/AutoscaleManager.java | 2 +- .../cluster/autoscale/ReassignHandler.java | 2 +- .../manager/metadata/MetadataManager.java | 20 ++++++++++++------- .../manager/pipeline/PipelineRunManager.java | 8 ++++---- .../manager/preference/SystemPreferences.java | 2 +- 6 files changed, 30 insertions(+), 15 deletions(-) rename {core/src/main/java/com/epam/pipeline/entity/pipeline => api/src/main/java/com/epam/pipeline/entity/metadata}/CommonCustomInstanceTagsTypes.java (66%) diff --git a/core/src/main/java/com/epam/pipeline/entity/pipeline/CommonCustomInstanceTagsTypes.java b/api/src/main/java/com/epam/pipeline/entity/metadata/CommonCustomInstanceTagsTypes.java similarity index 66% rename from core/src/main/java/com/epam/pipeline/entity/pipeline/CommonCustomInstanceTagsTypes.java rename to api/src/main/java/com/epam/pipeline/entity/metadata/CommonCustomInstanceTagsTypes.java index f9244f1f3e..55004db3b5 100644 --- a/core/src/main/java/com/epam/pipeline/entity/pipeline/CommonCustomInstanceTagsTypes.java +++ b/api/src/main/java/com/epam/pipeline/entity/metadata/CommonCustomInstanceTagsTypes.java @@ -14,8 +14,17 @@ * limitations under the License. */ -package com.epam.pipeline.entity.pipeline; +package com.epam.pipeline.entity.metadata; +/** + * Provides tag types for common instance tags that can be applied via + * {@link com.epam.pipeline.manager.preference.SystemPreferences#CLUSTER_INSTANCE_TAGS} + * + * Supported values: + * - tool - Docker image of a tool used for a run + * - run_id - Integer ID of a run + * - owner - Username of a run owner + */ public enum CommonCustomInstanceTagsTypes { tool, run_id, owner } diff --git a/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/AutoscaleManager.java b/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/AutoscaleManager.java index 1874af5790..d3ecec7676 100644 --- a/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/AutoscaleManager.java +++ b/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/AutoscaleManager.java @@ -612,7 +612,7 @@ public InstanceRequest getNewRunInstance(final PipelineRun run) throws GitClient instanceRequest.setInstance(instance); instanceRequest.setRequestedImage(run.getActualDockerImage()); instanceRequest.setRuntimeParameters(buildRuntimeParameters(run)); - instanceRequest.setCustomTags(metadataManager.buildCustomInstanceTags(run)); + instanceRequest.setCustomTags(metadataManager.prepareCustomInstanceTags(run)); return instanceRequest; } diff --git a/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/ReassignHandler.java b/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/ReassignHandler.java index 6ecb788b21..57de4da2c4 100644 --- a/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/ReassignHandler.java +++ b/api/src/main/java/com/epam/pipeline/manager/cluster/autoscale/ReassignHandler.java @@ -240,6 +240,6 @@ private Map findCustomInstanceTags(final Long runId, final Optio if (!run.isPresent()) { return new HashMap<>(); } - return metadataManager.buildCustomInstanceTags(run.get()); + return metadataManager.prepareCustomInstanceTags(run.get()); } } diff --git a/api/src/main/java/com/epam/pipeline/manager/metadata/MetadataManager.java b/api/src/main/java/com/epam/pipeline/manager/metadata/MetadataManager.java index 9eb7a12b57..158a9d195b 100644 --- a/api/src/main/java/com/epam/pipeline/manager/metadata/MetadataManager.java +++ b/api/src/main/java/com/epam/pipeline/manager/metadata/MetadataManager.java @@ -26,7 +26,7 @@ import com.epam.pipeline.entity.metadata.MetadataEntry; import com.epam.pipeline.entity.metadata.MetadataEntryWithIssuesCount; import com.epam.pipeline.entity.metadata.PipeConfValue; -import com.epam.pipeline.entity.pipeline.CommonCustomInstanceTagsTypes; +import com.epam.pipeline.entity.metadata.CommonCustomInstanceTagsTypes; import com.epam.pipeline.entity.pipeline.Folder; import com.epam.pipeline.entity.pipeline.PipelineRun; import com.epam.pipeline.entity.pipeline.Tool; @@ -354,11 +354,17 @@ public Set getMetadataKeys(final AclClass entityClass) { return keys; } - public Map buildCustomInstanceTags(final PipelineRun run) { - final Map customTags = resolveCommonCustomInstanceTags(run); - final Tool tool = toolManager.loadByNameOrId(run.getDockerImage()); - final MetadataEntry toolMetadata = loadMetadataItem(tool.getId(), AclClass.TOOL); - return resolveInstanceTagsFromMetadata(toolMetadata, customTags); + @SuppressWarnings("PMD.AvoidCatchingGenericException") + public Map prepareCustomInstanceTags(final PipelineRun run) { + try { + final Map customTags = resolveCommonCustomInstanceTags(run); + final Tool tool = toolManager.loadByNameOrId(run.getDockerImage()); + final MetadataEntry toolMetadata = loadMetadataItem(tool.getId(), AclClass.TOOL); + return resolveInstanceTagsFromMetadata(toolMetadata, customTags); + } catch (Exception e) { + LOGGER.error("An error occurred during custom tags preparation for run '{}'.", run.getId(), e); + return new HashMap<>(); + } } Map convertFileContentToMetadata(MultipartFile file) { @@ -467,7 +473,7 @@ private void fillCommonCustomInstanceTags(final CommonCustomInstanceTagsTypes ta break; default: throw new IllegalArgumentException( - String.format("Failed to resolve custom instance type '%s'", tagType)); + String.format("Failed to resolve custom instance tag type '%s'", tagType)); } } } diff --git a/api/src/main/java/com/epam/pipeline/manager/pipeline/PipelineRunManager.java b/api/src/main/java/com/epam/pipeline/manager/pipeline/PipelineRunManager.java index 7ca5401cec..3976f0f353 100644 --- a/api/src/main/java/com/epam/pipeline/manager/pipeline/PipelineRunManager.java +++ b/api/src/main/java/com/epam/pipeline/manager/pipeline/PipelineRunManager.java @@ -673,7 +673,7 @@ public PipelineRun updatePipelineStatusIfNotFinal(Long runId, TaskStatus status) return pipelineRun; } if (status.isFinal()) { - removeInstanceTags(pipelineRun); + tryRemoveInstanceTags(pipelineRun); } if (pipelineRun.getExecutionPreferences().getEnvironment() == ExecutionEnvironment.DTS && status == TaskStatus.STOPPED) { @@ -1195,7 +1195,7 @@ public PipelineRun attachDisk(final Long runId, final DiskAttachRequest request) messageHelper.getMessage(MessageConstants.ERROR_RUN_DISK_SIZE_NOT_FOUND)); Assert.isTrue(request.getSize() > 0, messageHelper.getMessage(MessageConstants.ERROR_INSTANCE_DISK_IS_INVALID, request.getSize())); - final Map resourceTags = metadataManager.buildCustomInstanceTags(pipelineRun); + final Map resourceTags = metadataManager.prepareCustomInstanceTags(pipelineRun); nodesManager.attachDisk(pipelineRun, request, resourceTags); return pipelineRun; } @@ -1812,9 +1812,9 @@ private ContextualPreferenceExternalResource getRegionContextualPreference(final } @SuppressWarnings("PMD.AvoidCatchingGenericException") - private void removeInstanceTags(final PipelineRun run) { + private void tryRemoveInstanceTags(final PipelineRun run) { try { - final Map tags = metadataManager.buildCustomInstanceTags(run); + final Map tags = metadataManager.prepareCustomInstanceTags(run); if (MapUtils.isNotEmpty(tags)) { final RunInstance instance = run.getInstance(); cloudFacade.deleteInstanceTags(instance.getCloudRegionId(), run.getId().toString(), tags.keySet()); diff --git a/api/src/main/java/com/epam/pipeline/manager/preference/SystemPreferences.java b/api/src/main/java/com/epam/pipeline/manager/preference/SystemPreferences.java index c21ca795bb..e6f0fb803f 100644 --- a/api/src/main/java/com/epam/pipeline/manager/preference/SystemPreferences.java +++ b/api/src/main/java/com/epam/pipeline/manager/preference/SystemPreferences.java @@ -39,7 +39,7 @@ import com.epam.pipeline.entity.monitoring.IdleRunAction; import com.epam.pipeline.entity.monitoring.LongPausedRunAction; import com.epam.pipeline.entity.notification.filter.NotificationFilter; -import com.epam.pipeline.entity.pipeline.CommonCustomInstanceTagsTypes; +import com.epam.pipeline.entity.metadata.CommonCustomInstanceTagsTypes; import com.epam.pipeline.entity.pipeline.run.RunVisibilityPolicy; import com.epam.pipeline.entity.pipeline.run.parameter.RuntimeParameter; import com.epam.pipeline.entity.preference.Preference;