1 package org.openecomp.sdc.asdctool.migration.tasks.mig1806;
4 import org.openecomp.sdc.asdctool.migration.core.DBVersion;
5 import org.openecomp.sdc.asdctool.migration.core.task.Migration;
6 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
7 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
8 import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
9 import org.openecomp.sdc.be.config.ConfigurationManager;
10 import org.openecomp.sdc.be.dao.api.ActionStatus;
11 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
12 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
13 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
14 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
15 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
16 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
17 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
18 import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
19 import org.openecomp.sdc.be.model.LifecycleStateEnum;
20 import org.openecomp.sdc.be.model.User;
21 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
22 import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
23 import org.openecomp.sdc.be.model.operations.impl.UserAdminOperation;
24 import org.openecomp.sdc.common.log.wrappers.Logger;
25 import org.openecomp.sdc.exception.ResponseFormat;
26 import org.springframework.stereotype.Component;
28 import java.math.BigInteger;
29 import java.util.EnumMap;
30 import java.util.List;
34 public class ResourceLifecycleMigration implements Migration {
36 private JanusGraphDao janusGraphDao;
37 private LifecycleBusinessLogic lifecycleBusinessLogic;
38 private UserAdminOperation userAdminOperation;
40 private User user = null;
42 private static final Logger log = Logger.getLogger(ResourceLifecycleMigration.class);
44 public ResourceLifecycleMigration(JanusGraphDao janusGraphDao, LifecycleBusinessLogic lifecycleBusinessLogic, UserAdminOperation userAdminOperation) {
45 this.janusGraphDao = janusGraphDao;
46 this.lifecycleBusinessLogic = lifecycleBusinessLogic;
47 this.userAdminOperation = userAdminOperation;
51 public String description() {
52 return "change resource lifecycle state from testing to certified";
56 public DBVersion getVersion() {
57 return DBVersion.from(BigInteger.valueOf(1806), BigInteger.valueOf(0));
61 public MigrationResult migrate() {
62 log.info("start change resource lifecycle states migration");
63 final String userId = ConfigurationManager.getConfigurationManager().getConfiguration().getAutoHealingOwner();
65 Either<User, ActionStatus> userReq = userAdminOperation.getUserData(userId, false);
66 if (userReq.isRight()) {
67 log.error("Upgrade migration failed. User {} resolve failed: {} ", userId, userReq.right().value());
68 return MigrationResult.error("failed to change lifecycle state of resources. Failed to resolve user : " + userId + " error " + userReq.right().value());
70 user = userReq.left().value();
71 log.info("User {} will perform upgrade operation with role {}", user.getUserId(), user.getRole());
74 StorageOperationStatus status = changeResourceLifecycleState();
76 return status == StorageOperationStatus.OK ? MigrationResult.success() : MigrationResult.error("failed to change lifecycle state of resources. Error : " + status);
79 private StorageOperationStatus changeResourceLifecycleState() {
80 StorageOperationStatus status;
81 status = findResourcesAndChangeStatus(VertexTypeEnum.NODE_TYPE);
82 if (StorageOperationStatus.OK == status) {
83 status = findResourcesAndChangeStatus(VertexTypeEnum.TOPOLOGY_TEMPLATE);
85 janusGraphDao.commit();
89 private StorageOperationStatus findResourcesAndChangeStatus(VertexTypeEnum type) {
90 StorageOperationStatus status;
91 Map<GraphPropertyEnum, Object> props = new EnumMap<>(GraphPropertyEnum.class);
92 props.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name());
93 props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.READY_FOR_CERTIFICATION.name());
94 props.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
96 Map<GraphPropertyEnum, Object> hasNot = new EnumMap<>(GraphPropertyEnum.class);
97 hasNot.put(GraphPropertyEnum.IS_DELETED, true);
99 log.info("findResourcesAndChangeStatus for type {} and state {}", type ,LifecycleStateEnum.READY_FOR_CERTIFICATION);
100 status = janusGraphDao.getByCriteria(type, props, hasNot, JsonParseFlagEnum.ParseAll).either(this::changeState, this::handleError);
101 log.info("status {} for type {} and state {}", status, type ,LifecycleStateEnum.READY_FOR_CERTIFICATION);
103 log.info("findResourcesAndChangeStatus for type {} and state {}", type ,LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
104 props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFICATION_IN_PROGRESS.name());
105 status = janusGraphDao.getByCriteria(type, props, hasNot, JsonParseFlagEnum.ParseAll).either(this::changeState, this::handleError);
106 log.info("status {} for type {} and state {}", status, type ,LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
112 private StorageOperationStatus changeState(List<GraphVertex> resourcesV) {
113 StorageOperationStatus status = StorageOperationStatus.OK;
115 for (GraphVertex resourceV : resourcesV) {
116 status = changeResourceState(resourceV);
117 if (status != StorageOperationStatus.OK) {
118 log.info("Failed to change state to certified of resource with id {} , continue to next, reset status", resourceV.getUniqueId() );
119 status = StorageOperationStatus.OK;
125 private StorageOperationStatus changeResourceState(GraphVertex resourceV) {
126 log.debug("Change state to certified to resource with id {} ", resourceV.getUniqueId() );
128 LifecycleChangeInfoWithAction changeInfo = new LifecycleChangeInfoWithAction("change resource state by migration");
129 final Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> changeComponentState = lifecycleBusinessLogic.changeComponentState(ComponentTypeEnum.RESOURCE, resourceV.getUniqueId(), user, LifeCycleTransitionEnum.CERTIFY, changeInfo, false, true);
130 return changeComponentState.isLeft() ? StorageOperationStatus.OK : StorageOperationStatus.GENERAL_ERROR;
133 private StorageOperationStatus handleError(JanusGraphOperationStatus err) {
134 log.debug("receive janusgraph error {}", err);
135 return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(
136 JanusGraphOperationStatus.NOT_FOUND == err ? JanusGraphOperationStatus.OK : err);