summaryrefslogtreecommitdiffstats
path: root/asdctool/src/main/java/org/openecomp
diff options
context:
space:
mode:
Diffstat (limited to 'asdctool/src/main/java/org/openecomp')
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/cli/CLIToolData.java9
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/DistributionStatusEnum.java36
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/LifeCycleTransitionEnum.java42
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/ArtifactUuidFix.java2570
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java71
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/validator/utils/ValidationTaskResult.java64
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/main/DeleteComponentTool.java18
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/main/ValidationTool.java8
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/InstanceMigrationBase.java162
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/handlers/OutputHandler.java14
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1710/UpgradeMigration1710.java1190
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcGroupsMigration.java186
-rw-r--r--asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcResourceIconMigration.java187
13 files changed, 1340 insertions, 3217 deletions
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/cli/CLIToolData.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/cli/CLIToolData.java
index c490b6d4fb..e75f866ccc 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/cli/CLIToolData.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/cli/CLIToolData.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -32,11 +32,6 @@ public class CLIToolData {
this.commandLine = commandLine;
}
- public CLIToolData(CommandLine commandLine, AbstractApplicationContext springApplicationContext) {
- this.commandLine = commandLine;
- this.springApplicationContext = springApplicationContext;
- }
-
public CommandLine getCommandLine() {
return commandLine;
}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/DistributionStatusEnum.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/DistributionStatusEnum.java
deleted file mode 100644
index 5e601a0c37..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/DistributionStatusEnum.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum DistributionStatusEnum {
- DISTRIBUTION_NOT_APPROVED("Distribution not approved"),
- DISTRIBUTION_APPROVED("Distribution approved"),
- DISTRIBUTED("Distributed"),
- DISTRIBUTION_REJECTED("Distribution rejected");
-
- private final String value;
-
-} \ No newline at end of file
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/LifeCycleTransitionEnum.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/LifeCycleTransitionEnum.java
deleted file mode 100644
index 6f52734f2f..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/enums/LifeCycleTransitionEnum.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum LifeCycleTransitionEnum {
-
- CHECKOUT("checkout"),
- CHECKIN("checkin"),
- CERTIFICATION_REQUEST("certificationRequest"),
- UNDO_CHECKOUT("undoCheckout"),
- CANCEL_CERTIFICATION("cancelCertification"),
- START_CERTIFICATION("startCertification"),
- FAIL_CERTIFICATION("failCertification"),
- CERTIFY("certify"),
- DISTRIBUTE("distribute");
-
- private final String displayName;
-
-} \ No newline at end of file
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/ArtifactUuidFix.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/ArtifactUuidFix.java
index 579bf35324..2a77b25aa4 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/ArtifactUuidFix.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/ArtifactUuidFix.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,10 +20,27 @@
package org.openecomp.sdc.asdctool.impl;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import fj.data.Either;
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.openecomp.sdc.asdctool.impl.validator.utils.VfModuleArtifactPayloadEx;
import org.openecomp.sdc.be.components.distribution.engine.VfModuleArtifactPayload;
import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
@@ -74,1305 +91,1288 @@ import org.openecomp.sdc.common.util.GeneralUtility;
import org.openecomp.sdc.exception.ResponseFormat;
import org.springframework.beans.factory.annotation.Autowired;
-import java.io.BufferedWriter;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
@org.springframework.stereotype.Component("artifactUuidFix")
public class ArtifactUuidFix {
- private static final String MIGRATION1707_ARTIFACT_UUID_FIX = "Migration1707ArtifactUuidFix fix group: group name {} correct artifactId {} artifactUUID {} ";
-
- private static final String FAILED_TO_FETCH_VF_RESOURCES = "Failed to fetch vf resources ";
-
- private static final String UTF8 = "utf-8";
-
- private JanusGraphDao janusGraphDao;
- private ToscaOperationFacade toscaOperationFacade;
- private ToscaExportHandler toscaExportUtils;
- private ArtifactCassandraDao artifactCassandraDao;
- private CsarUtils csarUtils;
-
- private static Logger log = Logger.getLogger(ArtifactUuidFix.class.getName());
-
- @Autowired
- public ArtifactUuidFix(JanusGraphDao janusGraphDao,
- ToscaOperationFacade toscaOperationFacade, ToscaExportHandler toscaExportUtils,
- ArtifactCassandraDao artifactCassandraDao, CsarUtils csarUtils) {
- this.janusGraphDao = janusGraphDao;
- this.toscaOperationFacade = toscaOperationFacade;
- this.toscaExportUtils = toscaExportUtils;
- this.artifactCassandraDao = artifactCassandraDao;
- this.csarUtils = csarUtils;
- }
-
- public boolean doFix(String fixComponent, String runMode) {
- List<Resource> vfLst = new ArrayList<>();
- List<Service> serviceList = new ArrayList<>();
- Map<String, List<Component>> nodeToFixTosca = new HashMap<>();
- Map<String, List<Component>> vfToFixTosca = new HashMap<>();
- Map<String, List<Component>> serviceToFixTosca = new HashMap<>();
-
- long time = System.currentTimeMillis();
-
- doFixTosca(nodeToFixTosca, vfToFixTosca, serviceToFixTosca);
-
- if ("vf_only".equals(fixComponent)) {
- if (!fetchFaultVf(fixComponent, vfLst, time)) {
- return false;
- }
- } else {
- if (!fetchServices(fixComponent, serviceList, time)) {
- return false;
- }
- }
- if ("service_vf".equals(runMode) || "fix".equals(runMode)) {
- log.info("Mode {}. Find problem VFs", runMode);
- if (!fetchVf(serviceList, vfLst, time)) {
- log.info("Mode {}. Find problem VFs finished with failure", runMode);
- return false;
- }
- log.info("Mode {}. Find problem VFs finished with success", runMode);
- }
- if ("fix".equals(runMode) || "fix_only_services".equals(runMode)) {
- log.info("Mode {}. Start fix", runMode);
- if (!fix(vfLst, serviceList, nodeToFixTosca, vfToFixTosca, serviceToFixTosca)) {
- log.info("Mode {}. Fix finished with failure", runMode);
- return false;
- }
- log.info("Mode {}. Fix finished with success", runMode);
- }
-
- return true;
- }
-
- private boolean fetchFaultVf(String fixComponent, List<Resource> vfLst, long time) {
- log.info("Find fault VF ");
- String fileName = "fault_" + time + ".csv";
- try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF8))) {
- writer.write("vf name, vf id, state, version\n");
-
- Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
- hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
- hasProps.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.VF.name());
-
- Map<GraphPropertyEnum, Object> hasNotProps = new EnumMap<>(GraphPropertyEnum.class);
- hasNotProps.put(GraphPropertyEnum.IS_DELETED, true);
- log.info("Try to fetch resources with properties {} and not {}", hasProps, hasNotProps);
-
- Either<List<GraphVertex>, JanusGraphOperationStatus> servicesByCriteria = janusGraphDao
- .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps, hasNotProps, JsonParseFlagEnum.ParseAll);
- if (servicesByCriteria.isRight()) {
- log.info("Failed to fetch resources {}", servicesByCriteria.right().value());
- return false;
- }
- List<GraphVertex> resources = servicesByCriteria.left().value();
- for (GraphVertex gv : resources) {
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreComponentInstances(false);
- filter.setIgnoreArtifacts(false);
- filter.setIgnoreGroups(false);
-
- Either<Resource, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaElement(gv.getUniqueId());
- if (toscaElement.isRight()) {
- log.info("Failed to fetch resources {} {}", gv.getUniqueId(), toscaElement.right().value());
- continue;
- }
-
- Resource resource = toscaElement.left().value();
- String resourceName = resource.getName();
- Map<String, ArtifactDefinition> deploymentArtifacts = resource.getDeploymentArtifacts();
- List<GroupDefinition> groups = resource.getGroups();
- if (groups == null || groups.isEmpty()) {
- log.info("No groups for resource {} id {} ", resourceName, gv.getUniqueId());
- continue;
- }
- boolean isProblematic = false;
- for (GroupDefinition gr : groups) {
- if (gr.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
- if (isProblematicGroup(gr, resourceName, deploymentArtifacts)) {
- isProblematic = true;
- break;
- }
- }
- }
- if (isProblematic) {
- vfLst.add(resource);
- writeModuleResultToFile(writer, resource, null);
- writer.flush();
- }
- janusGraphDao.commit();
- }
-
- } catch (Exception e) {
- log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
- return false;
- } finally {
- janusGraphDao.commit();
- }
- return true;
- }
-
- private boolean fetchVf(List<Service> serviceList, List<Resource> vfLst, long time) {
- log.info("Find problem VF ");
- if (serviceList.isEmpty()) {
- log.info("No services as input");
- return true;
- }
- String fileName = "problemVf_" + time + ".csv";
- try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF8))) {
- writer.write("vf name, vf id, state, version, example service name\n");
- Set<String> vfIds = new HashSet<>();
- for (Service service : serviceList) {
- List<ComponentInstance> componentInstances = service.getComponentInstances().stream()
- .filter(ci -> ci.getOriginType().equals(OriginTypeEnum.VF)).collect(Collectors.toList());
- for (ComponentInstance ci : componentInstances) {
- if (!vfIds.contains(ci.getComponentUid())) {
- vfIds.add(ci.getComponentUid());
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreComponentInstances(false);
- filter.setIgnoreArtifacts(false);
- filter.setIgnoreGroups(false);
- Either<Resource, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaElement(ci.getComponentUid(), filter);
- if (toscaElement.isRight()) {
- log.info("Failed to fetch resource {} {}", ci.getComponentUid(),
- toscaElement.right().value());
- continue;
- }
- Resource resource = toscaElement.left().value();
- if (resource.getResourceType().equals(ResourceTypeEnum.VF)) {
- vfLst.add(resource);
- writeModuleResultToFile(writer, resource, service);
- writer.flush();
-
- }
- janusGraphDao.commit();
- }
- }
- }
- log.info("output file with list of Vf : {}", fileName);
- } catch (Exception e) {
- log.info("Failed to fetch services ", e);
- return false;
- } finally {
- janusGraphDao.commit();
- }
- return true;
- }
-
- private boolean fetchServices(String fixServices, List<Service> serviceList, long time) {
- log.info("Find problem Services {}", fixServices);
- String fileName = "problemService_" + time + ".csv";
- try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF8))) {
- writer.write("service name, service id, state, version\n");
-
- Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
- hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
- if ("distributed_only".equals(fixServices)) {
- hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
- hasProps.put(GraphPropertyEnum.DISTRIBUTION_STATUS, DistributionStatusEnum.DISTRIBUTED.name());
- }
-
- Map<GraphPropertyEnum, Object> hasNotProps = new EnumMap<>(GraphPropertyEnum.class);
- hasNotProps.put(GraphPropertyEnum.IS_DELETED, true);
- log.info("Try to fetch services with properties {} and not {}", hasProps, hasNotProps);
-
- Either<List<GraphVertex>, JanusGraphOperationStatus> servicesByCriteria = janusGraphDao
- .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps, hasNotProps, JsonParseFlagEnum.ParseAll);
- if (servicesByCriteria.isRight()) {
- log.info("Failed to fetch services {}", servicesByCriteria.right().value());
- return false;
- }
- List<GraphVertex> services = servicesByCriteria.left().value();
- for (GraphVertex gv : services) {
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreComponentInstances(false);
- filter.setIgnoreArtifacts(false);
- filter.setIgnoreGroups(false);
-
- Either<Service, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaElement(gv.getUniqueId(), filter);
- if (toscaElement.isRight()) {
- log.info("Failed to fetch service {} {}", gv.getUniqueId(), toscaElement.right().value());
- continue;
- }
- Service service = toscaElement.left().value();
-
- String serviceName = (String) gv.getMetadataProperty(GraphPropertyEnum.NAME);
-
- boolean isProblematic = isProblematicService(service, serviceName);
- if (isProblematic) {
- serviceList.add(service);
- writeModuleResultToFile(writer, service, null);
- writer.flush();
-
- }
-
- janusGraphDao.commit();
- }
- log.info("output file with list of services : {}", fileName);
- } catch (Exception e) {
- log.info("Failed to fetch services ", e);
- return false;
- } finally {
- janusGraphDao.commit();
- }
- return true;
- }
-
- private boolean isProblematicService( Service service, String serviceName) {
-
- List<ComponentInstance> componentInstances = service.getComponentInstances();
-
- if (componentInstances == null) {
- log.info("No instances for service {} ", service.getUniqueId());
- return false;
- }
- boolean isCheckVFModules = true;
- if(service.getLifecycleState() == LifecycleStateEnum.NOT_CERTIFIED_CHECKIN ||
- service.getLifecycleState() == LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT){
- isCheckVFModules = false;
- }
- for (ComponentInstance ci : componentInstances) {
- Map<String, ArtifactDefinition> deploymentArtifacts = ci.getDeploymentArtifacts();
- List<GroupInstance> groupInstances = ci.getGroupInstances();
- if (groupInstances == null || groupInstances.isEmpty()) {
- log.info("No instance groups for instance {} in service {} id {} ", ci.getName(), serviceName,
- service.getUniqueId());
- continue;
- }
- List<VfModuleArtifactPayloadEx> vfModules = null;
- if(isCheckVFModules){
- Optional<ArtifactDefinition> optionalVfModuleArtifact = deploymentArtifacts.values().stream()
- .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.VF_MODULES_METADATA.getType())).findAny();
-
- if(!optionalVfModuleArtifact.isPresent())
- return true;
-
- ArtifactDefinition vfModuleArtifact = optionalVfModuleArtifact.get();
- Either<List<VfModuleArtifactPayloadEx>, StorageOperationStatus> vfModulesEither = parseVFModuleJson(vfModuleArtifact);
- if(vfModulesEither.isRight()){
- log.error("Failed to parse vfModule for service {} status is {}", service.getUniqueId(), vfModulesEither.right().value());
- return true;
- }
- vfModules = vfModulesEither.left().value();
- if(vfModules == null || vfModules.isEmpty() ){
- log.info("vfModules empty for service {}", service.getUniqueId());
- return true;
- }
- }
-
- for (GroupInstance gi : groupInstances) {
- if (gi.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
- VfModuleArtifactPayloadEx vfModule= null;
- if(isCheckVFModules && vfModules != null){
- Optional<VfModuleArtifactPayloadEx> op = vfModules.stream().filter(vf -> vf.getVfModuleModelName().equals(gi.getGroupName())).findAny();
- if(!op.isPresent()){
- log.error("Failed to find vfModule for group {}", gi.getGroupName());
- return true;
- }
- vfModule = op.get();
- }
- if (isProblematicGroupInstance(gi, ci.getName(), serviceName, deploymentArtifacts, vfModule)) {
- return true;
- }
- }
- }
-
- }
- return false;
- }
-
- private boolean isProblematicGroup(GroupDefinition gr, String resourceName,
- Map<String, ArtifactDefinition> deploymentArtifacts) {
- List<String> artifacts = gr.getArtifacts();
- List<String> artifactsUuid = gr.getArtifactsUuid();
- Set<String> artifactsSet = new HashSet<>();
-
- if ((artifactsUuid == null || artifactsUuid.isEmpty()) && (artifacts == null || artifacts.isEmpty())) {
- log.info("No groups in resource {} ", resourceName);
- return true;
- }
- artifactsSet.addAll(artifacts);
- if (artifactsSet.size() < artifacts.size()) {
- log.info(" artifactsSet.size() < artifacts.size() group {} in resource {} ", gr.getName(), resourceName);
- return true;
- }
-
- if ((artifactsUuid != null) && (artifacts.size() < artifactsUuid.size())) {
- log.info(" artifacts.size() < artifactsUuid.size() group {} in resource {} ", gr.getName(), resourceName);
- return true;
- }
- if (!artifacts.isEmpty() && (artifactsUuid == null || artifactsUuid.isEmpty())) {
- log.info(
- " artifacts.size() > 0 && (artifactsUuid == null || artifactsUuid.isEmpty() group {} in resource {} ",
- gr.getName(), resourceName);
- return true;
- }
- if (artifactsUuid != null && artifactsUuid.contains(null)) {
- log.info(" artifactsUuid.contains(null) group {} in resource {} ", gr.getName(), resourceName);
- return true;
- }
-
- for (String artifactId : artifacts) {
- String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
- ArtifactDefinition artifactDefinition = deploymentArtifacts.get(artifactlabel);
- if (artifactDefinition == null) {
- log.info(" artifactDefinition == null label {} group {} in resource {} ", artifactlabel, gr.getName(),
- resourceName);
- return true;
- }
- ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifactDefinition.getArtifactType());
- if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
- if (!artifactId.equals(artifactDefinition.getUniqueId())) {
- log.info(
- " !artifactId.equals(artifactDefinition.getUniqueId() artifact {} artId {} group {} in resource {} ",
- artifactlabel, artifactId, gr.getName(), resourceName);
- return true;
- }
- if (artifactsUuid != null && !artifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
- log.info(
- " artifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} group {} in resource {} ",
- artifactlabel, gr.getName(), resourceName);
- return true;
- }
- }
- }
- for (String artifactUUID : artifactsUuid) {
- String label = findArtifactLabelFromArtifactId(artifactUUID);
- if (label != null && !label.isEmpty() && !label.equals("")) {
- return true;
- }
- }
-
- return false;
- }
-
- private boolean isProblematicGroupInstance(GroupInstance gi, String instName, String servicename,
- Map<String, ArtifactDefinition> deploymentArtifacts, VfModuleArtifactPayloadEx vfModule) {
- List<String> artifacts = gi.getArtifacts();
- List<String> artifactsUuid = gi.getArtifactsUuid();
- List<String> instArtifactsUuid = gi.getGroupInstanceArtifactsUuid();
- List<String> instArtifactsId = gi.getGroupInstanceArtifacts();
- Set<String> instArtifatIdSet = new HashSet<>();
- Set<String> artifactsSet = new HashSet<>();
-
- log.info("check group {} for instance {} ", gi.getGroupName(), instName);
- if ((artifactsUuid == null || artifactsUuid.isEmpty()) && (artifacts == null || artifacts.isEmpty())) {
- log.info("No instance groups for instance {} in service {} ", instName, servicename);
- return true;
- }
- artifactsSet.addAll(artifacts);
- if (artifactsSet.size() < artifacts.size()) {
- log.info(" artifactsSet.size() < artifacts.size() group {} in resource {} ", instName, servicename);
- return true;
- }
-
- if (instArtifactsId != null && !instArtifactsId.isEmpty()) {
- instArtifatIdSet.addAll(instArtifactsId);
- }
-
- if ((artifactsUuid != null) && (artifacts.size() < artifactsUuid.size())) {
- log.info(" artifacts.size() < artifactsUuid.size() inst {} in service {} ", instName, servicename);
- return true;
- }
- if (!artifacts.isEmpty() && (artifactsUuid == null || artifactsUuid.isEmpty())) {
- log.info(
- " artifacts.size() > 0 && (artifactsUuid == null || artifactsUuid.isEmpty() inst {} in service {} ",
- instName, servicename);
- return true;
- }
- if (artifactsUuid != null && artifactsUuid.contains(null)) {
- log.info(" artifactsUuid.contains(null) inst {} in service {} ", instName, servicename);
- return true;
- }
- if (instArtifactsId != null && instArtifatIdSet.size() < instArtifactsId.size()) {
- log.info(" instArtifatIdSet.size() < instArtifactsId.size() inst {} in service {} ", instName, servicename);
- return true;
- }
-
- if ((instArtifactsId != null && instArtifactsUuid != null)
- && instArtifactsId.size() != instArtifactsUuid.size()) {
- log.info(" instArtifactsId.size() != instArtifactsUuid.size() inst {} in service {} ", instName,
- servicename);
- return true;
- }
-
- for (String artifactId : artifacts) {
- String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
- ArtifactDefinition artifactDefinition = deploymentArtifacts.get(artifactlabel);
- if (artifactDefinition == null) {
- log.info(" artifactDefinition == null label {} inst {} in service {} ", artifactlabel, instName,
- servicename);
- return true;
- }
- ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifactDefinition.getArtifactType());
- if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
- if (!artifactId.equals(artifactDefinition.getUniqueId())) {
- log.info(
- " !artifactId.equals(artifactDefinition.getUniqueId() artifact {} artId {} inst {} in service {} ",
- artifactlabel, artifactId, instName, servicename);
- return true;
- }
- if (artifactsUuid != null && !artifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
- log.info(
- " artifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} inst {} in service {} ",
- artifactlabel, instName, servicename);
- return true;
- }
- } else {
- if (instArtifactsUuid == null || instArtifactsUuid.isEmpty()) {
- log.info(" instArtifactsUuid empty. label {} inst {} in service {} ", artifactlabel, instName,
- servicename);
- return true;
- }
- if (!instArtifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
- log.info(
- " instArtifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} inst {} in service {} ",
- artifactlabel, instName, servicename);
- return true;
- }
- }
- }
- for (String artifactUUID : artifactsUuid) {
- String label = findArtifactLabelFromArtifactId(artifactUUID);
- if (label != null && !label.isEmpty() && !"".equals(label)) {
- return true;
- }
- }
- if(vfModule != null && artifactsUuid != null){
- return isProblematicVFModule(vfModule, artifactsUuid, instArtifactsUuid);
- }
-
- return false;
- }
-
- private boolean isProblematicVFModule(VfModuleArtifactPayloadEx vfModule, List<String> artifactsUuid,
- List<String> instArtifactsUuid) {
- log.info(" isProblematicVFModule {} ", vfModule.getVfModuleModelName());
- List<String> vfModuleArtifacts = vfModule.getArtifacts();
- List<String> allArtifacts = new ArrayList<>();
- allArtifacts.addAll(artifactsUuid);
- if(instArtifactsUuid != null)
- allArtifacts.addAll(instArtifactsUuid);
- if((vfModuleArtifacts == null || vfModuleArtifacts.isEmpty()) && !artifactsUuid.isEmpty()){
- log.error(" vfModuleArtifacts == null || vfModuleArtifacts.isEmpty()) && !artifactsUuid.isEmpty()");
- return true;
- }
- if(vfModuleArtifacts!= null){
- if( vfModuleArtifacts.size() != allArtifacts.size()){
- log.error(" vfModuleArtifacts.size() != allArtifacts.size()");
- return true;
- }
- for(String vfModuleArtifact: vfModuleArtifacts){
- Optional<String> op = allArtifacts.stream().filter(a -> a.equals(vfModuleArtifact)).findAny();
- if(!op.isPresent()){
- log.error("failed to find artifact {} in group artifacts {}", vfModuleArtifact, allArtifacts);
- return true;
- }
- }
- }
- return false;
- }
-
-
-
- private boolean fix(List<Resource> vfLst, List<Service> serviceList, Map<String, List<Component>> nodesToFixTosca,
- Map<String, List<Component>> vfToFixTosca, Map<String, List<Component>> servicesToFixTosca) {
- boolean res = true;
- log.info(" Fix started ***** ");
- if (vfLst != null && !vfLst.isEmpty()) {
- res = fixVf(vfLst);
-
- }
-
- if (res && serviceList != null && !serviceList.isEmpty()) {
- res = fixServices(serviceList);
-
- }
-
- Set<String> fixedIds = new HashSet<>();
-
- long time = System.currentTimeMillis();
- String fileName = "FailedGenerateTosca" + "_" + time + ".csv";
-
- try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF8))) {
- writer.write("componentType, name, version, UID, UUID, invariantUUID, state\n");
- List<Component> failedList = new ArrayList<>();
-
- if (res && nodesToFixTosca != null && !nodesToFixTosca.isEmpty()) {
-
- generateAndSaveToscaArtifacts(nodesToFixTosca, fixedIds, null, failedList);
-
- }
- if (vfToFixTosca != null && !vfToFixTosca.isEmpty()) {
-
- generateAndSaveToscaArtifacts(vfToFixTosca, fixedIds, vfLst, failedList);
-
- }
-
- for (Component component : vfLst) {
- res = generateToscaPerComponent(fixedIds, component);
- if (res) {
- TopologyTemplate topologyTemplate = ModelConverter.convertToToscaElement(component);
- Map<String, GroupDataDefinition> groups = topologyTemplate.getGroups();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.GROUPS, EdgeLabelEnum.GROUPS, groups);
- if (res) {
- Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getDeploymentArtifacts();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.DEPLOYMENT_ARTIFACTS,
- EdgeLabelEnum.DEPLOYMENT_ARTIFACTS, arifacts);
- }
- if (res) {
- Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS,
- EdgeLabelEnum.TOSCA_ARTIFACTS, arifacts);
- }
- janusGraphDao.commit();
- } else {
- failedList.add(component);
- }
- }
-
- if (servicesToFixTosca != null && !servicesToFixTosca.isEmpty()) {
- generateAndSaveToscaArtifacts(servicesToFixTosca, fixedIds, serviceList, failedList);
-
- }
-
-
- for (Component component : serviceList) {
- res = generateToscaPerComponent(fixedIds, component);
- if (res) {
- TopologyTemplate topologyTemplate = ModelConverter.convertToToscaElement(component);
- Map<String, MapGroupsDataDefinition> groups = topologyTemplate.getInstGroups();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.INST_GROUPS, EdgeLabelEnum.INST_GROUPS,
- groups);
-
- if (res) {
- Map<String, MapArtifactDataDefinition> artifacts = topologyTemplate
- .getInstDeploymentArtifacts();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.INST_DEPLOYMENT_ARTIFACTS,
- EdgeLabelEnum.INST_DEPLOYMENT_ARTIFACTS, artifacts);
- }
- if (res) {
- Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
- res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS,
- EdgeLabelEnum.TOSCA_ARTIFACTS, arifacts);
- }
- janusGraphDao.commit();
- } else {
- failedList.add(component);
- }
-
- }
- if (!failedList.isEmpty()) {
- for (Component component : failedList) {
- StringBuilder sb = new StringBuilder(component.getComponentType().getValue());
- sb.append(",").append(component.getName()).append(",").append(component.getVersion()).append(",")
- .append(component.getUniqueId()).append(",").append(component.getUUID()).append(",")
- .append(component.getInvariantUUID()).append(",").append(component.getLifecycleState());
-
- sb.append("\n");
- writer.write(sb.toString());
- }
- writer.flush();
- }
- } catch (IOException e) {
- log.error(e.getMessage());
- } finally {
- janusGraphDao.commit();
- }
- log.info(" Fix finished with res {} ***** ", res);
- return res;
- }
-
- private boolean generateAndSaveToscaArtifacts(Map<String, List<Component>> nodesToFixTosca, Set<String> fixedIds,
- List<? extends Component> componentsWithFailedGroups, List<Component> failedList) {
- boolean res = true;
- log.debug("Migration1707ArtifactUuidFix generateAndSaveToscaArtifacts started ");
- for (Map.Entry<String, List<Component>> entry : nodesToFixTosca.entrySet()) {
-
- List<Component> component = entry.getValue();
- for (Component c : component) {
- log.debug("Migration1707ArtifactUuidFix fix tosca on component : id {}, name {} ", c.getUniqueId(),
- c.getName());
- if (componentsWithFailedGroups != null) {
- Optional<Component> op = (Optional<Component>) componentsWithFailedGroups.stream()
- .filter(cg -> cg.getUniqueId().equals(c.getUniqueId())).findAny();
- if (!op.isPresent())
- res = generateToscaPerComponent(fixedIds, c);
- } else
- res = generateToscaPerComponent(fixedIds, c);
- if (res) {
- ToscaElement topologyTemplate = ModelConverter.convertToToscaElement(c);
- Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
- res = fixDataOnGraph(c.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS, EdgeLabelEnum.TOSCA_ARTIFACTS,
- arifacts);
- janusGraphDao.commit();
- } else {
- failedList.add(c);
- }
-
- }
- }
- log.debug("Migration1707ArtifactUuidFix generateAndSaveToscaArtifacts finished with res {} ", res);
- return res;
- }
-
- private boolean generateToscaPerComponent(Set<String> fixedIds, Component c) {
- boolean res = true;
- log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent started component name {} id {}",
- c.getName(), c.getUniqueId());
- try {
- Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaFullElement(c.getUniqueId());
- if (toscaElement.isRight()) {
- log.info("Failed to fetch resources {} {}", c.getUniqueId(), toscaElement.right().value());
- return false;
- }
- Component toscaElementFull = toscaElement.left().value();
- toscaElementFull.setGroups(c.getGroups());
- List<ComponentInstance> ciListFull = toscaElementFull.getComponentInstances();
- List<ComponentInstance> ciList = c.getComponentInstances();
- if (ciListFull != null && !ciListFull.isEmpty()) {
- ciListFull.forEach(ciFull -> {
- ComponentInstance compInst = ciList.stream()
- .filter(ci -> ci.getUniqueId().equals(ciFull.getUniqueId())).findAny().get();
- ciFull.setGroupInstances(compInst.getGroupInstances());
- });
- }
-
- Either<Component, ToscaError> either = generateToscaArtifact(toscaElementFull);
-
- if (either.isRight()) {
- log.error("Couldn't generate and save tosca template component unique id {}, name {} error: {}",
- toscaElementFull.getUniqueId(), toscaElementFull.getName(), either.right().value());
- res = false;
-
- }
-
- if (res) {
- c.setToscaArtifacts(either.left().value().getToscaArtifacts());
- fixedIds.add(toscaElementFull.getUniqueId());
- }
- } finally {
- if (res)
- janusGraphDao.commit();
- else
- janusGraphDao.rollback();
- }
- log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent finished component name {} id {} res {}",
- c.getName(), c.getUniqueId(), res);
- return res;
- }
-
- private <T extends ToscaDataDefinition> boolean fixDataOnGraph(String componentId, VertexTypeEnum vertexTypeEnum,
- EdgeLabelEnum edgeLabelEnum, Map<String, T> groups) {
- log.debug("amount groups to update: VertexTypeEnum {} EdgeLabelEnum {} data size {}", vertexTypeEnum.getName(),
- edgeLabelEnum, groups.size());
- boolean res = true;
- Either<GraphVertex, JanusGraphOperationStatus> getResponse = janusGraphDao.getVertexById(componentId,
- JsonParseFlagEnum.NoParse);
- if (getResponse.isRight()) {
- log.debug("Couldn't fetch component unique id {}, error: {}", componentId, getResponse.right().value());
- res = false;
-
- }
- if (res) {
- GraphVertex componentVertex = getResponse.left().value();
-
- GraphVertex toscaDataVertex = null;
- Either<GraphVertex, JanusGraphOperationStatus> groupVertexEither = janusGraphDao.getChildVertex(componentVertex,
- edgeLabelEnum, JsonParseFlagEnum.ParseJson);
- if (groupVertexEither.isRight() && groupVertexEither.right().value() == JanusGraphOperationStatus.NOT_FOUND) {
- log.debug("no child {} vertex for component unique id {}, error: {}", edgeLabelEnum, componentId,
- groupVertexEither.right().value());
- return true;
- }
- if (groupVertexEither.isRight()) {
- res = false;
- log.debug("failed to get child {} vertex for component unique id {}, error: {}", edgeLabelEnum,
- componentId, groupVertexEither.right().value());
- }
- if (res) {
- toscaDataVertex = groupVertexEither.left().value();
- toscaDataVertex.setJson(groups);
- Either<GraphVertex, JanusGraphOperationStatus> updatevertexEither = janusGraphDao.updateVertex(toscaDataVertex);
- if (updatevertexEither.isRight()) {
- log.debug("failed to update vertex for component unique id {}, error: {}", componentId,
- updatevertexEither.right().value());
- janusGraphDao.rollback();
- return false;
- }
- }
- }
- log.debug("Fix data on graph finished: VertexTypeEnum {} EdgeLabelEnum {} res {}", vertexTypeEnum.getName(),
- res);
- return res;
- }
-
- private boolean fixServices(List<Service> serviceList) {
- for (Service service : serviceList) {
- log.debug("Migration1707ArtifactUuidFix fix service: id {}, name {} ", service.getUniqueId(),
- service.getName());
- List<ComponentInstance> instances = service.getComponentInstances();
- for (ComponentInstance instance : instances) {
- fixComponentInstances(service, instance);
- }
-
- }
- return true;
-
- }
-
- private void fixComponentInstances(Service service, ComponentInstance instance) {
- Map<String, ArtifactDefinition> artifactsMap = instance.getDeploymentArtifacts();
- List<GroupInstance> groupsList = instance.getGroupInstances();
- if (groupsList != null && artifactsMap != null) {
- List<GroupInstance> groupsToDelete = new ArrayList<>();
- for (GroupInstance group : groupsList) {
- fixGroupInstances(service, artifactsMap, groupsToDelete, group);
-
- }
-
- if (!groupsToDelete.isEmpty()) {
- log.debug("Migration1707ArtifactUuidFix delete group: resource id {}, group instance to delete {} ",
- service.getUniqueId(), groupsToDelete);
- groupsList.removeAll(groupsToDelete);
-
- }
-
- Optional<ArtifactDefinition> optionalVfModuleArtifact = artifactsMap.values().stream()
- .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.VF_MODULES_METADATA.getType())).findAny();
- ArtifactDefinition vfModuleArtifact;
- if(!optionalVfModuleArtifact.isPresent()){
- vfModuleArtifact = createVfModuleArtifact(instance, service);
- artifactsMap.put(vfModuleArtifact.getArtifactLabel(), vfModuleArtifact);
- }
- else {
- vfModuleArtifact = optionalVfModuleArtifact.get();
- }
- fillVfModuleInstHeatEnvPayload(service, instance, groupsList, vfModuleArtifact);
- }
- }
-
- private void fixGroupInstances(Service service, Map<String, ArtifactDefinition> artifactsMap,
- List<GroupInstance> groupsToDelete, GroupInstance group) {
- if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
- log.debug("Migration1707ArtifactUuidFix fix group: resource id {}, group name {} ", service.getUniqueId(),
- group.getName());
- if(group.getArtifacts() != null){
- Set<String> groupArtifactsSet = new HashSet<>(group.getArtifacts());
- if(group.getGroupInstanceArtifacts() != null){
- List<String> groupInsArtifacts = new ArrayList<>(group.getGroupInstanceArtifacts());
- groupArtifactsSet.addAll(groupInsArtifacts);
- }
- List<String> groupArtifacts = new ArrayList<>(groupArtifactsSet);
-
- clearGroupInstanceArtifacts(group);
-
- for (String artifactId : groupArtifacts) {
- fixArtifactUndergroupInstances(artifactsMap, group, groupArtifacts, artifactId);
- }
- }
- if (group.getArtifacts() == null || group.getArtifacts().isEmpty()) {
- log.debug(
- "Migration1707ArtifactUuidFix fix groupInstance add to delete list: resource id {} name {} , group name {} ",
- service.getUniqueId(), service.getName(), group.getName());
- groupsToDelete.add(group);
- }
- }
- }
-
- private void clearGroupInstanceArtifacts(GroupInstance group) {
- if(group.getArtifacts() != null)
- group.getArtifacts().clear();
- else
- group.setArtifacts(new ArrayList<>());
- if(group.getArtifactsUuid() != null)
- group.getArtifactsUuid().clear();
- else{
- group.setArtifactsUuid(new ArrayList<>());
- }
- if(group.getGroupInstanceArtifacts() != null)
- group.getGroupInstanceArtifacts().clear();
- else{
- group.setGroupInstanceArtifacts(new ArrayList<>());
- }
- if(group.getGroupInstanceArtifactsUuid() != null )
- group.getGroupInstanceArtifactsUuid().clear();
- else
- group.setGroupInstanceArtifactsUuid(new ArrayList<>());
- }
-
- private void fixArtifactUndergroupInstances(Map<String, ArtifactDefinition> artifactsMap, GroupInstance group,
- List<String> groupArtifacts, String artifactId) {
- String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
- log.debug("Migration1707ArtifactUuidFix fix group: group name {} artifactId for fix {} artifactlabel {} ",
- group.getName(), artifactId, artifactlabel);
- if (!artifactlabel.isEmpty() && artifactsMap.containsKey(artifactlabel)) {
- ArtifactDefinition artifact = artifactsMap.get(artifactlabel);
- ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifact.getArtifactType());
- String correctArtifactId = artifact.getUniqueId();
- String correctArtifactUUID = artifact.getArtifactUUID();
- if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
- boolean isAddToGroup = true;
- if (groupArtifacts.size() == 1) {
- if (artifactType == ArtifactTypeEnum.HEAT_ARTIFACT) {
- isAddToGroup = false;
- artifact.setArtifactType(ArtifactTypeEnum.OTHER.getType());
- }
- }
- if (isAddToGroup) {
- log.debug(
- MIGRATION1707_ARTIFACT_UUID_FIX,
- group.getName(), correctArtifactId, correctArtifactUUID);
- group.getArtifacts().add(correctArtifactId);
- if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
- group.getArtifactsUuid().add(correctArtifactUUID);
- }
- }
- } else {
- log.debug(
- MIGRATION1707_ARTIFACT_UUID_FIX,
- group.getName(), correctArtifactId, correctArtifactUUID);
- Set<String> tmpSet = new HashSet<>(group.getGroupInstanceArtifacts());
- tmpSet.add(correctArtifactId);
- group.setGroupInstanceArtifacts(new ArrayList<>(tmpSet));
- if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
- Set<String> tmpSetUUID = new HashSet<>(group.getGroupInstanceArtifactsUuid());
- tmpSetUUID.add(correctArtifactUUID);
- group.setGroupInstanceArtifactsUuid(new ArrayList<>(tmpSetUUID));
- }
- }
- }
- }
-
- private boolean fixVf(List<Resource> vfLst) {
- for (Resource resource : vfLst) {
- log.debug("Migration1707ArtifactUuidFix fix resource: id {}, name {} ", resource.getUniqueId(),
- resource.getName());
- Map<String, ArtifactDefinition> artifactsMap = resource.getDeploymentArtifacts();
- List<GroupDefinition> groupsList = resource.getGroups();
- List<GroupDefinition> groupsToDelete = new ArrayList<>();
- if (groupsList != null && artifactsMap != null) {
- for (GroupDefinition group : groupsList) {
- if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE) && group.getArtifacts() != null) {
- fixVfGroup(resource, artifactsMap, group);
- }
- if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)
- && (group.getArtifacts() == null || group.getArtifacts().isEmpty())) {
- log.debug(
- "Migration1707ArtifactUuidFix add group to delete list fix resource: id {}, name {} ",
- resource.getUniqueId(), resource.getName(), group.getName());
- groupsToDelete.add(group);
- }
- }
-
- if (!groupsToDelete.isEmpty()) {
- groupsList.removeAll(groupsToDelete);
-
- }
- }
-
- }
-
- return true;
- }
-
- private void fixVfGroup(Resource resource, Map<String, ArtifactDefinition> artifactsMap, GroupDefinition group) {
- log.debug("Migration1707ArtifactUuidFix fix group: resource id {}, group name {} ", resource.getUniqueId(),
- group.getName());
- Set<String> groupArtifactsSet = new HashSet<>(group.getArtifacts());
- List<String> groupArtifacts = new ArrayList<>(groupArtifactsSet);
- group.getArtifacts().clear();
- group.getArtifactsUuid().clear();
-
- for (String artifactId : groupArtifacts) {
- fixArtifactUnderGroup(artifactsMap, group, groupArtifacts, artifactId);
- }
- }
-
- private void fixArtifactUnderGroup(Map<String, ArtifactDefinition> artifactsMap, GroupDefinition group,
- List<String> groupArtifacts, String artifactId) {
-
- String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
- log.debug("Migration1707ArtifactUuidFix fix group: group name {} artifactId for fix {} artifactlabel {} ",
- group.getName(), artifactId, artifactlabel);
- if (!artifactlabel.isEmpty() && artifactsMap.containsKey(artifactlabel)) {
- ArtifactDefinition artifact = artifactsMap.get(artifactlabel);
- String correctArtifactId = artifact.getUniqueId();
- String correctArtifactUUID = artifact.getArtifactUUID();
- boolean isAddToGroup = true;
- if (groupArtifacts.size() == 1) {
- ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifact.getArtifactType());
- if (artifactType == ArtifactTypeEnum.HEAT_ARTIFACT) {
- isAddToGroup = false;
- artifact.setArtifactType(ArtifactTypeEnum.OTHER.getType());
- }
- }
- if (isAddToGroup) {
- log.debug(
- MIGRATION1707_ARTIFACT_UUID_FIX,
- group.getName(), correctArtifactId, correctArtifactUUID);
- group.getArtifacts().add(correctArtifactId);
- if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
- group.getArtifactsUuid().add(correctArtifactUUID);
- }
- }
-
- }
- }
-
- private String findArtifactLabelFromArtifactId(String artifactId) {
- String artifactLabel = "";
-
- int index = artifactId.lastIndexOf('.');
- if (index > 0 && index + 1 < artifactId.length())
- artifactLabel = artifactId.substring(index + 1);
- return artifactLabel;
- }
-
- private void writeModuleResultToFile(Writer writer, org.openecomp.sdc.be.model.Component component,
- Service service) {
- try {
- // "service name, service id, state, version
- StringBuilder sb = new StringBuilder(component.getName());
- sb.append(",").append(component.getUniqueId()).append(",").append(component.getLifecycleState()).append(",")
- .append(component.getVersion());
- if (service != null) {
- sb.append(",").append(service.getName());
- }
- sb.append("\n");
- writer.write(sb.toString());
- } catch (IOException e) {
- log.error(e.getMessage());
- }
- }
-
- private void writeModuleResultToFile(Writer writer, List<Component> components) {
- try {
- // "service name, service id, state, version
- for (Component component : components) {
- StringBuilder sb = new StringBuilder(component.getName());
- sb.append(",").append(component.getUniqueId()).append(",").append(component.getInvariantUUID())
- .append(",").append(component.getLifecycleState()).append(",").append(component.getVersion());
-
- sb.append("\n");
- writer.write(sb.toString());
- }
- } catch (IOException e) {
-
- log.error(e.getMessage());
- }
- }
-
- public boolean doFixTosca(Map<String, List<Component>> nodeToFix, Map<String, List<Component>> vfToFix,
- Map<String, List<Component>> serviceToFix) {
-
- Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
- hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
- hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
-
- Map<String, List<Component>> vertices = getVerticesToValidate(VertexTypeEnum.NODE_TYPE, hasProps);
- validateTosca(vertices, nodeToFix, "RESOURCE_TOSCA_ARTIFACTS");//
-
- hasProps.clear();
- hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
- hasProps.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.VF);
- hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
-
- vertices = getVerticesToValidate(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps);
- validateTosca(vertices, vfToFix, "VF_TOSCA_ARTIFACTS");
-
- hasProps.clear();
- hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
- hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
-
- vertices = getVerticesToValidate(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps);
- return validateTosca(vertices, serviceToFix, "SERVICE_TOSCA_ARTIFACTS");
- }
-
- public Map<String, List<Component>> getVerticesToValidate(VertexTypeEnum type,
- Map<GraphPropertyEnum, Object> hasProps) {
-
- Map<String, List<Component>> result = new HashMap<>();
- try {
-
- Either<List<GraphVertex>, JanusGraphOperationStatus> resultsEither = janusGraphDao
- .getByCriteria(type, hasProps);
- if (resultsEither.isRight()) {
- log.error("getVerticesToValidate failed {} ",resultsEither.right().value());
- return result;
- }
- log.info("getVerticesToValidate: {} vertices to scan", resultsEither.left().value().size());
- List<GraphVertex> componentsList = resultsEither.left().value();
- componentsList.forEach(vertex -> {
- String ivariantUuid = (String) vertex.getMetadataProperty(GraphPropertyEnum.INVARIANT_UUID);
- if (!result.containsKey(ivariantUuid)) {
- List<Component> compList = new ArrayList<>();
- result.put(ivariantUuid, compList);
- }
- List<Component> compList = result.get(ivariantUuid);
-
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreArtifacts(false);
-
- Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaElement(vertex.getUniqueId(), filter);
- if (toscaElement.isRight()) {
- log.error("getVerticesToValidate: failed to find element {} staus is {}", vertex.getUniqueId()
- ,toscaElement.right().value());
- } else {
- compList.add(toscaElement.left().value());
- }
- janusGraphDao.commit();
-
- });
-
- } catch (Exception e) {
- log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
-
- } finally {
- janusGraphDao.commit();
-
- }
- return result;
- }
-
- public boolean validateTosca(Map<String, List<Component>> vertices, Map<String, List<Component>> compToFix,
- String name) {
- boolean result = true;
- long time = System.currentTimeMillis();
- String fileName = name + "_" + time + ".csv";
- try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF8))) {
- writer.write("name, UUID, invariantUUID, state, version\n");
- for (Map.Entry<String, List<Component>> entry : vertices.entrySet()) {
- List<Component> compList = entry.getValue();
- Set<String> artifactEsId = new HashSet<>();
- for (Component component : compList) {
- Map<String, ArtifactDefinition> toscaArtifacts = component.getToscaArtifacts();
- Optional<ArtifactDefinition> op = toscaArtifacts.values().stream()
- .filter(a -> artifactEsId.contains(a.getEsId()) && a.getEsId() != null).findAny();
- if (op.isPresent()) {
- result = false;
- writeModuleResultToFile(writer, compList);
- writer.flush();
- break;
- } else {
- artifactEsId.addAll(toscaArtifacts.values().stream().map(ArtifactDefinition::getEsId)
- .collect(Collectors.toList()));
- }
- }
- if (!result) {
- List<Component> compListfull = new ArrayList<>();
- for (Component c : compList) {
- ComponentParametersView filter = new ComponentParametersView(true);
- filter.setIgnoreComponentInstances(false);
- filter.setIgnoreArtifacts(false);
- filter.setIgnoreGroups(false);
-
- Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
- .getToscaElement(c.getUniqueId(), filter);
- if (toscaElement.isRight()) {
- log.debug("getVerticesToValidate: failed to find element" + c.getUniqueId()
- + " status is" + toscaElement.right().value());
- } else {
- compListfull.add(toscaElement.left().value());
- }
- this.janusGraphDao.commit();
- }
-
- compToFix.put(entry.getKey(), compListfull);
- result = true;
- }
-
- }
-
- } catch (Exception e) {
- log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
- return false;
- } finally {
- janusGraphDao.commit();
- }
- return result;
- }
-
- private Either<Component, ToscaError> generateToscaArtifact(Component parent) {
- log.debug("tosca artifact generation");
- try {
- Map<String, ArtifactDefinition> toscaArtifacts = parent.getToscaArtifacts();
-
- ArtifactDefinition toscaArtifact = null;
- Optional<ArtifactDefinition> op = toscaArtifacts.values().stream()
- .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.TOSCA_TEMPLATE.getType())).findAny();
-
- if (op.isPresent()) {
- toscaArtifact = op.get();
- }
- if (toscaArtifact != null) {
- log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent artifact name {} id {} esId {}",
- toscaArtifact.getArtifactName(), toscaArtifact.getUniqueId(), toscaArtifact.getEsId());
-
- Either<ToscaRepresentation, ToscaError> exportComponent = toscaExportUtils.exportComponent(parent);
- if (exportComponent.isRight()) {
- log.debug("Failed export tosca yaml for component {} error {}", parent.getUniqueId(),
- exportComponent.right().value());
-
- return Either.right(exportComponent.right().value());
- }
- log.debug("Tosca yaml exported for component {} ", parent.getUniqueId());
-
- toscaArtifact.setPayload(exportComponent.left().value().getMainYaml());
- byte[] decodedPayload = toscaArtifact.getPayloadData();
-
- String uniqueId = UniqueIdBuilder.buildPropertyUniqueId(parent.getUniqueId(),
- toscaArtifact.getArtifactLabel());
- toscaArtifact.setUniqueId(uniqueId);
- toscaArtifact.setEsId(toscaArtifact.getUniqueId());
-
- toscaArtifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(decodedPayload));
- DAOArtifactData artifactData = new DAOArtifactData(toscaArtifact.getEsId(), decodedPayload);
- artifactCassandraDao.saveArtifact(artifactData);
-
- log.debug("Tosca yaml artifact esId {} ", toscaArtifact.getEsId());
- }
- ArtifactDefinition csarArtifact = null;
- op = toscaArtifacts.values().stream()
- .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.TOSCA_CSAR.getType())).findAny();
-
- if (op.isPresent()) {
- csarArtifact = op.get();
- }
-
- if (csarArtifact != null) {
- Either<byte[], ResponseFormat> generated = csarUtils.createCsar(parent, true, true);
-
- if (generated.isRight()) {
- log.debug("Failed to export tosca csar for component {} error {}", parent.getUniqueId(),
- generated.right().value());
-
- return Either.right(ToscaError.GENERAL_ERROR);
- }
- byte[] value = generated.left().value();
- csarArtifact.setPayload(value);
- byte[] decodedPayload = csarArtifact.getPayloadData();
-
- String uniqueId = UniqueIdBuilder.buildPropertyUniqueId(parent.getUniqueId(),
- csarArtifact.getArtifactLabel());
- csarArtifact.setUniqueId(uniqueId);
- csarArtifact.setEsId(csarArtifact.getUniqueId());
-
- csarArtifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(decodedPayload));
- DAOArtifactData artifactData = new DAOArtifactData(csarArtifact.getEsId(), decodedPayload);
- artifactCassandraDao.saveArtifact(artifactData);
- log.debug("Tosca csar artifact esId {} ", csarArtifact.getEsId());
-
- }
-
- } catch (Exception ex) {
- log.error("Failed to generate tosca atifact component id {} component name {} error {}",
- parent.getUniqueId(), parent.getName(), ex.getMessage());
-
- return Either.right(ToscaError.GENERAL_ERROR);
- }
-
- return Either.left(parent);
- }
-
- private ArtifactDefinition createVfModuleArtifact(ComponentInstance currVF, Service service) {
-
- ArtifactDefinition vfModuleArtifactDefinition = new ArtifactDefinition();
-
- vfModuleArtifactDefinition.setDescription("Auto-generated VF Modules information artifact");
- vfModuleArtifactDefinition.setArtifactDisplayName("Vf Modules Metadata");
- vfModuleArtifactDefinition.setArtifactType(ArtifactTypeEnum.VF_MODULES_METADATA.getType());
- vfModuleArtifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
- vfModuleArtifactDefinition.setArtifactLabel("vfModulesMetadata");
- vfModuleArtifactDefinition.setTimeout(0);
- vfModuleArtifactDefinition.setArtifactName(currVF.getNormalizedName() + "_modules.json");
-
- return vfModuleArtifactDefinition;
- }
-
-
- private void fillVfModuleInstHeatEnvPayload(Component parent, ComponentInstance instance, List<GroupInstance> groupsForCurrVF,
- ArtifactDefinition vfModuleArtifact) {
- log.debug("generate new vf module for component. name {}, id {}, Version {}", instance.getName(), instance.getUniqueId());
-
- String uniqueId = UniqueIdBuilder.buildInstanceArtifactUniqueId(parent.getUniqueId(), instance.getUniqueId(), vfModuleArtifact.getArtifactLabel());
+ private static final String MIGRATION1707_ARTIFACT_UUID_FIX = "Migration1707ArtifactUuidFix fix group: group name {} correct artifactId {} artifactUUID {} ";
+
+ private static final String FAILED_TO_FETCH_VF_RESOURCES = "Failed to fetch vf resources ";
+
+ private static Logger log = Logger.getLogger(ArtifactUuidFix.class.getName());
+ private JanusGraphDao janusGraphDao;
+ private ToscaOperationFacade toscaOperationFacade;
+ private ToscaExportHandler toscaExportUtils;
+ private ArtifactCassandraDao artifactCassandraDao;
+ private CsarUtils csarUtils;
+
+ @Autowired
+ public ArtifactUuidFix(JanusGraphDao janusGraphDao,
+ ToscaOperationFacade toscaOperationFacade, ToscaExportHandler toscaExportUtils,
+ ArtifactCassandraDao artifactCassandraDao, CsarUtils csarUtils) {
+ this.janusGraphDao = janusGraphDao;
+ this.toscaOperationFacade = toscaOperationFacade;
+ this.toscaExportUtils = toscaExportUtils;
+ this.artifactCassandraDao = artifactCassandraDao;
+ this.csarUtils = csarUtils;
+ }
+
+ public boolean doFix(String fixComponent, String runMode) {
+ List<Resource> vfLst = new ArrayList<>();
+ List<Service> serviceList = new ArrayList<>();
+ Map<String, List<Component>> nodeToFixTosca = new HashMap<>();
+ Map<String, List<Component>> vfToFixTosca = new HashMap<>();
+ Map<String, List<Component>> serviceToFixTosca = new HashMap<>();
+
+ long time = System.currentTimeMillis();
+
+ doFixTosca(nodeToFixTosca, vfToFixTosca, serviceToFixTosca);
+
+ if ("vf_only".equals(fixComponent)) {
+ if (!fetchFaultVf(vfLst, time)) {
+ return false;
+ }
+ } else {
+ if (!fetchServices(fixComponent, serviceList, time)) {
+ return false;
+ }
+ }
+ if ("service_vf".equals(runMode) || "fix".equals(runMode)) {
+ log.info("Mode {}. Find problem VFs", runMode);
+ if (!fetchVf(serviceList, vfLst, time)) {
+ log.info("Mode {}. Find problem VFs finished with failure", runMode);
+ return false;
+ }
+ log.info("Mode {}. Find problem VFs finished with success", runMode);
+ }
+ if ("fix".equals(runMode) || "fix_only_services".equals(runMode)) {
+ log.info("Mode {}. Start fix", runMode);
+ if (!fix(vfLst, serviceList, nodeToFixTosca, vfToFixTosca, serviceToFixTosca)) {
+ log.info("Mode {}. Fix finished with failure", runMode);
+ return false;
+ }
+ log.info("Mode {}. Fix finished with success", runMode);
+ }
+
+ return true;
+ }
+
+ private boolean fetchFaultVf(List<Resource> vfLst, long time) {
+ log.info("Find fault VF ");
+ String fileName = "fault_" + time + ".csv";
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF_8))) {
+ writer.write("vf name, vf id, state, version\n");
+
+ Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
+ hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
+ hasProps.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.VF.name());
+
+ Map<GraphPropertyEnum, Object> hasNotProps = new EnumMap<>(GraphPropertyEnum.class);
+ hasNotProps.put(GraphPropertyEnum.IS_DELETED, true);
+ log.info("Try to fetch resources with properties {} and not {}", hasProps, hasNotProps);
+
+ Either<List<GraphVertex>, JanusGraphOperationStatus> servicesByCriteria = janusGraphDao
+ .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps, hasNotProps, JsonParseFlagEnum.ParseAll);
+ if (servicesByCriteria.isRight()) {
+ log.info("Failed to fetch resources {}", servicesByCriteria.right().value());
+ return false;
+ }
+ List<GraphVertex> resources = servicesByCriteria.left().value();
+ for (GraphVertex gv : resources) {
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreComponentInstances(false);
+ filter.setIgnoreArtifacts(false);
+ filter.setIgnoreGroups(false);
+
+ Either<Resource, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaElement(gv.getUniqueId());
+ if (toscaElement.isRight()) {
+ log.info("Failed to fetch resources {} {}", gv.getUniqueId(), toscaElement.right().value());
+ continue;
+ }
+
+ Resource resource = toscaElement.left().value();
+ String resourceName = resource.getName();
+ Map<String, ArtifactDefinition> deploymentArtifacts = resource.getDeploymentArtifacts();
+ List<GroupDefinition> groups = resource.getGroups();
+ if (groups == null || groups.isEmpty()) {
+ log.info("No groups for resource {} id {} ", resourceName, gv.getUniqueId());
+ continue;
+ }
+ boolean isProblematic = false;
+ for (GroupDefinition gr : groups) {
+ if (gr.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE) && isProblematicGroup(gr, resourceName, deploymentArtifacts)) {
+ isProblematic = true;
+ break;
+ }
+ }
+ if (isProblematic) {
+ vfLst.add(resource);
+ writeModuleResultToFile(writer, resource, null);
+ writer.flush();
+ }
+ janusGraphDao.commit();
+ }
+
+ } catch (Exception e) {
+ log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
+ return false;
+ } finally {
+ janusGraphDao.commit();
+ }
+ return true;
+ }
+
+ private boolean fetchVf(List<Service> serviceList, List<Resource> vfLst, long time) {
+ log.info("Find problem VF ");
+ if (serviceList.isEmpty()) {
+ log.info("No services as input");
+ return true;
+ }
+ String fileName = "problemVf_" + time + ".csv";
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF_8))) {
+ writer.write("vf name, vf id, state, version, example service name\n");
+ Set<String> vfIds = new HashSet<>();
+ for (Service service : serviceList) {
+ List<ComponentInstance> componentInstances = service.getComponentInstances().stream()
+ .filter(ci -> ci.getOriginType().equals(OriginTypeEnum.VF)).collect(Collectors.toList());
+ for (ComponentInstance ci : componentInstances) {
+ if (!vfIds.contains(ci.getComponentUid())) {
+ vfIds.add(ci.getComponentUid());
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreComponentInstances(false);
+ filter.setIgnoreArtifacts(false);
+ filter.setIgnoreGroups(false);
+ Either<Resource, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaElement(ci.getComponentUid(), filter);
+ if (toscaElement.isRight()) {
+ log.info("Failed to fetch resource {} {}", ci.getComponentUid(),
+ toscaElement.right().value());
+ continue;
+ }
+ Resource resource = toscaElement.left().value();
+ if (resource.getResourceType().equals(ResourceTypeEnum.VF)) {
+ vfLst.add(resource);
+ writeModuleResultToFile(writer, resource, service);
+ writer.flush();
+
+ }
+ janusGraphDao.commit();
+ }
+ }
+ }
+ log.info("output file with list of Vf : {}", fileName);
+ } catch (Exception e) {
+ log.info("Failed to fetch services ", e);
+ return false;
+ } finally {
+ janusGraphDao.commit();
+ }
+ return true;
+ }
+
+ private boolean fetchServices(String fixServices, List<Service> serviceList, long time) {
+ log.info("Find problem Services {}", fixServices);
+ String fileName = "problemService_" + time + ".csv";
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF_8))) {
+ writer.write("service name, service id, state, version\n");
+
+ Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
+ hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ if ("distributed_only".equals(fixServices)) {
+ hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ hasProps.put(GraphPropertyEnum.DISTRIBUTION_STATUS, DistributionStatusEnum.DISTRIBUTED.name());
+ }
+
+ Map<GraphPropertyEnum, Object> hasNotProps = new EnumMap<>(GraphPropertyEnum.class);
+ hasNotProps.put(GraphPropertyEnum.IS_DELETED, true);
+ log.info("Try to fetch services with properties {} and not {}", hasProps, hasNotProps);
+
+ Either<List<GraphVertex>, JanusGraphOperationStatus> servicesByCriteria = janusGraphDao
+ .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps, hasNotProps, JsonParseFlagEnum.ParseAll);
+ if (servicesByCriteria.isRight()) {
+ log.info("Failed to fetch services {}", servicesByCriteria.right().value());
+ return false;
+ }
+ List<GraphVertex> services = servicesByCriteria.left().value();
+ for (GraphVertex gv : services) {
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreComponentInstances(false);
+ filter.setIgnoreArtifacts(false);
+ filter.setIgnoreGroups(false);
+
+ Either<Service, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaElement(gv.getUniqueId(), filter);
+ if (toscaElement.isRight()) {
+ log.info("Failed to fetch service {} {}", gv.getUniqueId(), toscaElement.right().value());
+ continue;
+ }
+ Service service = toscaElement.left().value();
+
+ String serviceName = (String) gv.getMetadataProperty(GraphPropertyEnum.NAME);
+
+ boolean isProblematic = isProblematicService(service, serviceName);
+ if (isProblematic) {
+ serviceList.add(service);
+ writeModuleResultToFile(writer, service, null);
+ writer.flush();
+
+ }
+
+ janusGraphDao.commit();
+ }
+ log.info("output file with list of services : {}", fileName);
+ } catch (Exception e) {
+ log.info("Failed to fetch services ", e);
+ return false;
+ } finally {
+ janusGraphDao.commit();
+ }
+ return true;
+ }
+
+ private boolean isProblematicService(Service service, String serviceName) {
+
+ List<ComponentInstance> componentInstances = service.getComponentInstances();
+
+ if (componentInstances == null) {
+ log.info("No instances for service {} ", service.getUniqueId());
+ return false;
+ }
+ boolean isCheckVFModules = true;
+ if (service.getLifecycleState() == LifecycleStateEnum.NOT_CERTIFIED_CHECKIN ||
+ service.getLifecycleState() == LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT) {
+ isCheckVFModules = false;
+ }
+ for (ComponentInstance ci : componentInstances) {
+ Map<String, ArtifactDefinition> deploymentArtifacts = ci.getDeploymentArtifacts();
+ List<GroupInstance> groupInstances = ci.getGroupInstances();
+ if (groupInstances == null || groupInstances.isEmpty()) {
+ log.info("No instance groups for instance {} in service {} id {} ", ci.getName(), serviceName,
+ service.getUniqueId());
+ continue;
+ }
+ List<VfModuleArtifactPayloadEx> vfModules = null;
+ if (isCheckVFModules) {
+ Optional<ArtifactDefinition> optionalVfModuleArtifact = deploymentArtifacts.values().stream()
+ .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.VF_MODULES_METADATA.getType())).findAny();
+
+ if (!optionalVfModuleArtifact.isPresent()) {
+ return true;
+ }
+
+ ArtifactDefinition vfModuleArtifact = optionalVfModuleArtifact.get();
+ Either<List<VfModuleArtifactPayloadEx>, StorageOperationStatus> vfModulesEither = parseVFModuleJson(vfModuleArtifact);
+ if (vfModulesEither.isRight()) {
+ log.error("Failed to parse vfModule for service {} status is {}", service.getUniqueId(), vfModulesEither.right().value());
+ return true;
+ }
+ vfModules = vfModulesEither.left().value();
+ if (vfModules == null || vfModules.isEmpty()) {
+ log.info("vfModules empty for service {}", service.getUniqueId());
+ return true;
+ }
+ }
+
+ for (GroupInstance gi : groupInstances) {
+ if (gi.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
+ VfModuleArtifactPayloadEx vfModule = null;
+ if (isCheckVFModules && vfModules != null) {
+ Optional<VfModuleArtifactPayloadEx> op = vfModules.stream().filter(vf -> vf.getVfModuleModelName().equals(gi.getGroupName()))
+ .findAny();
+ if (!op.isPresent()) {
+ log.error("Failed to find vfModule for group {}", gi.getGroupName());
+ return true;
+ }
+ vfModule = op.get();
+ }
+ if (isProblematicGroupInstance(gi, ci.getName(), serviceName, deploymentArtifacts, vfModule)) {
+ return true;
+ }
+ }
+ }
+
+ }
+ return false;
+ }
+
+ private boolean isProblematicGroup(GroupDefinition gr, String resourceName,
+ Map<String, ArtifactDefinition> deploymentArtifacts) {
+ List<String> artifacts = gr.getArtifacts();
+ List<String> artifactsUuid = gr.getArtifactsUuid();
+ Set<String> artifactsSet = new HashSet<>();
+
+ if ((artifactsUuid == null || artifactsUuid.isEmpty()) && (artifacts == null || artifacts.isEmpty())) {
+ log.info("No groups in resource {} ", resourceName);
+ return true;
+ }
+ artifactsSet.addAll(artifacts);
+ if (artifactsSet.size() < artifacts.size()) {
+ log.info(" artifactsSet.size() < artifacts.size() group {} in resource {} ", gr.getName(), resourceName);
+ return true;
+ }
+
+ if ((artifactsUuid != null) && (artifacts.size() < artifactsUuid.size())) {
+ log.info(" artifacts.size() < artifactsUuid.size() group {} in resource {} ", gr.getName(), resourceName);
+ return true;
+ }
+ if (!artifacts.isEmpty() && (artifactsUuid == null || artifactsUuid.isEmpty())) {
+ log.info(
+ " artifacts.size() > 0 && (artifactsUuid == null || artifactsUuid.isEmpty() group {} in resource {} ",
+ gr.getName(), resourceName);
+ return true;
+ }
+ if (artifactsUuid != null && artifactsUuid.contains(null)) {
+ log.info(" artifactsUuid.contains(null) group {} in resource {} ", gr.getName(), resourceName);
+ return true;
+ }
+
+ for (String artifactId : artifacts) {
+ String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
+ ArtifactDefinition artifactDefinition = deploymentArtifacts.get(artifactlabel);
+ if (artifactDefinition == null) {
+ log.info(" artifactDefinition == null label {} group {} in resource {} ", artifactlabel, gr.getName(),
+ resourceName);
+ return true;
+ }
+ ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifactDefinition.getArtifactType());
+ if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
+ if (!artifactId.equals(artifactDefinition.getUniqueId())) {
+ log.info(
+ " !artifactId.equals(artifactDefinition.getUniqueId() artifact {} artId {} group {} in resource {} ",
+ artifactlabel, artifactId, gr.getName(), resourceName);
+ return true;
+ }
+ if (artifactsUuid != null && !artifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
+ log.info(
+ " artifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} group {} in resource {} ",
+ artifactlabel, gr.getName(), resourceName);
+ return true;
+ }
+ }
+ }
+ for (String artifactUUID : artifactsUuid) {
+ String label = findArtifactLabelFromArtifactId(artifactUUID);
+ if (label != null && !label.isEmpty() && !label.equals("")) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean isProblematicGroupInstance(GroupInstance gi, String instName, String servicename,
+ Map<String, ArtifactDefinition> deploymentArtifacts, VfModuleArtifactPayloadEx vfModule) {
+ List<String> artifacts = gi.getArtifacts();
+ List<String> artifactsUuid = gi.getArtifactsUuid();
+ List<String> instArtifactsUuid = gi.getGroupInstanceArtifactsUuid();
+ List<String> instArtifactsId = gi.getGroupInstanceArtifacts();
+ Set<String> instArtifatIdSet = new HashSet<>();
+ Set<String> artifactsSet = new HashSet<>();
+
+ log.info("check group {} for instance {} ", gi.getGroupName(), instName);
+ if ((artifactsUuid == null || artifactsUuid.isEmpty()) && (artifacts == null || artifacts.isEmpty())) {
+ log.info("No instance groups for instance {} in service {} ", instName, servicename);
+ return true;
+ }
+ artifactsSet.addAll(artifacts);
+ if (artifactsSet.size() < artifacts.size()) {
+ log.info(" artifactsSet.size() < artifacts.size() group {} in resource {} ", instName, servicename);
+ return true;
+ }
+
+ if (instArtifactsId != null && !instArtifactsId.isEmpty()) {
+ instArtifatIdSet.addAll(instArtifactsId);
+ }
+
+ if ((artifactsUuid != null) && (artifacts.size() < artifactsUuid.size())) {
+ log.info(" artifacts.size() < artifactsUuid.size() inst {} in service {} ", instName, servicename);
+ return true;
+ }
+ if (!artifacts.isEmpty() && (artifactsUuid == null || artifactsUuid.isEmpty())) {
+ log.info(
+ " artifacts.size() > 0 && (artifactsUuid == null || artifactsUuid.isEmpty() inst {} in service {} ",
+ instName, servicename);
+ return true;
+ }
+ if (artifactsUuid != null && artifactsUuid.contains(null)) {
+ log.info(" artifactsUuid.contains(null) inst {} in service {} ", instName, servicename);
+ return true;
+ }
+ if (instArtifactsId != null && instArtifatIdSet.size() < instArtifactsId.size()) {
+ log.info(" instArtifatIdSet.size() < instArtifactsId.size() inst {} in service {} ", instName, servicename);
+ return true;
+ }
+
+ if ((instArtifactsId != null && instArtifactsUuid != null)
+ && instArtifactsId.size() != instArtifactsUuid.size()) {
+ log.info(" instArtifactsId.size() != instArtifactsUuid.size() inst {} in service {} ", instName,
+ servicename);
+ return true;
+ }
+
+ for (String artifactId : artifacts) {
+ String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
+ ArtifactDefinition artifactDefinition = deploymentArtifacts.get(artifactlabel);
+ if (artifactDefinition == null) {
+ log.info(" artifactDefinition == null label {} inst {} in service {} ", artifactlabel, instName,
+ servicename);
+ return true;
+ }
+ ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifactDefinition.getArtifactType());
+ if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
+ if (!artifactId.equals(artifactDefinition.getUniqueId())) {
+ log.info(
+ " !artifactId.equals(artifactDefinition.getUniqueId() artifact {} artId {} inst {} in service {} ",
+ artifactlabel, artifactId, instName, servicename);
+ return true;
+ }
+ if (artifactsUuid != null && !artifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
+ log.info(
+ " artifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} inst {} in service {} ",
+ artifactlabel, instName, servicename);
+ return true;
+ }
+ } else {
+ if (instArtifactsUuid == null || instArtifactsUuid.isEmpty()) {
+ log.info(" instArtifactsUuid empty. label {} inst {} in service {} ", artifactlabel, instName,
+ servicename);
+ return true;
+ }
+ if (!instArtifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
+ log.info(
+ " instArtifactsUuid.contains(artifactDefinition.getArtifactUUID() label {} inst {} in service {} ",
+ artifactlabel, instName, servicename);
+ return true;
+ }
+ }
+ }
+ for (String artifactUUID : artifactsUuid) {
+ String label = findArtifactLabelFromArtifactId(artifactUUID);
+ if (label != null && !label.isEmpty() && !"".equals(label)) {
+ return true;
+ }
+ }
+ if (vfModule != null && artifactsUuid != null) {
+ return isProblematicVFModule(vfModule, artifactsUuid, instArtifactsUuid);
+ }
+
+ return false;
+ }
+
+ private boolean isProblematicVFModule(VfModuleArtifactPayloadEx vfModule, List<String> artifactsUuid,
+ List<String> instArtifactsUuid) {
+ log.info(" isProblematicVFModule {} ", vfModule.getVfModuleModelName());
+ List<String> vfModuleArtifacts = vfModule.getArtifacts();
+ List<String> allArtifacts = new ArrayList<>();
+ allArtifacts.addAll(artifactsUuid);
+ if (instArtifactsUuid != null) {
+ allArtifacts.addAll(instArtifactsUuid);
+ }
+ if ((vfModuleArtifacts == null || vfModuleArtifacts.isEmpty()) && !artifactsUuid.isEmpty()) {
+ log.error(" vfModuleArtifacts == null || vfModuleArtifacts.isEmpty()) && !artifactsUuid.isEmpty()");
+ return true;
+ }
+ if (vfModuleArtifacts != null) {
+ if (vfModuleArtifacts.size() != allArtifacts.size()) {
+ log.error(" vfModuleArtifacts.size() != allArtifacts.size()");
+ return true;
+ }
+ for (String vfModuleArtifact : vfModuleArtifacts) {
+ Optional<String> op = allArtifacts.stream().filter(a -> a.equals(vfModuleArtifact)).findAny();
+ if (!op.isPresent()) {
+ log.error("failed to find artifact {} in group artifacts {}", vfModuleArtifact, allArtifacts);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ private boolean fix(List<Resource> vfLst, List<Service> serviceList, Map<String, List<Component>> nodesToFixTosca,
+ Map<String, List<Component>> vfToFixTosca, Map<String, List<Component>> servicesToFixTosca) {
+ boolean res = true;
+ log.info(" Fix started ***** ");
+ if (vfLst != null && !vfLst.isEmpty()) {
+ res = fixVf(vfLst);
+
+ }
+
+ if (res && serviceList != null && !serviceList.isEmpty()) {
+ res = fixServices(serviceList);
+
+ }
+
+ Set<String> fixedIds = new HashSet<>();
+
+ long time = System.currentTimeMillis();
+ String fileName = "FailedGenerateTosca" + "_" + time + ".csv";
+
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF_8))) {
+ writer.write("componentType, name, version, UID, UUID, invariantUUID, state\n");
+ List<Component> failedList = new ArrayList<>();
+
+ if (res && nodesToFixTosca != null && !nodesToFixTosca.isEmpty()) {
+
+ generateAndSaveToscaArtifacts(nodesToFixTosca, fixedIds, null, failedList);
+
+ }
+ if (vfToFixTosca != null && !vfToFixTosca.isEmpty()) {
+
+ generateAndSaveToscaArtifacts(vfToFixTosca, fixedIds, vfLst, failedList);
+
+ }
+
+ for (Component component : vfLst) {
+ res = generateToscaPerComponent(fixedIds, component);
+ if (res) {
+ TopologyTemplate topologyTemplate = ModelConverter.convertToToscaElement(component);
+ Map<String, GroupDataDefinition> groups = topologyTemplate.getGroups();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.GROUPS, EdgeLabelEnum.GROUPS, groups);
+ if (res) {
+ Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getDeploymentArtifacts();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.DEPLOYMENT_ARTIFACTS,
+ EdgeLabelEnum.DEPLOYMENT_ARTIFACTS, arifacts);
+ }
+ if (res) {
+ Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS,
+ EdgeLabelEnum.TOSCA_ARTIFACTS, arifacts);
+ }
+ janusGraphDao.commit();
+ } else {
+ failedList.add(component);
+ }
+ }
+
+ if (servicesToFixTosca != null && !servicesToFixTosca.isEmpty()) {
+ generateAndSaveToscaArtifacts(servicesToFixTosca, fixedIds, serviceList, failedList);
+
+ }
+
+ for (Component component : serviceList) {
+ res = generateToscaPerComponent(fixedIds, component);
+ if (res) {
+ TopologyTemplate topologyTemplate = ModelConverter.convertToToscaElement(component);
+ Map<String, MapGroupsDataDefinition> groups = topologyTemplate.getInstGroups();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.INST_GROUPS, EdgeLabelEnum.INST_GROUPS,
+ groups);
+
+ if (res) {
+ Map<String, MapArtifactDataDefinition> artifacts = topologyTemplate
+ .getInstDeploymentArtifacts();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.INST_DEPLOYMENT_ARTIFACTS,
+ EdgeLabelEnum.INST_DEPLOYMENT_ARTIFACTS, artifacts);
+ }
+ if (res) {
+ Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
+ res = fixDataOnGraph(component.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS,
+ EdgeLabelEnum.TOSCA_ARTIFACTS, arifacts);
+ }
+ janusGraphDao.commit();
+ } else {
+ failedList.add(component);
+ }
+
+ }
+ if (!failedList.isEmpty()) {
+ for (Component component : failedList) {
+ StringBuilder sb = new StringBuilder(component.getComponentType().getValue());
+ sb.append(",").append(component.getName()).append(",").append(component.getVersion()).append(",")
+ .append(component.getUniqueId()).append(",").append(component.getUUID()).append(",")
+ .append(component.getInvariantUUID()).append(",").append(component.getLifecycleState());
+
+ sb.append("\n");
+ writer.write(sb.toString());
+ }
+ writer.flush();
+ }
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ } finally {
+ janusGraphDao.commit();
+ }
+ log.info(" Fix finished with res {} ***** ", res);
+ return res;
+ }
+
+ private boolean generateAndSaveToscaArtifacts(Map<String, List<Component>> nodesToFixTosca, Set<String> fixedIds,
+ List<? extends Component> componentsWithFailedGroups, List<Component> failedList) {
+ boolean res = true;
+ log.debug("Migration1707ArtifactUuidFix generateAndSaveToscaArtifacts started ");
+ for (Map.Entry<String, List<Component>> entry : nodesToFixTosca.entrySet()) {
+
+ List<Component> component = entry.getValue();
+ for (Component c : component) {
+ log.debug("Migration1707ArtifactUuidFix fix tosca on component : id {}, name {} ", c.getUniqueId(),
+ c.getName());
+ if (componentsWithFailedGroups != null) {
+ Optional<Component> op = (Optional<Component>) componentsWithFailedGroups.stream()
+ .filter(cg -> cg.getUniqueId().equals(c.getUniqueId())).findAny();
+ if (!op.isPresent()) {
+ res = generateToscaPerComponent(fixedIds, c);
+ }
+ } else {
+ res = generateToscaPerComponent(fixedIds, c);
+ }
+ if (res) {
+ ToscaElement topologyTemplate = ModelConverter.convertToToscaElement(c);
+ Map<String, ArtifactDataDefinition> arifacts = topologyTemplate.getToscaArtifacts();
+ res = fixDataOnGraph(c.getUniqueId(), VertexTypeEnum.TOSCA_ARTIFACTS, EdgeLabelEnum.TOSCA_ARTIFACTS,
+ arifacts);
+ janusGraphDao.commit();
+ } else {
+ failedList.add(c);
+ }
+
+ }
+ }
+ log.debug("Migration1707ArtifactUuidFix generateAndSaveToscaArtifacts finished with res {} ", res);
+ return res;
+ }
+
+ private boolean generateToscaPerComponent(Set<String> fixedIds, Component c) {
+ boolean res = true;
+ log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent started component name {} id {}",
+ c.getName(), c.getUniqueId());
+ try {
+ Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaFullElement(c.getUniqueId());
+ if (toscaElement.isRight()) {
+ log.info("Failed to fetch resources {} {}", c.getUniqueId(), toscaElement.right().value());
+ return false;
+ }
+ Component toscaElementFull = toscaElement.left().value();
+ toscaElementFull.setGroups(c.getGroups());
+ List<ComponentInstance> ciListFull = toscaElementFull.getComponentInstances();
+ List<ComponentInstance> ciList = c.getComponentInstances();
+ if (ciListFull != null && !ciListFull.isEmpty()) {
+ ciListFull.forEach(ciFull -> {
+ ComponentInstance compInst = ciList.stream()
+ .filter(ci -> ci.getUniqueId().equals(ciFull.getUniqueId())).findAny().get();
+ ciFull.setGroupInstances(compInst.getGroupInstances());
+ });
+ }
+
+ Either<Component, ToscaError> either = generateToscaArtifact(toscaElementFull);
+
+ if (either.isRight()) {
+ log.error("Couldn't generate and save tosca template component unique id {}, name {} error: {}",
+ toscaElementFull.getUniqueId(), toscaElementFull.getName(), either.right().value());
+ res = false;
+
+ }
+
+ if (res) {
+ c.setToscaArtifacts(either.left().value().getToscaArtifacts());
+ fixedIds.add(toscaElementFull.getUniqueId());
+ }
+ } finally {
+ if (res) {
+ janusGraphDao.commit();
+ } else {
+ janusGraphDao.rollback();
+ }
+ }
+ log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent finished component name {} id {} res {}",
+ c.getName(), c.getUniqueId(), res);
+ return res;
+ }
+
+ private <T extends ToscaDataDefinition> boolean fixDataOnGraph(String componentId, VertexTypeEnum vertexTypeEnum,
+ EdgeLabelEnum edgeLabelEnum, Map<String, T> groups) {
+ log.debug("amount groups to update: VertexTypeEnum {} EdgeLabelEnum {} data size {}", vertexTypeEnum.getName(),
+ edgeLabelEnum, groups.size());
+ boolean res = true;
+ Either<GraphVertex, JanusGraphOperationStatus> getResponse = janusGraphDao.getVertexById(componentId,
+ JsonParseFlagEnum.NoParse);
+ if (getResponse.isRight()) {
+ log.debug("Couldn't fetch component unique id {}, error: {}", componentId, getResponse.right().value());
+ res = false;
+
+ }
+ if (res) {
+ GraphVertex componentVertex = getResponse.left().value();
+
+ GraphVertex toscaDataVertex = null;
+ Either<GraphVertex, JanusGraphOperationStatus> groupVertexEither = janusGraphDao.getChildVertex(componentVertex,
+ edgeLabelEnum, JsonParseFlagEnum.ParseJson);
+ if (groupVertexEither.isRight() && groupVertexEither.right().value() == JanusGraphOperationStatus.NOT_FOUND) {
+ log.debug("no child {} vertex for component unique id {}, error: {}", edgeLabelEnum, componentId,
+ groupVertexEither.right().value());
+ return true;
+ }
+ if (groupVertexEither.isRight()) {
+ res = false;
+ log.debug("failed to get child {} vertex for component unique id {}, error: {}", edgeLabelEnum,
+ componentId, groupVertexEither.right().value());
+ }
+ if (res) {
+ toscaDataVertex = groupVertexEither.left().value();
+ toscaDataVertex.setJson(groups);
+ Either<GraphVertex, JanusGraphOperationStatus> updatevertexEither = janusGraphDao.updateVertex(toscaDataVertex);
+ if (updatevertexEither.isRight()) {
+ log.debug("failed to update vertex for component unique id {}, error: {}", componentId,
+ updatevertexEither.right().value());
+ janusGraphDao.rollback();
+ return false;
+ }
+ }
+ }
+ log.debug("Fix data on graph finished: VertexTypeEnum {} EdgeLabelEnum {} res {}", vertexTypeEnum.getName(),
+ res);
+ return res;
+ }
+
+ private boolean fixServices(List<Service> serviceList) {
+ for (Service service : serviceList) {
+ log.debug("Migration1707ArtifactUuidFix fix service: id {}, name {} ", service.getUniqueId(),
+ service.getName());
+ List<ComponentInstance> instances = service.getComponentInstances();
+ for (ComponentInstance instance : instances) {
+ fixComponentInstances(service, instance);
+ }
+
+ }
+ return true;
+
+ }
+
+ private void fixComponentInstances(Service service, ComponentInstance instance) {
+ Map<String, ArtifactDefinition> artifactsMap = instance.getDeploymentArtifacts();
+ List<GroupInstance> groupsList = instance.getGroupInstances();
+ if (groupsList != null && artifactsMap != null) {
+ List<GroupInstance> groupsToDelete = new ArrayList<>();
+ for (GroupInstance group : groupsList) {
+ fixGroupInstances(service, artifactsMap, groupsToDelete, group);
+
+ }
+
+ if (!groupsToDelete.isEmpty()) {
+ log.debug("Migration1707ArtifactUuidFix delete group: resource id {}, group instance to delete {} ",
+ service.getUniqueId(), groupsToDelete);
+ groupsList.removeAll(groupsToDelete);
+
+ }
+
+ Optional<ArtifactDefinition> optionalVfModuleArtifact = artifactsMap.values().stream()
+ .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.VF_MODULES_METADATA.getType())).findAny();
+ ArtifactDefinition vfModuleArtifact;
+ if (!optionalVfModuleArtifact.isPresent()) {
+ vfModuleArtifact = createVfModuleArtifact(instance);
+ artifactsMap.put(vfModuleArtifact.getArtifactLabel(), vfModuleArtifact);
+ } else {
+ vfModuleArtifact = optionalVfModuleArtifact.get();
+ }
+ fillVfModuleInstHeatEnvPayload(service, instance, groupsList, vfModuleArtifact);
+ }
+ }
+
+ private void fixGroupInstances(Service service, Map<String, ArtifactDefinition> artifactsMap,
+ List<GroupInstance> groupsToDelete, GroupInstance group) {
+ if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)) {
+ log.debug("Migration1707ArtifactUuidFix fix group: resource id {}, group name {} ", service.getUniqueId(),
+ group.getName());
+ if (group.getArtifacts() != null) {
+ Set<String> groupArtifactsSet = new HashSet<>(group.getArtifacts());
+ if (group.getGroupInstanceArtifacts() != null) {
+ List<String> groupInsArtifacts = new ArrayList<>(group.getGroupInstanceArtifacts());
+ groupArtifactsSet.addAll(groupInsArtifacts);
+ }
+ List<String> groupArtifacts = new ArrayList<>(groupArtifactsSet);
+
+ clearGroupInstanceArtifacts(group);
+
+ for (String artifactId : groupArtifacts) {
+ fixArtifactUndergroupInstances(artifactsMap, group, groupArtifacts, artifactId);
+ }
+ }
+ if (group.getArtifacts() == null || group.getArtifacts().isEmpty()) {
+ log.debug(
+ "Migration1707ArtifactUuidFix fix groupInstance add to delete list: resource id {} name {} , group name {} ",
+ service.getUniqueId(), service.getName(), group.getName());
+ groupsToDelete.add(group);
+ }
+ }
+ }
+
+ private void clearGroupInstanceArtifacts(GroupInstance group) {
+ if (group.getArtifacts() != null) {
+ group.getArtifacts().clear();
+ } else {
+ group.setArtifacts(new ArrayList<>());
+ }
+ if (group.getArtifactsUuid() != null) {
+ group.getArtifactsUuid().clear();
+ } else {
+ group.setArtifactsUuid(new ArrayList<>());
+ }
+ if (group.getGroupInstanceArtifacts() != null) {
+ group.getGroupInstanceArtifacts().clear();
+ } else {
+ group.setGroupInstanceArtifacts(new ArrayList<>());
+ }
+ if (group.getGroupInstanceArtifactsUuid() != null) {
+ group.getGroupInstanceArtifactsUuid().clear();
+ } else {
+ group.setGroupInstanceArtifactsUuid(new ArrayList<>());
+ }
+ }
+
+ private void fixArtifactUndergroupInstances(Map<String, ArtifactDefinition> artifactsMap, GroupInstance group,
+ List<String> groupArtifacts, String artifactId) {
+ String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
+ log.debug("Migration1707ArtifactUuidFix fix group: group name {} artifactId for fix {} artifactlabel {} ",
+ group.getName(), artifactId, artifactlabel);
+ if (!artifactlabel.isEmpty() && artifactsMap.containsKey(artifactlabel)) {
+ ArtifactDefinition artifact = artifactsMap.get(artifactlabel);
+ ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifact.getArtifactType());
+ String correctArtifactId = artifact.getUniqueId();
+ String correctArtifactUUID = artifact.getArtifactUUID();
+ if (artifactType != ArtifactTypeEnum.HEAT_ENV) {
+ boolean isAddToGroup = true;
+ if (groupArtifacts.size() == 1 && artifactType == ArtifactTypeEnum.HEAT_ARTIFACT) {
+ isAddToGroup = false;
+ artifact.setArtifactType(ArtifactTypeEnum.OTHER.getType());
+ }
+ if (isAddToGroup) {
+ log.debug(
+ MIGRATION1707_ARTIFACT_UUID_FIX,
+ group.getName(), correctArtifactId, correctArtifactUUID);
+ group.getArtifacts().add(correctArtifactId);
+ if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
+ group.getArtifactsUuid().add(correctArtifactUUID);
+ }
+ }
+ } else {
+ log.debug(
+ MIGRATION1707_ARTIFACT_UUID_FIX,
+ group.getName(), correctArtifactId, correctArtifactUUID);
+ Set<String> tmpSet = new HashSet<>(group.getGroupInstanceArtifacts());
+ tmpSet.add(correctArtifactId);
+ group.setGroupInstanceArtifacts(new ArrayList<>(tmpSet));
+ if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
+ Set<String> tmpSetUUID = new HashSet<>(group.getGroupInstanceArtifactsUuid());
+ tmpSetUUID.add(correctArtifactUUID);
+ group.setGroupInstanceArtifactsUuid(new ArrayList<>(tmpSetUUID));
+ }
+ }
+ }
+ }
+
+ private boolean fixVf(List<Resource> vfLst) {
+ for (Resource resource : vfLst) {
+ log.debug("Migration1707ArtifactUuidFix fix resource: id {}, name {} ", resource.getUniqueId(),
+ resource.getName());
+ Map<String, ArtifactDefinition> artifactsMap = resource.getDeploymentArtifacts();
+ List<GroupDefinition> groupsList = resource.getGroups();
+ List<GroupDefinition> groupsToDelete = new ArrayList<>();
+ if (groupsList != null && artifactsMap != null) {
+ for (GroupDefinition group : groupsList) {
+ if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE) && group.getArtifacts() != null) {
+ fixVfGroup(resource, artifactsMap, group);
+ }
+ if (group.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)
+ && (group.getArtifacts() == null || group.getArtifacts().isEmpty())) {
+ log.debug(
+ "Migration1707ArtifactUuidFix add group to delete list fix resource: id {}, name {} ",
+ resource.getUniqueId(), resource.getName(), group.getName());
+ groupsToDelete.add(group);
+ }
+ }
+
+ if (!groupsToDelete.isEmpty()) {
+ groupsList.removeAll(groupsToDelete);
+
+ }
+ }
+
+ }
+
+ return true;
+ }
+
+ private void fixVfGroup(Resource resource, Map<String, ArtifactDefinition> artifactsMap, GroupDefinition group) {
+ log.debug("Migration1707ArtifactUuidFix fix group: resource id {}, group name {} ", resource.getUniqueId(),
+ group.getName());
+ Set<String> groupArtifactsSet = new HashSet<>(group.getArtifacts());
+ List<String> groupArtifacts = new ArrayList<>(groupArtifactsSet);
+ group.getArtifacts().clear();
+ group.getArtifactsUuid().clear();
+
+ for (String artifactId : groupArtifacts) {
+ fixArtifactUnderGroup(artifactsMap, group, groupArtifacts, artifactId);
+ }
+ }
+
+ private void fixArtifactUnderGroup(Map<String, ArtifactDefinition> artifactsMap, GroupDefinition group,
+ List<String> groupArtifacts, String artifactId) {
+
+ String artifactlabel = findArtifactLabelFromArtifactId(artifactId);
+ log.debug("Migration1707ArtifactUuidFix fix group: group name {} artifactId for fix {} artifactlabel {} ",
+ group.getName(), artifactId, artifactlabel);
+ if (!artifactlabel.isEmpty() && artifactsMap.containsKey(artifactlabel)) {
+ ArtifactDefinition artifact = artifactsMap.get(artifactlabel);
+ String correctArtifactId = artifact.getUniqueId();
+ String correctArtifactUUID = artifact.getArtifactUUID();
+ boolean isAddToGroup = true;
+ if (groupArtifacts.size() == 1) {
+ ArtifactTypeEnum artifactType = ArtifactTypeEnum.parse(artifact.getArtifactType());
+ if (artifactType == ArtifactTypeEnum.HEAT_ARTIFACT) {
+ isAddToGroup = false;
+ artifact.setArtifactType(ArtifactTypeEnum.OTHER.getType());
+ }
+ }
+ if (isAddToGroup) {
+ log.debug(
+ MIGRATION1707_ARTIFACT_UUID_FIX,
+ group.getName(), correctArtifactId, correctArtifactUUID);
+ group.getArtifacts().add(correctArtifactId);
+ if (correctArtifactUUID != null && !correctArtifactUUID.isEmpty()) {
+ group.getArtifactsUuid().add(correctArtifactUUID);
+ }
+ }
+
+ }
+ }
+
+ private String findArtifactLabelFromArtifactId(String artifactId) {
+ String artifactLabel = "";
+
+ int index = artifactId.lastIndexOf('.');
+ if (index > 0 && index + 1 < artifactId.length()) {
+ artifactLabel = artifactId.substring(index + 1);
+ }
+ return artifactLabel;
+ }
+
+ private void writeModuleResultToFile(Writer writer, org.openecomp.sdc.be.model.Component component,
+ Service service) {
+ try {
+ // "service name, service id, state, version
+ StringBuilder sb = new StringBuilder(component.getName());
+ sb.append(",").append(component.getUniqueId()).append(",").append(component.getLifecycleState()).append(",")
+ .append(component.getVersion());
+ if (service != null) {
+ sb.append(",").append(service.getName());
+ }
+ sb.append("\n");
+ writer.write(sb.toString());
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ }
+ }
+
+ private void writeModuleResultToFile(Writer writer, List<Component> components) {
+ try {
+ // "service name, service id, state, version
+ for (Component component : components) {
+ StringBuilder sb = new StringBuilder(component.getName());
+ sb.append(",").append(component.getUniqueId()).append(",").append(component.getInvariantUUID())
+ .append(",").append(component.getLifecycleState()).append(",").append(component.getVersion());
+
+ sb.append("\n");
+ writer.write(sb.toString());
+ }
+ } catch (IOException e) {
+
+ log.error(e.getMessage());
+ }
+ }
+
+ public boolean doFixTosca(Map<String, List<Component>> nodeToFix, Map<String, List<Component>> vfToFix,
+ Map<String, List<Component>> serviceToFix) {
+
+ Map<GraphPropertyEnum, Object> hasProps = new EnumMap<>(GraphPropertyEnum.class);
+ hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
+ hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+
+ Map<String, List<Component>> vertices = getVerticesToValidate(VertexTypeEnum.NODE_TYPE, hasProps);
+ validateTosca(vertices, nodeToFix, "RESOURCE_TOSCA_ARTIFACTS");//
+
+ hasProps.clear();
+ hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
+ hasProps.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.VF);
+ hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+
+ vertices = getVerticesToValidate(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps);
+ validateTosca(vertices, vfToFix, "VF_TOSCA_ARTIFACTS");
+
+ hasProps.clear();
+ hasProps.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ hasProps.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+
+ vertices = getVerticesToValidate(VertexTypeEnum.TOPOLOGY_TEMPLATE, hasProps);
+ return validateTosca(vertices, serviceToFix, "SERVICE_TOSCA_ARTIFACTS");
+ }
+
+ public Map<String, List<Component>> getVerticesToValidate(VertexTypeEnum type,
+ Map<GraphPropertyEnum, Object> hasProps) {
+
+ Map<String, List<Component>> result = new HashMap<>();
+ try {
+
+ Either<List<GraphVertex>, JanusGraphOperationStatus> resultsEither = janusGraphDao
+ .getByCriteria(type, hasProps);
+ if (resultsEither.isRight()) {
+ log.error("getVerticesToValidate failed {} ", resultsEither.right().value());
+ return result;
+ }
+ log.info("getVerticesToValidate: {} vertices to scan", resultsEither.left().value().size());
+ List<GraphVertex> componentsList = resultsEither.left().value();
+ componentsList.forEach(vertex -> {
+ String ivariantUuid = (String) vertex.getMetadataProperty(GraphPropertyEnum.INVARIANT_UUID);
+ if (!result.containsKey(ivariantUuid)) {
+ List<Component> compList = new ArrayList<>();
+ result.put(ivariantUuid, compList);
+ }
+ List<Component> compList = result.get(ivariantUuid);
+
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreArtifacts(false);
+
+ Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaElement(vertex.getUniqueId(), filter);
+ if (toscaElement.isRight()) {
+ log.error("getVerticesToValidate: failed to find element {} staus is {}", vertex.getUniqueId()
+ , toscaElement.right().value());
+ } else {
+ compList.add(toscaElement.left().value());
+ }
+ janusGraphDao.commit();
+
+ });
+
+ } catch (Exception e) {
+ log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
+
+ } finally {
+ janusGraphDao.commit();
+
+ }
+ return result;
+ }
+
+ public boolean validateTosca(Map<String, List<Component>> vertices, Map<String, List<Component>> compToFix,
+ String name) {
+ boolean result = true;
+ long time = System.currentTimeMillis();
+ String fileName = name + "_" + time + ".csv";
+ try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), UTF_8))) {
+ writer.write("name, UUID, invariantUUID, state, version\n");
+ for (Map.Entry<String, List<Component>> entry : vertices.entrySet()) {
+ List<Component> compList = entry.getValue();
+ Set<String> artifactEsId = new HashSet<>();
+ for (Component component : compList) {
+ Map<String, ArtifactDefinition> toscaArtifacts = component.getToscaArtifacts();
+ Optional<ArtifactDefinition> op = toscaArtifacts.values().stream()
+ .filter(a -> artifactEsId.contains(a.getEsId()) && a.getEsId() != null).findAny();
+ if (op.isPresent()) {
+ result = false;
+ writeModuleResultToFile(writer, compList);
+ writer.flush();
+ break;
+ } else {
+ artifactEsId.addAll(toscaArtifacts.values().stream().map(ArtifactDefinition::getEsId)
+ .collect(Collectors.toList()));
+ }
+ }
+ if (!result) {
+ List<Component> compListfull = new ArrayList<>();
+ for (Component c : compList) {
+ ComponentParametersView filter = new ComponentParametersView(true);
+ filter.setIgnoreComponentInstances(false);
+ filter.setIgnoreArtifacts(false);
+ filter.setIgnoreGroups(false);
+
+ Either<Component, StorageOperationStatus> toscaElement = toscaOperationFacade
+ .getToscaElement(c.getUniqueId(), filter);
+ if (toscaElement.isRight()) {
+ log.debug("getVerticesToValidate: failed to find element {} status is {}", c.getUniqueId(), toscaElement.right().value());
+ } else {
+ compListfull.add(toscaElement.left().value());
+ }
+ this.janusGraphDao.commit();
+ }
+
+ compToFix.put(entry.getKey(), compListfull);
+ result = true;
+ }
+
+ }
+
+ } catch (Exception e) {
+ log.info(FAILED_TO_FETCH_VF_RESOURCES, e);
+ return false;
+ } finally {
+ janusGraphDao.commit();
+ }
+ return result;
+ }
+
+ private Either<Component, ToscaError> generateToscaArtifact(Component parent) {
+ log.debug("tosca artifact generation");
+ try {
+ Map<String, ArtifactDefinition> toscaArtifacts = parent.getToscaArtifacts();
+
+ ArtifactDefinition toscaArtifact = null;
+ Optional<ArtifactDefinition> op = toscaArtifacts.values().stream()
+ .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.TOSCA_TEMPLATE.getType())).findAny();
+
+ if (op.isPresent()) {
+ toscaArtifact = op.get();
+ }
+ if (toscaArtifact != null) {
+ log.debug("Migration1707ArtifactUuidFix generateToscaPerComponent artifact name {} id {} esId {}",
+ toscaArtifact.getArtifactName(), toscaArtifact.getUniqueId(), toscaArtifact.getEsId());
+
+ Either<ToscaRepresentation, ToscaError> exportComponent = toscaExportUtils.exportComponent(parent);
+ if (exportComponent.isRight()) {
+ log.debug("Failed export tosca yaml for component {} error {}", parent.getUniqueId(),
+ exportComponent.right().value());
+
+ return Either.right(exportComponent.right().value());
+ }
+ log.debug("Tosca yaml exported for component {} ", parent.getUniqueId());
+
+ toscaArtifact.setPayload(exportComponent.left().value().getMainYaml());
+ byte[] decodedPayload = toscaArtifact.getPayloadData();
+
+ String uniqueId = UniqueIdBuilder.buildPropertyUniqueId(parent.getUniqueId(),
+ toscaArtifact.getArtifactLabel());
+ toscaArtifact.setUniqueId(uniqueId);
+ toscaArtifact.setEsId(toscaArtifact.getUniqueId());
+
+ toscaArtifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(decodedPayload));
+ DAOArtifactData artifactData = new DAOArtifactData(toscaArtifact.getEsId(), decodedPayload);
+ artifactCassandraDao.saveArtifact(artifactData);
+
+ log.debug("Tosca yaml artifact esId {} ", toscaArtifact.getEsId());
+ }
+ ArtifactDefinition csarArtifact = null;
+ op = toscaArtifacts.values().stream()
+ .filter(p -> p.getArtifactType().equals(ArtifactTypeEnum.TOSCA_CSAR.getType())).findAny();
+
+ if (op.isPresent()) {
+ csarArtifact = op.get();
+ }
+
+ if (csarArtifact != null) {
+ Either<byte[], ResponseFormat> generated = csarUtils.createCsar(parent, true, true);
+
+ if (generated.isRight()) {
+ log.debug("Failed to export tosca csar for component {} error {}", parent.getUniqueId(),
+ generated.right().value());
+
+ return Either.right(ToscaError.GENERAL_ERROR);
+ }
+ byte[] value = generated.left().value();
+ csarArtifact.setPayload(value);
+ byte[] decodedPayload = csarArtifact.getPayloadData();
+
+ String uniqueId = UniqueIdBuilder.buildPropertyUniqueId(parent.getUniqueId(),
+ csarArtifact.getArtifactLabel());
+ csarArtifact.setUniqueId(uniqueId);
+ csarArtifact.setEsId(csarArtifact.getUniqueId());
+
+ csarArtifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(decodedPayload));
+ DAOArtifactData artifactData = new DAOArtifactData(csarArtifact.getEsId(), decodedPayload);
+ artifactCassandraDao.saveArtifact(artifactData);
+ log.debug("Tosca csar artifact esId {} ", csarArtifact.getEsId());
+
+ }
+
+ } catch (Exception ex) {
+ log.error("Failed to generate tosca atifact component id {} component name {} error {}",
+ parent.getUniqueId(), parent.getName(), ex.getMessage());
+
+ return Either.right(ToscaError.GENERAL_ERROR);
+ }
+
+ return Either.left(parent);
+ }
+
+ private ArtifactDefinition createVfModuleArtifact(ComponentInstance currVF) {
+
+ ArtifactDefinition vfModuleArtifactDefinition = new ArtifactDefinition();
+
+ vfModuleArtifactDefinition.setDescription("Auto-generated VF Modules information artifact");
+ vfModuleArtifactDefinition.setArtifactDisplayName("Vf Modules Metadata");
+ vfModuleArtifactDefinition.setArtifactType(ArtifactTypeEnum.VF_MODULES_METADATA.getType());
+ vfModuleArtifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
+ vfModuleArtifactDefinition.setArtifactLabel("vfModulesMetadata");
+ vfModuleArtifactDefinition.setTimeout(0);
+ vfModuleArtifactDefinition.setArtifactName(currVF.getNormalizedName() + "_modules.json");
+
+ return vfModuleArtifactDefinition;
+ }
+
+
+ private void fillVfModuleInstHeatEnvPayload(Component parent, ComponentInstance instance, List<GroupInstance> groupsForCurrVF,
+ ArtifactDefinition vfModuleArtifact) {
+ log.debug("generate new vf module for component. name {}, id {}, Version {}", instance.getName(), instance.getUniqueId());
+
+ String uniqueId = UniqueIdBuilder
+ .buildInstanceArtifactUniqueId(parent.getUniqueId(), instance.getUniqueId(), vfModuleArtifact.getArtifactLabel());
- vfModuleArtifact.setUniqueId(uniqueId);
- vfModuleArtifact.setEsId(vfModuleArtifact.getUniqueId());
-
- List<VfModuleArtifactPayload> vfModulePayloadForCurrVF = new ArrayList<>();
- if (groupsForCurrVF != null) {
- for (GroupInstance groupInstance : groupsForCurrVF) {
- VfModuleArtifactPayload modulePayload = new VfModuleArtifactPayload(groupInstance);
- vfModulePayloadForCurrVF.add(modulePayload);
- }
- Collections.sort(vfModulePayloadForCurrVF,
- (art1, art2) -> VfModuleArtifactPayload.compareByGroupName(art1, art2));
+ vfModuleArtifact.setUniqueId(uniqueId);
+ vfModuleArtifact.setEsId(vfModuleArtifact.getUniqueId());
+
+ List<VfModuleArtifactPayload> vfModulePayloadForCurrVF = new ArrayList<>();
+ if (groupsForCurrVF != null) {
+ for (GroupInstance groupInstance : groupsForCurrVF) {
+ VfModuleArtifactPayload modulePayload = new VfModuleArtifactPayload(groupInstance);
+ vfModulePayloadForCurrVF.add(modulePayload);
+ }
+ Collections.sort(vfModulePayloadForCurrVF,
+ (art1, art2) -> VfModuleArtifactPayload.compareByGroupName(art1, art2));
- final Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ final Gson gson = new GsonBuilder().setPrettyPrinting().create();
- String vfModulePayloadString = gson.toJson(vfModulePayloadForCurrVF);
- log.debug("vfModulePayloadString {}", vfModulePayloadString);
- if (vfModulePayloadString != null) {
- String newCheckSum = GeneralUtility
- .calculateMD5Base64EncodedByByteArray(vfModulePayloadString.getBytes());
- vfModuleArtifact.setArtifactChecksum(newCheckSum);
+ String vfModulePayloadString = gson.toJson(vfModulePayloadForCurrVF);
+ log.debug("vfModulePayloadString {}", vfModulePayloadString);
+ if (vfModulePayloadString != null) {
+ String newCheckSum = GeneralUtility
+ .calculateMD5Base64EncodedByByteArray(vfModulePayloadString.getBytes());
+ vfModuleArtifact.setArtifactChecksum(newCheckSum);
- DAOArtifactData artifactData = new DAOArtifactData(vfModuleArtifact.getEsId(),
- vfModulePayloadString.getBytes());
- artifactCassandraDao.saveArtifact(artifactData);
+ DAOArtifactData artifactData = new DAOArtifactData(vfModuleArtifact.getEsId(),
+ vfModulePayloadString.getBytes());
+ artifactCassandraDao.saveArtifact(artifactData);
- }
+ }
- }
+ }
- }
+ }
- private Either<List<VfModuleArtifactPayloadEx>, StorageOperationStatus> parseVFModuleJson(ArtifactDefinition vfModuleArtifact) {
- log.info("Try to get vfModule json from cassandra {}", vfModuleArtifact.getEsId());
- Either<DAOArtifactData, CassandraOperationStatus> vfModuleData = artifactCassandraDao.getArtifact(vfModuleArtifact.getEsId());
+ private Either<List<VfModuleArtifactPayloadEx>, StorageOperationStatus> parseVFModuleJson(ArtifactDefinition vfModuleArtifact) {
+ log.info("Try to get vfModule json from cassandra {}", vfModuleArtifact.getEsId());
+ Either<DAOArtifactData, CassandraOperationStatus> vfModuleData = artifactCassandraDao.getArtifact(vfModuleArtifact.getEsId());
- if (vfModuleData.isRight()) {
- CassandraOperationStatus resourceUploadStatus = vfModuleData.right().value();
- StorageOperationStatus storageResponse = DaoStatusConverter.convertCassandraStatusToStorageStatus(resourceUploadStatus);
- log.error("failed to fetch vfModule json {} from cassandra. Status is {}", vfModuleArtifact.getEsId(), storageResponse);
- return Either.right(storageResponse);
+ if (vfModuleData.isRight()) {
+ CassandraOperationStatus resourceUploadStatus = vfModuleData.right().value();
+ StorageOperationStatus storageResponse = DaoStatusConverter.convertCassandraStatusToStorageStatus(resourceUploadStatus);
+ log.error("failed to fetch vfModule json {} from cassandra. Status is {}", vfModuleArtifact.getEsId(), storageResponse);
+ return Either.right(storageResponse);
- }
+ }
- DAOArtifactData DAOArtifactData = vfModuleData.left().value();
- String gsonData = new String( DAOArtifactData.getDataAsArray());
- final Gson gson = new GsonBuilder().setPrettyPrinting().create();
- JsonArray jsonElement = new JsonArray();
- jsonElement = gson.fromJson(gsonData, jsonElement.getClass());
- List<VfModuleArtifactPayloadEx> vfModules = new ArrayList<>();
- jsonElement.forEach(je ->{
- VfModuleArtifactPayloadEx vfModule = ComponentsUtils.parseJsonToObject(je.toString(), VfModuleArtifactPayloadEx.class);
- vfModules.add(vfModule);
- });
+ DAOArtifactData daoArtifactData = vfModuleData.left().value();
+ String gsonData = new String(daoArtifactData.getDataAsArray());
+ final Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ JsonArray jsonElement = new JsonArray();
+ jsonElement = gson.fromJson(gsonData, jsonElement.getClass());
+ List<VfModuleArtifactPayloadEx> vfModules = new ArrayList<>();
+ jsonElement.forEach(je -> {
+ VfModuleArtifactPayloadEx vfModule = ComponentsUtils.parseJsonToObject(je.toString(), VfModuleArtifactPayloadEx.class);
+ vfModules.add(vfModule);
+ });
- log.debug ("parse vf module finish {}", gsonData);
- return Either.left(vfModules);
+ log.debug("parse vf module finish {}", gsonData);
+ return Either.left(vfModules);
- }
+ }
}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
index 6c5ffb7be6..751801f4f2 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,6 +19,15 @@
*/
package org.openecomp.sdc.asdctool.impl.internal.tool;
+import java.io.IOException;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Scanner;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
import org.openecomp.sdc.asdctool.utils.ConsoleWriter;
import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
@@ -40,20 +49,9 @@ import org.openecomp.sdc.be.tosca.CsarUtils;
import org.openecomp.sdc.be.tosca.ToscaExportHandler;
import org.openecomp.sdc.be.tosca.ToscaRepresentation;
import org.openecomp.sdc.common.api.ArtifactTypeEnum;
-import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.common.util.GeneralUtility;
import org.springframework.beans.factory.annotation.Autowired;
-import java.io.IOException;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Scanner;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-
@org.springframework.stereotype.Component("csarGenerator")
public class CsarGenerator extends CommonInternalTool {
@@ -65,8 +63,8 @@ public class CsarGenerator extends CommonInternalTool {
@Autowired
public CsarGenerator(JanusGraphDao janusGraphDao, CsarUtils csarUtils,
- ToscaOperationFacade toscaOperationFacade,
- ArtifactCassandraDao artifactCassandraDao, ToscaExportHandler toscaExportHandler) {
+ ToscaOperationFacade toscaOperationFacade,
+ ArtifactCassandraDao artifactCassandraDao, ToscaExportHandler toscaExportHandler) {
super("generate");
this.janusGraphDao = janusGraphDao;
this.csarUtils = csarUtils;
@@ -75,8 +73,6 @@ public class CsarGenerator extends CommonInternalTool {
this.toscaExportHandler = toscaExportHandler;
}
- private static Logger log = Logger.getLogger(CsarGenerator.class.getName());
-
public void generateCsar(String uuid, Scanner scanner) {
JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
@@ -98,7 +94,7 @@ public class CsarGenerator extends CommonInternalTool {
ConsoleWriter.dataLine("\nGenerate CSAR (yes/no)?");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("yes")) {
-
+
status = handleService(metadataV, uuid);
}
}
@@ -119,47 +115,51 @@ public class CsarGenerator extends CommonInternalTool {
Supplier<byte[]> supplier = () -> generateToscaPayload(component);
generateArtifact(component, ArtifactTypeEnum.TOSCA_TEMPLATE, supplier);
-
+
supplier = () -> generateCsarPayload(component);
generateArtifact(component, ArtifactTypeEnum.TOSCA_CSAR, supplier);
-
+
GraphVertex toscaArtifactV = janusGraphDao
- .getChildVertex(metadataV, EdgeLabelEnum.TOSCA_ARTIFACTS, JsonParseFlagEnum.ParseJson).either(l->l, r->null);
- if ( toscaArtifactV != null ){
- Map<String, ArtifactDataDefinition> copy = component.getToscaArtifacts().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue())));
+ .getChildVertex(metadataV, EdgeLabelEnum.TOSCA_ARTIFACTS, JsonParseFlagEnum.ParseJson).either(l -> l, r -> null);
+ if (toscaArtifactV != null) {
+ Map<String, ArtifactDataDefinition> copy = component.getToscaArtifacts().entrySet().stream()
+ .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue())));
toscaArtifactV.setJson(copy);
janusGraphDao.updateVertex(toscaArtifactV);
}
-
+
} else {
ConsoleWriter.dataLine("Failed to fetch certified service with UUID ", uuid);
}
return status;
}
- private JanusGraphOperationStatus generateArtifact(Component component, ArtifactTypeEnum artifactType, Supplier<byte[]> supplier){
+ private JanusGraphOperationStatus generateArtifact(Component component, ArtifactTypeEnum artifactType, Supplier<byte[]> supplier) {
JanusGraphOperationStatus status = JanusGraphOperationStatus.GENERAL_ERROR;
ArtifactDefinition csarArtifact;
- Optional<ArtifactDefinition> op = component.getToscaArtifacts().values().stream().filter(p -> p.getArtifactType().equals(artifactType.getType())).findAny();
+ Optional<ArtifactDefinition> op = component.getToscaArtifacts().values().stream()
+ .filter(p -> p.getArtifactType().equals(artifactType.getType())).findAny();
if (op.isPresent()) {
csarArtifact = op.get();
-
+
status = savePayload(component, csarArtifact, supplier);
}
return status;
}
-
+
private byte[] generateCsarPayload(org.openecomp.sdc.be.model.Component component) {
- return csarUtils.createCsar(component, true, true).either( l -> l, r -> null);
+ return csarUtils.createCsar(component, true, true).either(l -> l, r -> null);
}
- private byte[] generateToscaPayload(Component component){
- return toscaExportHandler.exportComponent(component).either(ToscaRepresentation::getMainYaml, r -> null);
+
+ private byte[] generateToscaPayload(Component component) {
+ return toscaExportHandler.exportComponent(component).either(ToscaRepresentation::getMainYaml, r -> null);
}
- private JanusGraphOperationStatus savePayload(org.openecomp.sdc.be.model.Component component, ArtifactDefinition csarArtifact, Supplier<byte[]> supplier) {
+ private JanusGraphOperationStatus savePayload(org.openecomp.sdc.be.model.Component component, ArtifactDefinition csarArtifact,
+ Supplier<byte[]> supplier) {
byte[] payload = supplier.get();
- if ( payload == null ) {
+ if (payload == null) {
ConsoleWriter.dataLine("create artifact failed ", csarArtifact.getArtifactLabel());
return JanusGraphOperationStatus.GENERAL_ERROR;
}
@@ -170,10 +170,9 @@ public class CsarGenerator extends CommonInternalTool {
String uniqueId = UniqueIdBuilder.buildPropertyUniqueId(component.getUniqueId(), csarArtifact.getArtifactLabel());
csarArtifact.setUniqueId(uniqueId);
csarArtifact.setEsId(csarArtifact.getUniqueId());
-
+
ConsoleWriter.dataLine("create artifact unique id ", uniqueId);
-
-
+
csarArtifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(decodedPayload));
DAOArtifactData artifactData = new DAOArtifactData(csarArtifact.getEsId(), decodedPayload);
artifactCassandraDao.saveArtifact(artifactData);
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/validator/utils/ValidationTaskResult.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/validator/utils/ValidationTaskResult.java
deleted file mode 100644
index 2dcc0ae4db..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/validator/utils/ValidationTaskResult.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.impl.validator.utils;
-
-import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
-
-/**
- * Created by chaya on 7/5/2017.
- */
-public class ValidationTaskResult {
- public ValidationTaskResult(GraphVertex vertex, String name, String resultMessage, boolean isSuccessful) {
- this.vertexScanned = vertex;
- this.name = name;
- this.resultMessage = resultMessage;
- this.isSuccessful = isSuccessful;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getResultMessage() {
- return resultMessage;
- }
-
- public void setResultMessage(String resultMessage) {
- this.resultMessage = resultMessage;
- }
-
- public boolean isSuccessful() {
- return isSuccessful;
- }
-
- public void setSuccessful(boolean successful) {
- isSuccessful = successful;
- }
-
- private String name;
- private String resultMessage;
- private boolean isSuccessful;
- private GraphVertex vertexScanned;
-}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/DeleteComponentTool.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/DeleteComponentTool.java
index 309d23ca14..77b21fdf0c 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/DeleteComponentTool.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/DeleteComponentTool.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,16 +20,14 @@
package org.openecomp.sdc.asdctool.main;
+import java.util.Scanner;
import org.openecomp.sdc.asdctool.configuration.ConfigurationUploader;
import org.openecomp.sdc.asdctool.configuration.InternalToolConfiguration;
import org.openecomp.sdc.asdctool.impl.internal.tool.DeleteComponentHandler;
import org.openecomp.sdc.asdctool.utils.ConsoleWriter;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import java.util.Scanner;
-
-public class DeleteComponentTool extends SdcInternalTool{
- private static final String PSW = "ItIsTimeToDelete";
+public class DeleteComponentTool extends SdcInternalTool {
public static void main(String[] args) {
if (args == null || args.length < 2) {
@@ -37,8 +35,7 @@ public class DeleteComponentTool extends SdcInternalTool{
System.exit(1);
}
String appConfigDir = args[0];
- String password = args[1];
-
+
disableConsole();
ConsoleWriter.dataLine("STARTED... ");
@@ -46,7 +43,6 @@ public class DeleteComponentTool extends SdcInternalTool{
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InternalToolConfiguration.class);
DeleteComponentHandler deleteComponentHandler = context.getBean(DeleteComponentHandler.class);
-
String input = "";
Scanner scanner = new Scanner(System.in);
do {
@@ -54,9 +50,9 @@ public class DeleteComponentTool extends SdcInternalTool{
input = scanner.nextLine();
if (!input.equals("exit")) {
if (!input.isEmpty()) {
- ConsoleWriter.dataLine("Your id is " ,input);
+ ConsoleWriter.dataLine("Your id is ", input);
deleteComponentHandler.deleteComponent(input, scanner);
- }else{
+ } else {
ConsoleWriter.dataLine("Your id is empty. Try again.");
}
}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/ValidationTool.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/ValidationTool.java
index e5cd6f8c14..e68c9dd5af 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/ValidationTool.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/ValidationTool.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -32,7 +32,6 @@ import org.openecomp.sdc.asdctool.impl.validator.report.ReportFile.CSVFile;
import org.openecomp.sdc.asdctool.impl.validator.report.ReportFile.TXTFile;
import org.openecomp.sdc.asdctool.impl.validator.report.ReportFileWriter;
import org.openecomp.sdc.be.config.ConfigurationManager;
-import org.openecomp.sdc.common.api.ConfigurationSource;
import org.openecomp.sdc.common.impl.ExternalConfiguration;
import org.openecomp.sdc.common.impl.FSConfigurationSource;
import org.openecomp.sdc.common.log.wrappers.Logger;
@@ -76,8 +75,7 @@ public class ValidationTool {
}
private static AnnotationConfigApplicationContext initContext(String appConfigDir) {
- ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
- ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
+ new ConfigurationManager(new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir));
return new AnnotationConfigApplicationContext(ValidationToolConfiguration.class);
}
}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/InstanceMigrationBase.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/InstanceMigrationBase.java
deleted file mode 100644
index 5876898d7e..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/InstanceMigrationBase.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.migration.tasks;
-
-import fj.data.Either;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.janusgraph.core.JanusGraphVertex;
-import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
-import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
-import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
-import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.EdgePropertyEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
-import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
-import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public abstract class InstanceMigrationBase {
-
- private static final Logger log = LoggerFactory.getLogger(InstanceMigrationBase.class);
- protected JanusGraphDao janusGraphDao;
-
- public InstanceMigrationBase(JanusGraphDao janusGraphDao) {
- this.janusGraphDao = janusGraphDao;
- }
-
- protected StorageOperationStatus upgradeTopologyTemplates() {
- Map<GraphPropertyEnum, Object> hasNotProps = new EnumMap<>(GraphPropertyEnum.class);
- hasNotProps.put(GraphPropertyEnum.IS_DELETED, true);
- hasNotProps.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.CVFC);
-
- return janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, null, hasNotProps, JsonParseFlagEnum.ParseAll)
- .either(this::proceed, this::handleError);
- }
-
- protected abstract StorageOperationStatus handleOneContainer(GraphVertex containerV);
-
- protected StorageOperationStatus proceed(List<GraphVertex> containersV) {
- int failureCounter = 0;
- log.info("found {} vertices to migrate ", containersV.size());
- for (GraphVertex container : containersV) {
- StorageOperationStatus storageOperationStatus = handleOneContainer(container);
- if (storageOperationStatus != StorageOperationStatus.OK) {
- failureCounter++;
- }
- }
-
- if (failureCounter > 0) {
- log.info("Failed to update {} vertices", failureCounter);
- } else {
- log.info("All vertices were successfully updated");
- }
-
- return StorageOperationStatus.OK;
- }
-
- protected GraphVertex getVertexById(String vertexId) {
- Either<GraphVertex, JanusGraphOperationStatus> vertexById = janusGraphDao.getVertexById(vertexId);
- if (vertexById.isRight()) {
- log.info("Exception occurred while query vertexId: {} exception: {} " + vertexId + vertexById.right().value());
- return null;
- }
- else return vertexById.left().value();
- }
-
- protected StorageOperationStatus updateVertexAndCommit(GraphVertex graphVertex) {
- StorageOperationStatus status;
- if ((status = janusGraphDao.updateVertex(graphVertex)
- .either(v -> StorageOperationStatus.OK, this::handleError)) != StorageOperationStatus.OK) {
- return status;
- }
- return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(janusGraphDao.commit());
- }
-
- protected StorageOperationStatus handleError(JanusGraphOperationStatus err) {
- return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(JanusGraphOperationStatus.NOT_FOUND == err ? JanusGraphOperationStatus.OK : err);
- }
-
- protected void removeEdges(Iterator<Edge> edges) {
-
- while (edges.hasNext()) {
- Edge edge = edges.next();
- edge.remove();
- }
- }
-
- protected void removeEdgesInState(Iterator<Edge> edges, String state) {
-
- while (edges.hasNext()) {
- Edge edge = edges.next();
- String edgeState = (String) janusGraphDao.getProperty(edge, EdgePropertyEnum.STATE);
- if (edgeState.equals(state)) {
- edge.remove();
- }
- }
- }
-
-
- protected void updateEdgeProperty(EdgePropertyEnum property, String value, Iterator<Edge> edges) throws IOException {
- while (edges.hasNext()) {
- Edge edge = edges.next();
- Map<EdgePropertyEnum, Object> prop = new HashMap<>();
- prop.put(property, value);
- janusGraphDao.setEdgeProperties(edge, prop);
- }
-
- }
-
-
- // check if user has both edges state and last_state
- protected boolean sameUser(List<JanusGraphVertex> stateList, List<JanusGraphVertex> lastStateList) {
-
- for (JanusGraphVertex lsVertex : lastStateList) {
- String idLs = (String) janusGraphDao.getProperty(lsVertex, GraphPropertyEnum.USERID.getProperty());
- String idSt = (String) janusGraphDao.getProperty(stateList.get(0), GraphPropertyEnum.USERID.getProperty());
- if (idLs.equals(idSt)) {
- return true;
- }
- }
- return false;
- }
-
- protected Iterator<Edge> getVertexEdge(GraphVertex containerV, Direction direction, EdgeLabelEnum edgeLabel) {
- return containerV.getVertex().edges(direction, edgeLabel.name());
- }
-
- public enum EdgeSide {
- IN, OUT;
- }
-}
-
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/handlers/OutputHandler.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/handlers/OutputHandler.java
index b6dc27ff04..f7474ee4eb 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/handlers/OutputHandler.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/handlers/OutputHandler.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,8 +22,10 @@ package org.openecomp.sdc.asdctool.migration.tasks.handlers;
public interface OutputHandler {
- public void initiate(String name, Object... title);
- public void addRecord(Object... record);
- public boolean writeOutputAndCloseFile();
-
+ void initiate(String name, Object... title);
+
+ void addRecord(Object... record);
+
+ boolean writeOutputAndCloseFile();
+
}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1710/UpgradeMigration1710.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1710/UpgradeMigration1710.java
deleted file mode 100644
index 8eda8640c6..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1710/UpgradeMigration1710.java
+++ /dev/null
@@ -1,1190 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.migration.tasks.mig1710;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import fj.data.Either;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.openecomp.sdc.asdctool.enums.LifecycleStateEnum;
-import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
-import org.openecomp.sdc.asdctool.migration.core.task.PostMigration;
-import org.openecomp.sdc.asdctool.migration.tasks.handlers.XlsOutputHandler;
-import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
-import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
-import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
-import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
-import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
-import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
-import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
-import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
-import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction.LifecycleChanceActionEnum;
-import org.openecomp.sdc.be.components.scheduledtasks.ComponentsCleanBusinessLogic;
-import org.openecomp.sdc.be.config.Configuration;
-import org.openecomp.sdc.be.config.ConfigurationManager;
-import org.openecomp.sdc.be.dao.api.ActionStatus;
-import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
-import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
-import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
-import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
-import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
-import org.openecomp.sdc.be.impl.ComponentsUtils;
-import org.openecomp.sdc.be.model.ComponentInstance;
-import org.openecomp.sdc.be.model.ComponentInstanceProperty;
-import org.openecomp.sdc.be.model.ComponentParametersView;
-import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
-import org.openecomp.sdc.be.model.Resource;
-import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
-import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter;
-import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.be.model.operations.impl.CsarOperation;
-import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
-import org.openecomp.sdc.be.model.operations.impl.UserAdminOperation;
-import org.openecomp.sdc.common.log.wrappers.Logger;
-import org.openecomp.sdc.exception.ResponseFormat;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-@Component
-public class UpgradeMigration1710 implements PostMigration {
-
- private static final String SERVICE_UUID_RPOPERTY = "providing_service_uuid";
-
- private static final String SERVICE_INVARIANT_UUID_RPOPERTY = "providing_service_invariant_uuid";
-
- private static final String UNKNOWN = "UNKNOWN";
-
- private static final String CHECKOUT_MESSAGE = "checkout upon upgrade migration";
-
- private static final String FAILED_TO_CHANGE_STATE_OF_COMPONENT = "Failed to change state of component with name {}, invariantUUID {}, version {} to {}. ";
-
- private static final String FAILED_TO_UPGRADE_COMPONENT = "Failed to upgrade {} with name {}, invariantUUID {}, version {}. Operation {}. The reason for failure: {}. ";
-
- private static final String UPGRADE_COMPONENT_SUCCEEDED = "Upgrade of {} with name {}, invariantUUID {}, version {} finished successfully. ";
-
- private static final String UPGRADE_VFS_FAILED = "Upgrade VFs upon upgrade migration 1710 process failed. ";
-
- private static final Logger log = Logger.getLogger(UpgradeMigration1710.class);
-
- private static final String ALLOTTED_RESOURCE_NAME = "Allotted Resource";
-
- //as per US 397775, only node type upgrade should be enabled,
- // to support resource and service upgrade, this flag should be reverted
- private boolean isNodeTypesSupportOnly = true;
-
- @Autowired
- private JanusGraphDao janusGraphDao;
-
- @Autowired
- private ToscaOperationFacade toscaOperationFacade;
-
- @Autowired
- private LifecycleBusinessLogic lifecycleBusinessLogic;
-
- @Autowired
- private UserAdminOperation userAdminOperation;
-
- @Autowired
- private ResourceBusinessLogic resourceBusinessLogic;
-
- @Autowired
- private ServiceBusinessLogic serviceBusinessLogic;
-
- @Autowired
- private CsarOperation csarOperation;
-
- @Autowired
- private ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
-
- @Autowired
- private ComponentsUtils componentsUtils;
-
- @Autowired
- private ComponentsCleanBusinessLogic componentsCleanBusinessLogic;
-
- private XlsOutputHandler outputHandler = new XlsOutputHandler(null, "UpgradeMigration1710report","COMPONENT TYPE", "COMPONENT NAME", "COMPONENT UUID", "COMPONENT UNIQUE_ID", "UPGRADE STATUS", "DESCRIPTION");
-
- private User user = null;
-
- private final LifecycleChangeInfoWithAction changeInfo = new LifecycleChangeInfoWithAction(CHECKOUT_MESSAGE, LifecycleChanceActionEnum.UPGRADE_MIGRATION);
-
- private final Map<String, GraphVertex> latestGenericTypes = new HashMap<>();
-
- private final Map<String, String> latestOriginResourceVersions = new HashMap<>();
-
- private final Map<String, org.openecomp.sdc.be.model.Component> upgradedNodeTypesMap = new HashMap<>();
-
- private List<String> nodeTypes;
-
- private List<String> proxyServiceContainers = new ArrayList<>();
-
- private List<String> vfAllottedResources = new ArrayList<>();
-
- private List<String> allottedVfContainers = new ArrayList<>();
-
- private boolean isVfcUpgradeRequired = false;
-
- private boolean skipIfUpgradeVfFailed = true;
-
- private boolean isAllottedAndProxySupported = true;
-
- private String userId;
-
- private boolean isCleanupLocked = false;
-
- private int markedAsDeletedResourcesCnt = 0;
-
- private int markedAsDeletedServicesCnt = 0;
-
- //how many components can be deleted once
- private int maxDeleteComponents = 10;
-
- private boolean enableAutoHealing = true;
-
- //map for tracing checked out resources that keep in place after upgrade failure
- private HashMap<String, String> certifiedToNextCheckedOutUniqueId = new HashMap<>();
-
- private int deleteLockTimeoutInSeconds = 60;
-
- private boolean isLockSucceeded = false;
-
- /***********************************************/
-
- @VisibleForTesting
- void setNodeTypesSupportOnly(boolean nodeTypesSupportOnly) {
- isNodeTypesSupportOnly = nodeTypesSupportOnly;
- }
-
- @VisibleForTesting
- void setUser(User user) {
- this.user = user;
- }
-
- @VisibleForTesting
- void setMarkedAsDeletedResourcesCnt(int markedAsDeletedResourcesCnt) {
- this.markedAsDeletedResourcesCnt = markedAsDeletedResourcesCnt;
- }
-
- @VisibleForTesting
- void setMarkedAsDeletedServicesCnt(int markedAsDeletedServicesCnt) {
- this.markedAsDeletedServicesCnt = markedAsDeletedServicesCnt;
- }
-
- @PostConstruct
- void init() {
- Configuration config = ConfigurationManager.getConfigurationManager().getConfiguration();
- isVfcUpgradeRequired = !config.getSkipUpgradeVSPsFlag();
- skipIfUpgradeVfFailed = config.getSkipUpgradeFailedVfs();
- isAllottedAndProxySupported = config.getSupportAllottedResourcesAndProxyFlag();
- deleteLockTimeoutInSeconds = config.getDeleteLockTimeoutInSeconds();
- maxDeleteComponents = config.getMaxDeleteComponents();
-
- String toscaConformanceLevel = config.getToscaConformanceLevel();
- Map<String, List<String>> resourcesForUpgrade = config.getResourcesForUpgrade();
- nodeTypes = resourcesForUpgrade.get(toscaConformanceLevel);
- enableAutoHealing = config.isEnableAutoHealing();
- userId = config.getAutoHealingOwner();
- isNodeTypesSupportOnly = true;
- }
-
- @Override
- public String description() {
- return "Upgrade migration 1710 - post migration task, which is dedicated to upgrade all latest certified (and not checked out) Node types, VFs and Services. ";
- }
-
- enum UpgradeStatus {
- UPGRADED,
- UPGRADED_AS_INSTANCE,
- NOT_UPGRADED
- }
-
- @Override
- public MigrationResult migrate() {
- MigrationResult migrationResult = new MigrationResult();
- //stop the upgrade if this ask is disabled
- if (!enableAutoHealing) {
- log.warn("Upgrade migration 1710 task is disabled");
- migrationResult.setMigrationStatus(MigrationResult.MigrationStatus.COMPLETED);
- return migrationResult ;
- }
- log.info("Starting upgrade migration 1710 process. ");
- boolean result = true;
-
- try {
- //lock cleanup node to avoid BE to delete marked components
- //while the auto-healing process is running
- isLockSucceeded = isNodeTypesSupportOnly ? true : isLockDeleteOperationSucceeded();
-
- if (!isLockSucceeded) {
- result = false;
- log.error("Cleanup node can't be locked. Upgrade migration failed");
- }
- else {
- Either<User, ActionStatus> userReq = userAdminOperation.getUserData(userId, false);
- if (userReq.isRight()) {
- result = false;
- log.error("Upgrade migration failed. User {} resolve failed: {} ", userId, userReq.right().value());
- } else {
- user = userReq.left().value();
- log.info("User {} will perform upgrade operation", user.getUserId());
- }
- }
- if (result) {
- result = upgradeNodeTypes();
- }
- if (!isNodeTypesSupportOnly && result) {
- result = upgradeTopologyTemplates();
- }
- }
- catch (Exception e) {
- result = false;
- log.error("Error occurred during the migration: ", e);
- } finally {
- MigrationResult.MigrationStatus status = result ?
- MigrationResult.MigrationStatus.COMPLETED : MigrationResult.MigrationStatus.FAILED;
- cleanup(status);
- migrationResult.setMigrationStatus(status);
- }
- return migrationResult;
- }
-
- private boolean upgradeTopologyTemplates() {
- if (upgradeVFs()) {
- upgradeServices();
- upgradeProxyServiceContainers();
- upgradeAllottedVFs();
- upgradeAllottedVfContainers();
- return true;
- }
- return false;
- }
-
- private void cleanup(MigrationResult.MigrationStatus status) {
- if (status == MigrationResult.MigrationStatus.COMPLETED ) {
- log.info("Upgrade migration 1710 has been successfully finished. ");
- janusGraphDao.commit();
- } else {
- log.info("Upgrade migration 1710 was failed. ");
- janusGraphDao.rollback();
- }
- outputHandler.writeOutputAndCloseFile();
- if (!isNodeTypesSupportOnly && isLockSucceeded) {
- //delete rest of components if their upgrade failed
- markedAsDeletedResourcesCnt = maxDeleteComponents;
- deleteResourcesIfLimitIsReached();
- markedAsDeletedServicesCnt = maxDeleteComponents;
- deleteServicesIfLimitIsReached();
- unlockDeleteOperation();
- }
- }
-
- void upgradeServices(List<String> uniqueIDs, Predicate<org.openecomp.sdc.be.model.Component> shouldUpgrade, final String containerName) {
- log.info("Starting upgrade {} upon upgrade migration 1710 process. ", containerName);
- for (String currUid : uniqueIDs) {
- upgradeServiceAndCommitIfNeeded(currUid, shouldUpgrade);
- }
- log.info("Upgrade {} upon upgrade migration 1710 process is finished. ", containerName);
- }
-
- private void upgradeServiceAndCommitIfNeeded(String currUid, Predicate<org.openecomp.sdc.be.model.Component> shouldUpgrade) {
- boolean result = true;
- try {
- result = handleService(currUid, shouldUpgrade);
- } catch (Exception e) {
- result = false;
- log.error("Failed to upgrade service with uniqueId {} due to a reason {}. ", currUid, e.getMessage());
- log.debug("Failed to upgrade service with uniqueId {}", currUid, e);
- }
- finally {
- if (result) {
- log.info("Service upgrade finished successfully: uniqueId {} ", currUid);
- janusGraphDao.commit();
- }
- else {
- log.error("Failed to upgrade service with uniqueId {} ", currUid);
- janusGraphDao.rollback();
- }
- markCheckedOutServiceAsDeletedIfUpgradeFailed(currUid, result);
- }
- }
-
- private void upgradeAllottedVfContainers() {
- upgradeServices(allottedVfContainers, component -> true, "proxy " + allottedVfContainers.size() + " service containers");
- }
-
- private void upgradeServices() {
- Either<List<String>, JanusGraphOperationStatus> getServicesRes = getAllLatestCertifiedComponentUids(VertexTypeEnum.TOPOLOGY_TEMPLATE, ComponentTypeEnum.SERVICE);
- if (getServicesRes.isRight()) {
- log.error("Failed to retrieve the latest certified service versions");
- return;
- }
- upgradeServices(getServicesRes.left().value(), this::shouldUpgrade, "services");
- }
-
- private void upgradeProxyServiceContainers() {
- upgradeServices(proxyServiceContainers, component -> true, "proxy service containers");
- }
-
- private boolean handleService(String uniqueId, Predicate<org.openecomp.sdc.be.model.Component> shouldUpgrade) {
- log.info("Starting upgrade Service with uniqueId {} upon upgrade migration 1710 process. ", uniqueId);
- Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> getServiceRes = toscaOperationFacade.getToscaElement(uniqueId);
- if(getServiceRes.isRight()){
- log.error("Failed to upgrade service with uniqueId {} due to {}. ", uniqueId, getServiceRes.right().value());
- outputHandler.addRecord(ComponentTypeEnum.SERVICE.name(), UNKNOWN, UNKNOWN, uniqueId, MigrationResult.MigrationStatus.FAILED.name(), getServiceRes.right().value());
- return false;
- }
- String derivedFromGenericType = getServiceRes.left().value().getDerivedFromGenericType();
- log.debug("derivedFromGenericType: {}", derivedFromGenericType );
- if (derivedFromGenericType == null) {
- //malformed field value, upgrade required
- return upgradeService(getServiceRes.left().value());
- }
- if(!latestGenericTypes.containsKey(derivedFromGenericType)){
- Either<List<GraphVertex>, JanusGraphOperationStatus> getDerivedRes = findDerivedResources(derivedFromGenericType);
- if(getDerivedRes.isRight()){
- log.error(FAILED_TO_UPGRADE_COMPONENT, getServiceRes.left().value().getComponentType().getValue(), getServiceRes.left().value().getName(), getServiceRes.left().value().getInvariantUUID(), getServiceRes.left().value().getVersion(), "findDerivedResources", getDerivedRes.right().value());
- outputHandler.addRecord( getServiceRes.left().value().getComponentType().name(),getServiceRes.left().value().getName(), getServiceRes.left().value().getInvariantUUID(), getServiceRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), getDerivedRes.right().value());
- return false;
- }
- latestGenericTypes.put(derivedFromGenericType, getDerivedRes.left().value().get(0));
- }
- if(latestVersionExists(latestGenericTypes.get(derivedFromGenericType), getServiceRes.left().value().getDerivedFromGenericVersion())){
- return upgradeService(getServiceRes.left().value());
- }
- if(!collectLatestOriginResourceVersions(getServiceRes.left().value())){
- return false;
- }
- if(shouldUpgrade.test(getServiceRes.left().value())){
- return upgradeService(getServiceRes.left().value());
- }
- outputHandler.addRecord(getServiceRes.left().value().getComponentType().name(), getServiceRes.left().value().getName(), getServiceRes.left().value().getInvariantUUID(), getServiceRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.COMPLETED.name(), UpgradeStatus.NOT_UPGRADED);
- return true;
- }
-
- private boolean collectLatestOriginResourceVersions(org.openecomp.sdc.be.model.Component component) {
- if (CollectionUtils.isNotEmpty(component.getComponentInstances())) {
- for (ComponentInstance instance : component.getComponentInstances()) {
- if (instance.getOriginType() != OriginTypeEnum.ServiceProxy && !latestOriginResourceVersions.containsKey(instance.getToscaComponentName()) && !addComponent(component, instance)) {
- return false;
- }
- }
- }
- return true;
- }
-
- private boolean addComponent(org.openecomp.sdc.be.model.Component component, ComponentInstance instance) {
- VertexTypeEnum vertexType = ModelConverter.getVertexType(instance.getOriginType().name());
- Either<Resource, StorageOperationStatus> getOriginRes = toscaOperationFacade.getLatestCertifiedByToscaResourceName(instance.getToscaComponentName(), vertexType, JsonParseFlagEnum.ParseMetadata);
- if (getOriginRes.isRight()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, component.getComponentType().getValue(), component.getName(), component.getInvariantUUID(), component.getVersion(), "toscaOperationFacade.getLatestCertifiedByToscaResourceName", getOriginRes.right().value());
- outputHandler.addRecord(component.getComponentType().name(), component.getName(), component.getInvariantUUID(), component.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), getOriginRes.right().value());
- return false;
- }
- latestOriginResourceVersions.put(instance.getToscaComponentName(), getOriginRes.left().value().getVersion());
- return true;
- }
-
- private boolean shouldUpgrade(org.openecomp.sdc.be.model.Component component) {
- if(CollectionUtils.isNotEmpty(component.getComponentInstances())) {
- if (containsProxyOrAllottedVF(component)) {
- return false;
- }
- for(ComponentInstance instance : component.getComponentInstances()){
- if(isGreater(latestOriginResourceVersions.get(instance.getToscaComponentName()), instance.getComponentVersion())){
- log.info("The service with name {}, invariantUUID {}, version {}, contains instance {} from outdated version of origin {} {} , than the service should be upgraded. ", component.getName(), component.getInvariantUUID(), component.getVersion(), instance.getName(), instance.getComponentName(), instance.getComponentVersion());
- return true;
- }
- }
- }
- return false;
- }
-
- private boolean containsProxyOrAllottedVF(org.openecomp.sdc.be.model.Component component) {
- return !component.getComponentInstances()
- .stream()
- .filter(i->isProxyOrAllottedVF(i, component.getUniqueId()))
- .collect(Collectors.toList()).isEmpty();
- }
-
- private boolean isProxyOrAllottedVF(ComponentInstance instance, String uniqueId) {
- if (instance.getOriginType() == OriginTypeEnum.ServiceProxy) {
- keepProxyServiceContainerIfSupported(uniqueId);
- return true;
- }
- if (isAllottedResource(instance.getActualComponentUid())) {
- keepAllottedVfContainerIfSupported(uniqueId);
- return true;
- }
- return false;
- }
-
- private void keepAllottedVfContainerIfSupported(final String uniqueId) {
- if (isAllottedAndProxySupported && !allottedVfContainers.contains(uniqueId)) {
- log.info("Add a service with uniqueId {} to allotted VF containers container list", uniqueId);
- allottedVfContainers.add(uniqueId);
- }
- }
-
- private void keepProxyServiceContainerIfSupported(final String uniqueId) {
- if (isAllottedAndProxySupported && !proxyServiceContainers.contains(uniqueId)) {
- log.info("Add a service with uniqueId {} to proxy service container list", uniqueId);
- proxyServiceContainers.add(uniqueId);
- }
- }
-
- private boolean upgradeService(org.openecomp.sdc.be.model.Component service) {
- String serviceName = service.getName();
- String serviceUuid = service.getUUID();
- log.info("Starting upgrade Service with name {}, invariantUUID {}, version {} upon upgrade migration 1710 process. ", serviceName, service.getInvariantUUID(), service.getVersion());
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkouRes = checkOutComponent(service);
- if (checkouRes.isRight()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, service.getComponentType().getValue(), serviceName, service.getInvariantUUID(), service.getVersion(), "lifecycleBusinessLogic.changeComponentState", checkouRes.right().value().getFormattedMessage());
- outputHandler.addRecord(service.getComponentType().name(), serviceName, serviceUuid, service.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), checkouRes.right().value().getFormattedMessage());
- return false;
- }
- Either<org.openecomp.sdc.be.model.Component, ResponseFormat> updateCompositionRes = updateComposition(checkouRes.left().value());
- if (updateCompositionRes.isRight()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, service.getComponentType().getValue(), serviceName, service.getInvariantUUID(), service.getVersion(), "updateComposition", updateCompositionRes.right().value().getFormattedMessage());
- outputHandler.addRecord(checkouRes.left().value().getComponentType().name(), checkouRes.left().value().getName(), checkouRes.left().value().getUUID(), checkouRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), updateCompositionRes.right().value().getFormattedMessage());
- return false;
- }
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> certifyRes = performFullCertification(checkouRes.left().value());
- if (certifyRes.isRight()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, service.getComponentType().getValue(), serviceName, service.getInvariantUUID(), service.getVersion(), "performFullCertification", certifyRes.right().value().getFormattedMessage());
- outputHandler.addRecord(checkouRes.left().value().getComponentType().name(), checkouRes.left().value().getName(), checkouRes.left().value().getInvariantUUID(), checkouRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), certifyRes.right().value().getFormattedMessage());
- return false;
- }
- outputHandler.addRecord(checkouRes.left().value().getComponentType().name(), checkouRes.left().value().getName(), serviceUuid, checkouRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.COMPLETED.name(), UpgradeStatus.UPGRADED);
- return true;
- }
-
- private Either<org.openecomp.sdc.be.model.Component, ResponseFormat> updateComposition(org.openecomp.sdc.be.model.Component component) {
- if (component != null && component.getComponentInstances() != null) {
- for (ComponentInstance instance : component.getComponentInstances()) {
- try {
- upgradeInstance(component, instance);
- }catch (ComponentException e){
- ResponseFormat responseFormat = e.getResponseFormat();
- log.error(FAILED_TO_UPGRADE_COMPONENT, component.getComponentType().getValue(), component.getName(),
- component.getInvariantUUID(), component.getVersion(), "upgradeInstance",
- responseFormat.getFormattedMessage());
- outputHandler.addRecord(component.getComponentType().name(), component.getName(), component.getUUID(),
- component.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(),
- responseFormat.getFormattedMessage());
- return Either.right(responseFormat);
- }
- }
- }
- return Either.left(component);
- }
-
- private ComponentInstance upgradeInstance(org.openecomp.sdc.be.model.Component component, ComponentInstance instance) {
- log.info("Starting upgrade {} instance {} upon upgrade migration 1710 process. ", component.getComponentType().getValue(), instance.getName());
- ComponentInstance newComponentInstance = new ComponentInstance(instance);
- if (instance.getOriginType() == OriginTypeEnum.ServiceProxy) {
- return upgradeServiceProxyInstance(component, instance, newComponentInstance);
- }
- return upgradeResourceInstance(component, instance, newComponentInstance);
- }
-
- private ComponentInstance upgradeResourceInstance(org.openecomp.sdc.be.model.Component component, ComponentInstance instance, ComponentInstance newComponentInstance) {
-
- log.info("Starting upgrade {} instance {} upon upgrade migration 1710 process. ", component.getComponentType().getValue(), instance.getName());
- ComponentInstance upgradeInstanceRes = null;
- VertexTypeEnum vertexType = ModelConverter.getVertexType(instance.getOriginType().name());
- Either<Resource, StorageOperationStatus> getOriginRes = toscaOperationFacade.getLatestCertifiedByToscaResourceName(instance.getToscaComponentName(), vertexType, JsonParseFlagEnum.ParseMetadata);
- if(getOriginRes.isRight()){
- log.info("Upgrade of {} instance {} upon upgrade migration 1710 process failed due to a reason {}. ",
- component.getComponentType().getValue(), instance.getName(), getOriginRes.right().value());
- throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(getOriginRes.right().value(), instance.getOriginType().getComponentType()));
- }
- copyComponentNameAndVersionToNewInstance(newComponentInstance, getOriginRes.left().value());
-
- if(isGreater(getOriginRes.left().value().getVersion(), instance.getComponentVersion())){
- upgradeInstanceRes = changeAssetVersion(component, instance, newComponentInstance);
- }
- if(isAllottedResource(instance.getComponentUid()) && MapUtils.isNotEmpty(component.getComponentInstancesProperties())){
- ComponentInstance instanceToUpdate = upgradeInstanceRes == null ? instance : upgradeInstanceRes;
- upgradeInstanceRes = updateServiceUuidProperty(component, instanceToUpdate, component.getComponentInstancesProperties().get(instance.getUniqueId()));
- }
- //upgrade nodes contained by CVFC
- if(upgradeInstanceRes == null && isVfcUpgradeRequired && newComponentInstance.getOriginType() == OriginTypeEnum.CVFC &&
- !upgradeVf(getOriginRes.left().value().getUniqueId(), false, true)) {
- throw new ByActionStatusComponentException(ActionStatus.GENERAL_ERROR);
- }
- if(upgradeInstanceRes == null){
- upgradeInstanceRes = instance;
- }
- log.info("Upgrade of {} instance {} upon upgrade migration 1710 process finished successfully. ",
- component.getComponentType().getValue(), instance.getName());
- return upgradeInstanceRes;
- }
-
- private void copyComponentNameAndVersionToNewInstance(ComponentInstance newComponentInstance, Resource originResource) {
- newComponentInstance.setComponentName(originResource.getName());
- newComponentInstance.setComponentUid(originResource.getUniqueId());
- newComponentInstance.setComponentVersion(originResource.getVersion());
- newComponentInstance.setToscaComponentName(originResource.getToscaResourceName());
- }
-
- private ComponentInstance updateServiceUuidProperty(org.openecomp.sdc.be.model.Component component, ComponentInstance instance, List<ComponentInstanceProperty> instanceProperties){
- if(isAllottedResource(instance.getComponentUid()) && instanceProperties != null){
- Optional<ComponentInstanceProperty> propertyUuid = instanceProperties.stream().filter(p->p.getName().equals(SERVICE_UUID_RPOPERTY)).findFirst();
- Optional<ComponentInstanceProperty> propertyInvariantUuid = instanceProperties.stream().filter(p->p.getName().equals(SERVICE_INVARIANT_UUID_RPOPERTY)).findFirst();
- if(propertyUuid.isPresent() && propertyInvariantUuid.isPresent()){
- String serviceInvariantUUID = propertyInvariantUuid.get().getValue();
- Either<List<GraphVertex>, JanusGraphOperationStatus> getLatestOriginServiceRes = getLatestCertifiedService(serviceInvariantUUID);
- if (getLatestOriginServiceRes.isRight()) {
- return instance;
- }
- propertyUuid.get().setValue((String) getLatestOriginServiceRes.left().value().get(0).getJsonMetadataField(JsonPresentationFields.UUID));
- componentInstanceBusinessLogic.createOrUpdatePropertiesValues(component.getComponentType(), component.getUniqueId(), instance.getUniqueId(), Lists.newArrayList(propertyUuid.get()), user.getUserId())
- .right()
- .forEach(e -> log.debug("Failed to update property {} of the instance {} of the component {}. ", SERVICE_UUID_RPOPERTY, instance.getUniqueId(), component.getName()));
- }
- }
- return instance;
- }
-
- private boolean isAllottedResource(String uniqueId){
- ComponentParametersView filters = new ComponentParametersView(true);
- filters.setIgnoreCategories(false);
- Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> getResourceRes = toscaOperationFacade.getToscaElement(uniqueId, filters);
- if(getResourceRes.isRight()){
- return false;
- }
- if(getResourceRes.left().value().getCategories() != null && getResourceRes.left().value().getCategories().get(0)!= null){
- return ALLOTTED_RESOURCE_NAME.equals(getResourceRes.left().value().getCategories().get(0).getName());
- }
- return false;
- }
-
- private boolean isAllottedVf(org.openecomp.sdc.be.model.Component component){
- if(component.getComponentType() != ComponentTypeEnum.RESOURCE || ((Resource)component).getResourceType() != ResourceTypeEnum.VF){
- return false;
- }
- return isAllottedResource(component.getUniqueId());
- }
-
- private ComponentInstance upgradeServiceProxyInstance(org.openecomp.sdc.be.model.Component component, ComponentInstance instance, ComponentInstance newComponentInstance) {
- Either<List<GraphVertex>, JanusGraphOperationStatus> getLatestOriginServiceRes = getLatestCertifiedService(instance.getSourceModelInvariant());
- if (getLatestOriginServiceRes.isRight()) {
- throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getLatestOriginServiceRes.right().value()), instance.getOriginType().getComponentType()));
- }
- ModelConverter.getVertexType(instance.getOriginType().name());
- Either<Resource, StorageOperationStatus> getOriginRes = toscaOperationFacade.getLatestByName(instance.getComponentName());
- if(getOriginRes.isRight()){
- log.info("Upgrade of {} instance {} upon upgrade migration 1710 process failed due to a reason {}. ",
- component.getComponentType().getValue(), instance.getName(), getOriginRes.right().value());
- throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(getOriginRes.right().value(), instance.getOriginType().getComponentType()));
- }
- newComponentInstance.setComponentUid((String) getLatestOriginServiceRes.left().value().get(0).getJsonMetadataField(JsonPresentationFields.UNIQUE_ID));
- return changeAssetVersion(component, instance, newComponentInstance);
- }
-
- private Either<List<GraphVertex>, JanusGraphOperationStatus> getLatestCertifiedService(String invariantUUID) {
-
- Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
- propertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
- propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
- propertiesToMatch.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
- propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
- Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
- propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
- return janusGraphDao
- .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseMetadata);
- }
-
- private ComponentInstance changeAssetVersion(org.openecomp.sdc.be.model.Component containerComponent, ComponentInstance instance, ComponentInstance newComponentInstance) {
- return componentInstanceBusinessLogic.changeComponentInstanceVersion(ComponentTypeEnum.SERVICE_PARAM_NAME, containerComponent.getUniqueId(), instance.getUniqueId(), user.getUserId(), newComponentInstance);
- }
-
- private boolean upgradeNodeTypes() {
- log.info("Starting upgrade node types upon upgrade migration 1710 process. ");
- if (nodeTypes != null && !nodeTypes.isEmpty()) {
- Either<List<String>, JanusGraphOperationStatus> getRes = getAllLatestCertifiedComponentUids(VertexTypeEnum.NODE_TYPE, ComponentTypeEnum.RESOURCE);
- if (getRes.isRight()) {
- return false;
- }
- for (String toscaResourceName : nodeTypes) {
- if (!upgradeNodeType(toscaResourceName, getRes.left().value())) {
- return false;
- }
- }
- }
- else {
- log.info("No node types for upgrade are configured");
- }
- return true;
- }
-
- private boolean upgradeNodeType(String toscaResourceName, List<String> allNodeTypes) {
- Either<List<GraphVertex>, StorageOperationStatus> status = getLatestByName(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName);
- if (status.isRight()) {
- log.error("Failed to find node type {} ", toscaResourceName);
- return false;
- }
- List<GraphVertex> vList = status.left().value();
- for (GraphVertex vertex : vList) {
- StorageOperationStatus updateRes = upgradeNodeType(vertex, allNodeTypes);
- if (updateRes != StorageOperationStatus.OK) {
- return false;
- }
- }
- return true;
- }
-
- private boolean upgradeVFs() {
- log.info("Starting upgrade VFs upon upgrade migration 1710 process. ");
- Either<List<String>, JanusGraphOperationStatus> getVfsRes = getAllLatestCertifiedComponentUids(VertexTypeEnum.TOPOLOGY_TEMPLATE, ComponentTypeEnum.RESOURCE);
- if (getVfsRes.isRight()) {
- log.info(UPGRADE_VFS_FAILED);
- return false;
- }
- return upgradeVFs(getVfsRes.left().value(), false);
- }
-
- private boolean upgradeAllottedVFs() {
- log.info("Starting upgrade {} allotted Vfs with upon upgrade migration 1710 process. ", vfAllottedResources.size());
- return upgradeVFs(vfAllottedResources, true);
- }
-
- boolean upgradeVFs(List<String> resourceList, boolean isAllottedVfsUpgrade) {
- for (String currUid : resourceList) {
- boolean result = true;
- try {
- result = upgradeVf(currUid, isAllottedVfsUpgrade, false);
- if (!result && !skipIfUpgradeVfFailed) {
- return false;
- }
- } catch (Exception e) {
- log.error("The exception {} occurred upon upgrade VFs. ", e.getMessage());
- log.debug("The exception occurred upon upgrade VFs:", e);
- result = false;
- if (!skipIfUpgradeVfFailed) {
- return false;
- }
- }
- finally {
- if (result) {
- log.info("Resource upgrade finished successfully: uniqueId {} ", currUid);
- janusGraphDao.commit();
- }
- else {
- log.error("Failed to upgrade resource with uniqueId {} ", currUid);
- janusGraphDao.rollback();
- }
- markCheckedOutResourceAsDeletedIfUpgradeFailed(currUid, result);
- }
- }
- log.info("Upgrade VFs upon upgrade migration 1710 process finished successfully. ");
- return true;
- }
-
- private boolean upgradeVf(String uniqueId, boolean allottedVfsUpgrade, boolean isInstance) {
- log.info("Starting upgrade VF with uniqueId {} upon upgrade migration 1710 process. ", uniqueId);
- Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> getRes = toscaOperationFacade.getToscaElement(uniqueId);
- if (getRes.isRight()) {
- log.debug("Failed to fetch VF with uniqueId {} upon upgrade migration 1710 process. ", uniqueId);
- outputHandler.addRecord(ComponentTypeEnum.RESOURCE.name(), UNKNOWN, UNKNOWN, uniqueId, MigrationResult.MigrationStatus.FAILED.name(), getRes.right().value());
- return false;
- }
- if(!allottedVfsUpgrade && isAllottedVf(getRes.left().value())){
- keepAllottedResourceIfSupported(uniqueId);
- return true;
- }
- if (StringUtils.isNotEmpty(getRes.left().value().getCsarUUID())) {
- log.info("Going to fetch the latest version of VSP with csarUUID {} upon upgrade migration 1710 process. ", getRes.left().value().getCsarUUID());
- Either<String, StorageOperationStatus> latestVersionRes = csarOperation.getCsarLatestVersion(getRes.left().value().getCsarUUID(), user);
- if (latestVersionRes.isRight()) {
- log.debug("Failed to fetch the latest version of VSP with csarUUID {} upon upgrade migration 1710 process. ", getRes.left().value().getCsarUUID());
- outputHandler.addRecord(getRes.left().value().getComponentType().name(), getRes.left().value().getName(), getRes.left().value().getUUID(), getRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), latestVersionRes.right().value());
- return false;
- }
- if (isGreater(latestVersionRes.left().value(), getRes.left().value().getCsarVersion())) {
- return upgradeVfWithLatestVsp(getRes.left().value(), latestVersionRes.left().value(), isInstance);
- }
- if (isVfcUpgradeRequired) {
- return upgradeComponentWithLatestGeneric(getRes.left().value(), isInstance);
- }
- log.warn("Warning: No need to upgrade VF with name {}, invariantUUID {}, version {} and VSP version {}. No new version of VSP. ", getRes.left().value().getName(), getRes.left().value().getInvariantUUID(), getRes.left().value().getVersion(), getRes.left().value().getCsarVersion());
- return true;
- }
- else {
- return upgradeComponentWithLatestGeneric(getRes.left().value(), isInstance);
- }
- }
-
- private void keepAllottedResourceIfSupported(final String uniqueId) {
- if (isAllottedAndProxySupported && !vfAllottedResources.contains(uniqueId)) {
- log.info("Add a resource with uniqueId {} to allotted resource list", uniqueId);
- vfAllottedResources.add(uniqueId);
- }
- }
-
- private boolean upgradeVfWithLatestVsp(org.openecomp.sdc.be.model.Component vf, String latestVersion, boolean isInstance) {
- log.info("Starting upgrade vf with name {}, invariantUUID {}, version {} and latest VSP version {} upon upgrade migration 1710 process. ", vf.getName(), vf.getInvariantUUID(), vf.getVersion(), latestVersion);
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkouRes = checkOutComponent(vf);
- if (checkouRes.isRight()) {
- outputHandler.addRecord(vf.getComponentType().name(), vf.getName(), vf.getUUID(), vf.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), checkouRes.right().value().getFormattedMessage());
- return false;
- }
- Resource resourceToUpdate = new Resource(((Resource) checkouRes.left().value()).getComponentMetadataDefinition());
- resourceToUpdate.setDerivedFromGenericType(((Resource) checkouRes.left().value()).getDerivedFromGenericType());
- resourceToUpdate.setDerivedFromGenericVersion(((Resource) checkouRes.left().value()).getDerivedFromGenericVersion());
- resourceToUpdate.setCsarVersion(Double.toString(Double.parseDouble(latestVersion)));
- resourceToUpdate.setCategories(((Resource)checkouRes.left().value()).getCategories());
- try {
- Resource updateResourceFromCsarRes = resourceBusinessLogic.validateAndUpdateResourceFromCsar(resourceToUpdate, user, null, null, resourceToUpdate.getUniqueId());
- } catch(ByResponseFormatComponentException e){
- outputHandler.addRecord(resourceToUpdate.getComponentType().name(), resourceToUpdate.getName(), resourceToUpdate.getUUID(), resourceToUpdate.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), e.getResponseFormat().getFormattedMessage());
- log.info("Failed to update vf with name {}, invariantUUID {}, version {} and latest VSP {}. ", vf.getName(), vf.getInvariantUUID(), vf.getVersion(), latestVersion);
- return false;
- }
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> certifyRes = performFullCertification(checkouRes.left().value());
- if (certifyRes.isRight()) {
- log.info(FAILED_TO_CHANGE_STATE_OF_COMPONENT, checkouRes.left().value().getName(), checkouRes.left().value().getInvariantUUID(), checkouRes.left().value().getVersion(), LifeCycleTransitionEnum.CERTIFY);
- outputHandler.addRecord(checkouRes.left().value().getComponentType().name(), checkouRes.left().value().getName(), checkouRes.left().value().getInvariantUUID(), checkouRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), certifyRes.right().value().getFormattedMessage());
- return false;
- }
- log.info("Full certification of vf with name {}, invariantUUID {}, version {} finished . ", vf.getName(), vf.getInvariantUUID(), vf.getVersion(), latestVersion);
- outputHandler.addRecord(certifyRes.left().value().getComponentType().name(), certifyRes.left().value().getName(), certifyRes.left().value().getUUID(), certifyRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.COMPLETED.name(), getVfUpgradeStatus(true, isInstance));
- return true;
- }
-
- private boolean upgradeComponentWithLatestGeneric(org.openecomp.sdc.be.model.Component component, boolean isInstance) {
- String derivedFromGenericType = component.getDerivedFromGenericType();
- String derivedFromGenericVersion = component.getDerivedFromGenericVersion();
- org.openecomp.sdc.be.model.Component updatedComponent = component;
- if (failedToFindDerivedResourcesOfNodeType(component, derivedFromGenericType, derivedFromGenericVersion)) {
- return false;
- }
- if (StringUtils.isEmpty(derivedFromGenericType) ||
- latestVersionExists(latestGenericTypes.get(derivedFromGenericType), derivedFromGenericVersion) ||
- isVfcUpgradeRequired ||
- isAllottedAndProxySupported) {
- if (StringUtils.isNotEmpty(derivedFromGenericType)) {
- log.info("Newer version {} of derived from generic type {} exists. ", latestGenericTypes.get(derivedFromGenericType).getJsonMetadataField(JsonPresentationFields.VERSION), derivedFromGenericType);
- }
- else {
- log.info("The vf resource with name {}, invariantUUID {}, version {}, has an empty derivedFromGenericType field. ", component.getName(), component.getInvariantUUID(), component.getVersion());
- }
- updatedComponent = checkOutAndCertifyComponent(component);
- } else {
- log.info("The version {} of derived from generic type {} is up to date. No need to upgrade component with name {}, invariantUUID {} and version {}. ", latestGenericTypes.get(derivedFromGenericType), derivedFromGenericType, component.getName(), component.getInvariantUUID(), component.getVersion());
- }
- if (updatedComponent != null) {
- log.info(UPGRADE_COMPONENT_SUCCEEDED, component.getComponentType().getValue(), component.getName(), component.getInvariantUUID(), component.getVersion());
- outputHandler.addRecord(updatedComponent.getComponentType().name(), updatedComponent.getName(), updatedComponent.getUUID(), updatedComponent.getUniqueId(), MigrationResult.MigrationStatus.COMPLETED.name(),
- getVfUpgradeStatus(!updatedComponent.equals(component), isInstance));
- }
- return true;
- }
-
- private org.openecomp.sdc.be.model.Component checkOutAndCertifyComponent(org.openecomp.sdc.be.model.Component component) {
-
- log.info("Starting to perform check out of vf with name {}, invariantUUID {}, version {}. ", component.getName(), component.getInvariantUUID(), component.getVersion());
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkoutRes = checkOutComponent(component);
- if (checkoutRes.isRight()) {
- log.error(FAILED_TO_CHANGE_STATE_OF_COMPONENT, component.getName(), component.getInvariantUUID(), component.getVersion(), LifeCycleTransitionEnum.CHECKOUT);
- outputHandler.addRecord(component.getComponentType().name(), component.getName(), component.getInvariantUUID(), component.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), checkoutRes.right().value().getFormattedMessage());
- return null;
- }
-
- if (!updateCompositionFailed(component, checkoutRes.left().value())) {
- return null;
- }
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> certifyRes = performFullCertification(checkoutRes.left().value());
- if (certifyRes.isRight()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, component.getComponentType().getValue(), component.getName(), component.getInvariantUUID(), component.getVersion(), "performFullCertification", certifyRes.right().value());
- outputHandler.addRecord(checkoutRes.left().value().getComponentType().name(), checkoutRes.left().value().getName(), checkoutRes.left().value().getInvariantUUID(), checkoutRes.left().value().getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), certifyRes.right().value().getFormattedMessage());
- return null;
- }
- return certifyRes.left().value();
- }
-
- private boolean failedToFindDerivedResourcesOfNodeType(org.openecomp.sdc.be.model.Component component, String derivedFromGenericType, String derivedFromGenericVersion) {
- if (StringUtils.isNotEmpty(derivedFromGenericType) && !latestGenericTypes.containsKey(derivedFromGenericType)) {
- log.info("Starting upgrade vf with name {}, invariantUUID {}, version {}, latest derived from generic type {}, latest derived from generic version {}. ", component.getName(), component.getInvariantUUID(), component.getVersion(), derivedFromGenericType, derivedFromGenericVersion);
- log.info("Starting to fetch latest generic node type {}. ", derivedFromGenericType);
- Either<List<GraphVertex>, JanusGraphOperationStatus> getDerivedRes = findDerivedResources(derivedFromGenericType);
- if (getDerivedRes.isRight()) {
- outputHandler.addRecord(component.getComponentType().name(), component.getName(), component.getInvariantUUID(), component.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), getDerivedRes.right().value());
- log.info("Failed to upgrade component with name {}, invariantUUID {}, version {} and latest generic. Status is {}. ", component.getName(), component.getInvariantUUID(), component.getVersion(), derivedFromGenericType);
- return true;
- }
- latestGenericTypes.put(derivedFromGenericType, getDerivedRes.left().value().get(0));
- }
- return false;
- }
-
- private boolean updateCompositionFailed(org.openecomp.sdc.be.model.Component component, org.openecomp.sdc.be.model.Component checkoutResource) {
- //try to update included VFCs, if it is either required as per configuration or an allotted resource
- if ((isVfcUpgradeRequired && CollectionUtils.isNotEmpty(checkoutResource.getComponentInstances())) || isAllottedAndProxySupported) {
- log.info("VFC upgrade is required: updating components of vf with name {}, invariantUUID {}, version {}. ", component.getName(), component.getInvariantUUID(), component.getVersion());
- Either<org.openecomp.sdc.be.model.Component, ResponseFormat> updateCompositionRes = updateComposition(checkoutResource);
- if (updateCompositionRes.isRight()) {
- if (log.isErrorEnabled()) {
- log.error(FAILED_TO_UPGRADE_COMPONENT, checkoutResource.getComponentType().name(), checkoutResource.getName(), checkoutResource.getInvariantUUID(), checkoutResource.getVersion(), "updateComposition", updateCompositionRes.right().value().getFormattedMessage());
- }
- outputHandler.addRecord(checkoutResource.getComponentType().name(), checkoutResource.getName(), checkoutResource.getUUID(), checkoutResource.getUniqueId(), MigrationResult.MigrationStatus.FAILED.name(), updateCompositionRes.right().value().getFormattedMessage());
- return true;
- }
- }
- return false;
- }
-
- private StorageOperationStatus upgradeNodeType(GraphVertex nodeTypeV, List<String> allCertifiedUids) {
- StorageOperationStatus result = StorageOperationStatus.OK;
- log.info("Starting upgrade node type with name {}, invariantUUID {}, version{}. ", nodeTypeV.getMetadataProperty(GraphPropertyEnum.NAME), nodeTypeV.getMetadataProperty(GraphPropertyEnum.INVARIANT_UUID), nodeTypeV.getMetadataProperty(GraphPropertyEnum.VERSION));
- log.info("Starting to find derived to for node type with name {}, invariantUUID {}, version{}. ", nodeTypeV.getMetadataProperty(GraphPropertyEnum.NAME), nodeTypeV.getMetadataProperty(GraphPropertyEnum.INVARIANT_UUID), nodeTypeV.getMetadataProperty(GraphPropertyEnum.VERSION));
- Either<List<GraphVertex>, JanusGraphOperationStatus> parentResourceRes = janusGraphDao
- .getParentVertices(nodeTypeV, EdgeLabelEnum.DERIVED_FROM, JsonParseFlagEnum.ParseMetadata);
- if (parentResourceRes.isRight() && parentResourceRes.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
- return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(parentResourceRes.right().value());
-
- }
- List<GraphVertex> derivedResourcesUid = getAllDerivedGraphVertices(allCertifiedUids, parentResourceRes);
- String uniqueId = (String) nodeTypeV.getJsonMetadataField(JsonPresentationFields.UNIQUE_ID);
-
- Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> getRes = toscaOperationFacade.getToscaElement(uniqueId);
- if (getRes.isRight()) {
- log.info("failed to fetch element with uniqueId {} ", uniqueId);
- return getRes.right().value();
- }
-
- Resource nodeType = (Resource)getRes.left().value();
- if (!upgradedNodeTypesMap.containsKey(nodeType.getToscaResourceName()) && !nodeTypes.stream().anyMatch(p -> p.equals(nodeType.getToscaResourceName()))
- && !isNodeTypeUpgradeSucceeded((Resource) getRes.left().value())) {
- return StorageOperationStatus.GENERAL_ERROR;
- }
- for (GraphVertex chV : derivedResourcesUid) {
- result = upgradeNodeType(chV, allCertifiedUids);
- log.info("Upgrade node type with name {}, invariantUUID {}, version {} has been finished with the status {}", chV.getMetadataProperty(GraphPropertyEnum.NAME), chV.getMetadataProperty(GraphPropertyEnum.INVARIANT_UUID), chV.getMetadataProperty(GraphPropertyEnum.VERSION), result);
- }
- return result;
- }
-
- private boolean isNodeTypeUpgradeSucceeded(Resource nodeType) {
- log.info("Starting to perform check out of node type with name {}, invariantUUID {}, version {}. ", nodeType.getName(), nodeType.getInvariantUUID(), nodeType.getVersion());
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkouRes =
- lifecycleBusinessLogic.changeComponentState(nodeType.getComponentType(), nodeType.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, changeInfo, true, false);
- if (checkouRes.isRight()) {
- log.info("Failed to check out node type with name {}, invariantUUID {} due to {}", nodeType.getName(), nodeType.getInvariantUUID(), checkouRes.right().value());
- return false;
- }
- if (performFullCertification(checkouRes.left().value()).isLeft()) {
- upgradedNodeTypesMap.put(nodeType.getToscaResourceName(), checkouRes.left().value());
- janusGraphDao.commit();
- return true;
- }
- return false;
- }
-
- private List<GraphVertex> getAllDerivedGraphVertices(List<String> allCertifiedUids, Either<List<GraphVertex>, JanusGraphOperationStatus> parentResources) {
- List<GraphVertex> derivedResourcesUid = new ArrayList<>();
-
- if (parentResources.isLeft()) {
- for (GraphVertex chV : parentResources.left().value()) {
- Optional<String> op = allCertifiedUids.stream().filter(id -> id.equals((String) chV.getJsonMetadataField(JsonPresentationFields.UNIQUE_ID))).findAny();
- if (op.isPresent()) {
- derivedResourcesUid.add(chV);
- }
- }
- }
- return derivedResourcesUid;
- }
-
- private Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> performFullCertification(org.openecomp.sdc.be.model.Component component) {
- log.info("Starting to perform full certification of {} with name {}, invariantUUID {}, version {}. ",
- component.getComponentType().getValue(), component.getName(), component.getInvariantUUID(), component.getVersion());
- org.openecomp.sdc.be.model.Component updatedComponent = component;
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> changeStateEither;
- changeStateEither = lifecycleBusinessLogic.changeComponentState(component.getComponentType(), updatedComponent.getUniqueId(), user, LifeCycleTransitionEnum.CERTIFY, changeInfo, true, false);
- if (changeStateEither.isRight()) {
- log.info(FAILED_TO_CHANGE_STATE_OF_COMPONENT, component.getName(), component.getInvariantUUID(), component.getVersion(), LifeCycleTransitionEnum.CERTIFY);
- } else {
- log.info("Full certification of {} with name {}, invariantUUID {}, version {} finished successfully",
- changeStateEither.left().value().getComponentType().getValue(), changeStateEither.left().value().getName(),
- changeStateEither.left().value().getInvariantUUID(), changeStateEither.left().value().getVersion());
- }
- return changeStateEither;
- }
-
- private Either<List<GraphVertex>, JanusGraphOperationStatus> findDerivedResources(String parentResource) {
- Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
- propertiesToMatch.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
-
- propertiesToMatch.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, parentResource);
- propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
-
- return janusGraphDao
- .getByCriteria(VertexTypeEnum.NODE_TYPE, propertiesToMatch, JsonParseFlagEnum.ParseMetadata);
- }
-
- private boolean latestVersionExists(GraphVertex latestDerivedFrom, String currentVersion) {
- return isGreater((String) latestDerivedFrom.getJsonMetadataField(JsonPresentationFields.VERSION), currentVersion);
- }
-
- private boolean isGreater(String latestVersion, String currentVersion) {
- if (latestVersion != null && currentVersion == null) {
- return true;
- }
- if (latestVersion == null) {
- return false;
- }
- return Double.parseDouble(latestVersion) > Double.parseDouble(currentVersion);
- }
-
- private Either<List<String>, JanusGraphOperationStatus> getAllLatestCertifiedComponentUids(VertexTypeEnum vertexType, ComponentTypeEnum componentType) {
- log.info("Starting to fetch all latest certified not checked out components with type {} upon upgrade migration 1710 process", componentType);
- Either<List<String>, JanusGraphOperationStatus> result = null;
- Map<String, String> latestCertifiedMap = new HashMap<>();
- Map<String, String> latestNotCertifiedMap = new HashMap<>();
-
- Either<List<GraphVertex>, JanusGraphOperationStatus> getComponentsRes = getAllLatestComponents(vertexType, componentType);
- if (getComponentsRes.isRight() && getComponentsRes.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
- log.error("Failed to fetch all latest certified not checked out components with type {}. Status is {}. ", componentType, getComponentsRes.right().value());
- result = Either.right(getComponentsRes.right().value());
- }
- if (getComponentsRes.isRight()) {
- result = Either.left(new ArrayList<>());
- }
- if (result == null) {
- for (GraphVertex component : getComponentsRes.left().value()) {
- String invariantUUID = (String) component.getJsonMetadataField(JsonPresentationFields.INVARIANT_UUID);
- if (((String) component.getJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE)).equals(LifecycleStateEnum.CERTIFIED.name())) {
- latestCertifiedMap.put(invariantUUID, (String) component.getJsonMetadataField(JsonPresentationFields.UNIQUE_ID));
- } else {
- latestNotCertifiedMap.put(invariantUUID, (String) component.getJsonMetadataField(JsonPresentationFields.UNIQUE_ID));
- }
- }
- result = Either.left(latestCertifiedMap.entrySet().stream().filter(e -> !latestNotCertifiedMap.containsKey(e.getKey())).map(Map.Entry::getValue).collect(Collectors.toList()));
- }
- return result;
- }
-
- private Either<List<GraphVertex>, JanusGraphOperationStatus> getAllLatestComponents(VertexTypeEnum vertexType, ComponentTypeEnum componentType) {
-
- Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
- propertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name());
- propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
-
-
- Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
- propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
- if (vertexType == VertexTypeEnum.TOPOLOGY_TEMPLATE && componentType == ComponentTypeEnum.RESOURCE) {
- propertiesNotToMatch.put(GraphPropertyEnum.RESOURCE_TYPE, ResourceTypeEnum.CVFC.name());
- }
- return janusGraphDao
- .getByCriteria(vertexType, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseMetadata);
- }
-
- private Either<List<GraphVertex>, StorageOperationStatus> getLatestByName(GraphPropertyEnum property, String nodeName) {
-
- Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
- Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
-
- propertiesToMatch.put(property, nodeName);
- propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
-
- Either<List<GraphVertex>, JanusGraphOperationStatus> highestResources = janusGraphDao
- .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseMetadata);
- if (highestResources.isRight()) {
- JanusGraphOperationStatus status = highestResources.right().value();
- log.debug("Failed to fetch resource with name {}. Status is {} ", nodeName, status);
- return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
- }
- List<GraphVertex> resources = highestResources.left().value();
- List<GraphVertex> result = new ArrayList<>();
- for (GraphVertex component : resources) {
- if (((String) component.getJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE)).equals(LifecycleStateEnum.CERTIFIED.name())) {
- result.add(component);
- }
- }
- return Either.left(result);
- }
-
- private void deleteMarkedComponents(NodeTypeEnum componentType, int toBeDeleted) {
- Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanComponentsResult;
- List<NodeTypeEnum> cleanComponents = new ArrayList<>();
- cleanComponents.add(componentType);
- try {
- log.info("Trying to delete {} components of type {} marked as deleted", toBeDeleted, componentType);
- cleanComponentsResult = componentsCleanBusinessLogic.cleanComponents(cleanComponents, true);
- logDeleteResult(componentType, cleanComponentsResult.get(componentType));
- }
- catch (Exception e) {
- log.error("Exception occurred {}", e.getMessage());
- log.debug("Exception occurred", e);
- }
- }
-
- private void logDeleteResult(NodeTypeEnum type, Either<List<String>, ResponseFormat> deleteResult) {
- if (deleteResult == null) {
- return;
- }
- if (deleteResult.isLeft()) {
- log.info("Checked out {} versions are deleted successfully", type.getName());
- }
- else {
- log.info("Cleanup of checked out {} versions failed due to the error: {}", type.getName(), deleteResult.right().value().getFormattedMessage());
- }
- }
-
- private void markCheckedOutResourceAsDeletedIfUpgradeFailed(String certUid, boolean isNotFailed) {
- String checkedOutUniqueId = certifiedToNextCheckedOutUniqueId.remove(certUid);
- if (!isNotFailed && checkedOutUniqueId != null) {
- try {
- //mark as deleted the checked out resource as this upgrade failed
- ResponseFormat respFormat = resourceBusinessLogic.deleteResource(checkedOutUniqueId.toLowerCase(), user);
- log.info("Checked out resource uniqueId = {} is marked as deleted, status: {}", checkedOutUniqueId, respFormat.getFormattedMessage());
- deleteResourcesIfLimitIsReached();
- }
- catch (Exception e) {
- log.error("Error occurred:", e);
- }
- }
- }
-
- private void markCheckedOutServiceAsDeletedIfUpgradeFailed(String certUid, boolean isNotFailed) {
- String checkedOutUniqueId = certifiedToNextCheckedOutUniqueId.remove(certUid);
- if (!isNotFailed && checkedOutUniqueId != null) {
- try {
- //delete the checked out resource as this upgrade failed
- ResponseFormat respFormat = serviceBusinessLogic.deleteService(checkedOutUniqueId.toLowerCase(), user);
- log.info("Checked out service uniqueId = {} is marked as deleted, status: {}", checkedOutUniqueId, respFormat.getFormattedMessage());
- deleteServicesIfLimitIsReached();
- } catch (Exception e) {
- log.error("Error occurred:", e);
- }
- }
-
- }
-
- void deleteResourcesIfLimitIsReached() {
- markedAsDeletedResourcesCnt++;
- if (markedAsDeletedResourcesCnt >= maxDeleteComponents) {
- deleteMarkedComponents(NodeTypeEnum.Resource, markedAsDeletedResourcesCnt);
- markedAsDeletedResourcesCnt = 0;
- }
- }
-
- void deleteServicesIfLimitIsReached() {
- markedAsDeletedServicesCnt++;
- if (markedAsDeletedServicesCnt >= maxDeleteComponents) {
- deleteMarkedComponents(NodeTypeEnum.Service, markedAsDeletedServicesCnt);
- markedAsDeletedServicesCnt = 0;
- }
- }
-
- boolean isLockDeleteOperationSucceeded() {
- StorageOperationStatus status = componentsCleanBusinessLogic.lockDeleteOperation();
-
- switch(status) {
- case OK:
- log.info("Lock delete operation succeeded");
- isCleanupLocked = true;
- break;
- case FAILED_TO_LOCK_ELEMENT:
- log.info("Delete operation node is already locked");
- isCleanupLocked = isLockRetrySucceeded();
- break;
- default:
- log.error("Lock delete operation failed due to the error: {}", status);
- isCleanupLocked = false;
- break;
- }
- return isCleanupLocked;
- }
-
- private boolean isLockRetrySucceeded() {
- long startTime = System.currentTimeMillis();
- //try to lock the cleanup resource until configurable time interval is finished
- while (System.currentTimeMillis() - startTime <= deleteLockTimeoutInSeconds * 1000) {
- try {
- //sleep one second and try lock again
- Thread.sleep(1000);
- if (componentsCleanBusinessLogic.lockDeleteOperation() == StorageOperationStatus.OK) {
- return true;
- }
- } catch (InterruptedException e) {
- log.error("Error occurred: {}", e.getMessage());
- Thread.currentThread().interrupt();
- }
- }
- return false;
- }
-
- void unlockDeleteOperation() {
- if (isCleanupLocked) {
- try {
- componentsCleanBusinessLogic.unlockDeleteOperation();
- log.info("Lock delete operation is canceled");
- isCleanupLocked = false;
- }
- catch (Exception e) {
- log.debug("Failed to unlock delete operation", e);
- log.error("Failed to unlock delete operation due to the error {}", e.getMessage());
- }
- }
- }
-
- private Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkOutComponent(org.openecomp.sdc.be.model.Component component) {
- log.info("Starting to perform check out of {} {}, uniqueId = {}", component.getComponentType(), component.getName(), component.getUniqueId());
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> checkoutRes =
- lifecycleBusinessLogic.changeComponentState(component.getComponentType(), component.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, changeInfo, true, false);
- if (checkoutRes.isLeft()) {
- //add the uniqueId from "upgradeVf(String uniqueId)" and checkouRes's uniqueUID to the new map
- certifiedToNextCheckedOutUniqueId.put(component.getUniqueId(), checkoutRes.left().value().getUniqueId());
- log.debug("Add checked out component uniqueId = {} produced from certified component uniqueId = {} to the checked out map", checkoutRes.left().value().getUniqueId(), component.getUniqueId());
- }
- return checkoutRes;
- }
-
- UpgradeStatus getVfUpgradeStatus(boolean isUpgraded, boolean isInstance) {
- if (isUpgraded) {
- return isInstance ? UpgradeStatus.UPGRADED_AS_INSTANCE : UpgradeStatus.UPGRADED;
- }
- return UpgradeStatus.NOT_UPGRADED;
- }
-
-}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcGroupsMigration.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcGroupsMigration.java
deleted file mode 100644
index 1045634ef9..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcGroupsMigration.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.migration.tasks.mig1902;
-
-import org.openecomp.sdc.asdctool.migration.core.DBVersion;
-import org.openecomp.sdc.asdctool.migration.core.task.Migration;
-import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
-import org.openecomp.sdc.asdctool.migration.tasks.InstanceMigrationBase;
-import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
-import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
-import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
-import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
-import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
-import org.openecomp.sdc.be.model.GroupTypeDefinition;
-import org.openecomp.sdc.be.model.PropertyDefinition;
-import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.be.model.operations.impl.GroupTypeOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Component
-public class SdcGroupsMigration extends InstanceMigrationBase implements Migration {
-
- private static final Logger log = LoggerFactory.getLogger(SdcGroupsMigration.class);
-
- private final GroupTypeOperation groupTypeOperation;
-
- private Map<String, GroupTypeDefinition> latestGroupTypeMap = new HashMap<>();
-
- public enum GroupsForUpgrade {
- NW_COLLECTION_GROUP_NAME("org.openecomp.groups.NetworkCollection"),
- VFC_INSTANCE_GROUP_NAME("org.openecomp.groups.VfcInstanceGroup");
-
- private String toscaType;
-
- GroupsForUpgrade(String toscaType) {
- this.toscaType = toscaType;
- }
-
- public static boolean containsToscaType(String type) {
- try {
- return Arrays.stream(values()).anyMatch(g->g.getToscaType().equals(type));
- }
- catch (IllegalArgumentException ex) {
- return false;
- }
- }
-
- public String getToscaType() {
- return toscaType;
- }
-
- }
- public SdcGroupsMigration(JanusGraphDao janusGraphDao, GroupTypeOperation groupTypeOperation) {
- super(janusGraphDao);
- this.groupTypeOperation = groupTypeOperation;
- }
-
- @Override
- public String description() {
- return "update derived from field value for NetworkCollection and VfcInstanceGroup group instances ";
- }
-
- @Override
- public DBVersion getVersion() {
- return DBVersion.from(BigInteger.valueOf(1902), BigInteger.valueOf(0));
- }
-
- @Override
- public MigrationResult migrate() {
- loadLatestGroupTypeDefinitions();
- StorageOperationStatus status = upgradeTopologyTemplates();
- return status == StorageOperationStatus.OK ?
- MigrationResult.success() : MigrationResult.error("failed to update derived from value for NetworkCollection and VfcInstanceGroup group instances. Error : " + status);
- }
-
- void loadLatestGroupTypeDefinitions() {
- Arrays.stream(GroupsForUpgrade.values()).forEach(this::getLatestGroupTypeDefinition);
- }
-
- @Override
- protected StorageOperationStatus handleOneContainer(GraphVertex containerVorig) {
- StorageOperationStatus status = StorageOperationStatus.NOT_FOUND;
- GraphVertex containerV = getVertexById(containerVorig.getUniqueId());
-
- try {
- status = janusGraphDao.getChildVertex(containerV, EdgeLabelEnum.GROUPS, JsonParseFlagEnum.ParseAll)
- .either(this::updateGroupPropertiesIfRequired, this::handleError);
- }
- catch (Exception e) {
- log.error("Exception occurred:", e);
- status = StorageOperationStatus.GENERAL_ERROR;
- }
- finally {
- if (status != StorageOperationStatus.OK) {
- janusGraphDao.rollback();
- if (status == StorageOperationStatus.NOT_FOUND) {
- //it is happy flow as well
- status = StorageOperationStatus.OK;
- }
- }
- if (log.isInfoEnabled()) {
- log.info("Upgrade status is <{}> for topology template <{}> uniqueId <{}>",
- status.name(), containerV.getMetadataProperties().get(GraphPropertyEnum.NAME),
- containerV.getMetadataProperties().get(GraphPropertyEnum.UNIQUE_ID));
- }
- }
- return status;
- }
-
- private StorageOperationStatus updateGroupPropertiesIfRequired(GraphVertex vertex) {
- StorageOperationStatus status = StorageOperationStatus.NOT_FOUND;
- boolean isUpdated = false;
- Map<String, GroupDataDefinition> groupDefinitionMap = (Map<String, GroupDataDefinition>) vertex.getJson();
- for (GroupDataDefinition groupDef : groupDefinitionMap.values()) {
- if (GroupsForUpgrade.containsToscaType(groupDef.getType())) {
- if (log.isDebugEnabled()) {
- log.debug("Group instance named <{}> of type <{}> is supposed to be updated on vertex <{}>",
- groupDef.getName(), groupDef.getType(), vertex.getUniqueId());
- }
- isUpdated = isGroupPropertiesUpdateDone(groupDef.getProperties(), latestGroupTypeMap.get(groupDef.getType()).getProperties());
- if (log.isDebugEnabled()) {
- String result = isUpdated ? "has been updated" : "is up to date ";
- log.debug("Group instance named <{}> of type <{}> uniqueID <{}> {} on vertex <{}>",
- groupDef.getName(), groupDef.getType(), groupDef.getUniqueId(), result, vertex.getUniqueId());
- }
- }
- }
- if (isUpdated) {
- vertex.setJson(groupDefinitionMap);
- status = updateVertexAndCommit(vertex);
- if (status == StorageOperationStatus.OK && log.isDebugEnabled()) {
- log.debug("Group properties change is committed on vertex <{}>", vertex.getUniqueId());
- }
- }
- return status;
- }
-
- private boolean isGroupPropertiesUpdateDone(List<PropertyDataDefinition> curPropDefList, List<PropertyDefinition> latestGroupDefList) {
- boolean isUpdated = false;
- for (PropertyDefinition prop: latestGroupDefList) {
- if (curPropDefList.stream().noneMatch(l->l.getName().equals(prop.getName()))) {
- curPropDefList.add(prop);
- isUpdated = true;
- }
- }
- return isUpdated;
- }
-
- StorageOperationStatus getLatestGroupTypeDefinition(GroupsForUpgrade groupsForUpgrade) {
- return groupTypeOperation.getLatestGroupTypeByType(groupsForUpgrade.getToscaType(), false)
- .either(g-> {
- latestGroupTypeMap.put(groupsForUpgrade.getToscaType(), g);
- return StorageOperationStatus.OK;
- }, err->err);
- }
-
-
-}
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcResourceIconMigration.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcResourceIconMigration.java
deleted file mode 100644
index 837abf1c08..0000000000
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/tasks/mig1902/SdcResourceIconMigration.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.sdc.asdctool.migration.tasks.mig1902;
-
-import com.google.common.annotations.VisibleForTesting;
-import org.openecomp.sdc.asdctool.migration.core.DBVersion;
-import org.openecomp.sdc.asdctool.migration.core.task.Migration;
-import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
-import org.openecomp.sdc.asdctool.migration.tasks.InstanceMigrationBase;
-import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
-import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
-import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
-import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
-import org.openecomp.sdc.be.datatypes.elements.ComponentInstanceDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.CompositionDataDefinition;
-import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
-import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
-import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
-import org.openecomp.sdc.be.model.jsonjanusgraph.enums.JsonConstantKeysEnum;
-import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.common.log.wrappers.Logger;
-import org.springframework.stereotype.Component;
-
-import java.math.BigInteger;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Component
-public class SdcResourceIconMigration extends InstanceMigrationBase implements Migration {
-
- private static final Logger log = Logger.getLogger(SdcResourceIconMigration.class);
-
- private Map <String, String> resourceTypeToIconMap = new HashMap<>();
-
- @VisibleForTesting
- SdcResourceIconMigration(JanusGraphDao janusGraphDao) {
- super(janusGraphDao);
- }
-
-
- @Override
- public String description() {
- return "update iconPath for VL and CP nodes";
- }
-
- @Override
- public DBVersion getVersion() {
- return DBVersion.from(BigInteger.valueOf(1902), BigInteger.valueOf(0));
- }
-
- @Override
- public MigrationResult migrate() {
- StorageOperationStatus status;
- try {
- updateNodeTypeIconAndStoreInMap(ResourceTypeEnum.VL);
- updateNodeTypeIconAndStoreInMap(ResourceTypeEnum.CP);
-
- if (!resourceTypeToIconMap.isEmpty()) {
- status = upgradeTopologyTemplates();
- } else {
- log.error("No VL and CP node definitions found");
- status = StorageOperationStatus.NOT_FOUND;
- }
- }
- catch(Exception e) {
- log.error("Exception thrown: {}", e);
- status = StorageOperationStatus.GENERAL_ERROR;
- }
- return status == StorageOperationStatus.OK ?
- MigrationResult.success() : MigrationResult.error("failed to update iconPath for VL and CP nodes. Error : " + status);
- }
-
- @Override
- protected StorageOperationStatus handleOneContainer(GraphVertex containerVorig) {
- StorageOperationStatus status = StorageOperationStatus.OK;
- GraphVertex containerV = getVertexById(containerVorig.getUniqueId());
-
- Map<String, CompositionDataDefinition> jsonComposition = (Map<String, CompositionDataDefinition>)containerV.getJson();
- if (jsonComposition != null && !jsonComposition.isEmpty()) {
- CompositionDataDefinition compositionDataDefinition = jsonComposition.get(JsonConstantKeysEnum.COMPOSITION.getValue());
- Map<String, ComponentInstanceDataDefinition> componentInstances = compositionDataDefinition.getComponentInstances();
-
- long updateCount = componentInstances.values()
- .stream()
- .filter(this::updateIconInsideInstance).count();
- if (updateCount > 0) {
- status = updateVertexAndCommit(containerV);
- }
- }
- else {
- log.warn("No json found for template <{}> uniqueId <{}>",
- containerV.getMetadataProperties().get(GraphPropertyEnum.NAME),
- containerV.getMetadataProperties().get(GraphPropertyEnum.UNIQUE_ID));
- }
- if (log.isInfoEnabled()) {
- log.info("Upgrade status is <{}> for topology template <{}> uniqueId <{}>",
- status.name(), containerV.getMetadataProperties().get(GraphPropertyEnum.NAME),
- containerV.getMetadataProperties().get(GraphPropertyEnum.UNIQUE_ID));
- }
- return status;
- }
-
-
- @VisibleForTesting
- boolean updateIconInsideInstance(ComponentInstanceDataDefinition componentInstanceDataDefinition) {
- String iconPath = resourceTypeToIconMap.get(componentInstanceDataDefinition.getComponentName());
- if (iconPath != null) {
- componentInstanceDataDefinition.setIcon(iconPath);
- if (log.isDebugEnabled()) {
- log.debug("Icon of component {} is set to {}", componentInstanceDataDefinition.getComponentName(), iconPath);
- }
- return true;
- }
- return false;
- }
-
- @VisibleForTesting
- void updateNodeTypeIconAndStoreInMap(ResourceTypeEnum resourceType) {
- Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
- Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
-
- propertiesToMatch.put(GraphPropertyEnum.RESOURCE_TYPE, resourceType.name());
- propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
-
- propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
-
- String iconPath = String.valueOf(resourceType.getValue()).toLowerCase();
-
- Map<String, String> resourceNameToIconMap = janusGraphDao.getByCriteria(VertexTypeEnum.NODE_TYPE, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll)
- .either(vl-> updateIconResource(vl, iconPath), status->null);
-
- if (resourceNameToIconMap != null) {
- resourceTypeToIconMap.putAll(resourceNameToIconMap);
- }
- else {
- log.warn("Failed to get resources of type <{}>", resourceType.name());
- }
- }
-
- private Map <String, String> updateIconResource(List<GraphVertex> vertexList, String iconPath) {
- if (vertexList.isEmpty()) {
- return null;
- }
- Map <String, String> nameToIconMap = new HashMap<>();
- vertexList.forEach(v->{
- StorageOperationStatus status = updateIconOnVertex(v, iconPath);
- if (status == StorageOperationStatus.OK) {
- if (log.isDebugEnabled()) {
- log.debug("Node type's {} icon is updated to {}", v.getMetadataProperty(GraphPropertyEnum.NAME), iconPath);
- }
- nameToIconMap.put(String.valueOf(v.getMetadataProperty(GraphPropertyEnum.NAME)), iconPath);
- }
- else {
- log.error("Failed to update node type {} icon due to a reason: {}",
- v.getMetadataProperty(GraphPropertyEnum.NAME), status);
- throw new RuntimeException("Node update failure");
- }
- });
- return nameToIconMap;
- }
-
- private StorageOperationStatus updateIconOnVertex(GraphVertex vertex, String iconPath) {
- vertex.setJsonMetadataField(JsonPresentationFields.ICON, iconPath);
- return updateVertexAndCommit(vertex);
- }
-
-}