aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-model
diff options
context:
space:
mode:
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>2024-04-11 11:59:10 +0200
committerFiete Ostkamp <fiete.ostkamp@telekom.de>2024-04-11 14:09:22 +0000
commit0e1a3ddc9fae2b9ce74be0f14c4f6e08fac7e85b (patch)
treeba3f884d919ebb334d1b701405a0b1959aa9706a /catalog-model
parenta542f19d421229508c4408583e552c4c0eba84f1 (diff)
Fix: Listing archived catalog resources fails randomly1.13.7
- filter out vertices that do not have Metadata property when checking if component exists in catalog - log filtered vertex with as much information as possible Issue-ID: SDC-4685 Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de> Change-Id: Id7a88729c72ac5d3504ca6e3f3097d65475b932b
Diffstat (limited to 'catalog-model')
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java113
-rw-r--r--catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperationCatalogTest.java31
2 files changed, 83 insertions, 61 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java
index 24e1e910d3..0bc84506ee 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java
@@ -37,13 +37,13 @@ import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyVertexProperty;
import org.janusgraph.core.JanusGraphVertex;
import org.openecomp.sdc.be.config.ConfigurationManager;
import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
@@ -83,6 +83,7 @@ import org.openecomp.sdc.be.utils.TypeUtils;
import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum;
import org.openecomp.sdc.common.jsongraph.util.CommonUtility;
import org.openecomp.sdc.common.jsongraph.util.CommonUtility.LogLevelEnum;
+import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.common.util.ValidationUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -1347,7 +1348,13 @@ public abstract class ToscaElementOperation extends BaseOperation {
}
Iterator<Vertex> vertices = verticesEither.left().value();
while (vertices.hasNext()) {
- handleCatalogComponent(existInCatalog, vertices.next(), excludeTypes);
+ Vertex vertex = vertices.next();
+ VertexProperty<?> vertexProperty = vertex.property(GraphPropertiesDictionary.METADATA.getProperty());
+ if(!(vertexProperty instanceof EmptyVertexProperty)) {
+ handleCatalogComponent(existInCatalog, vertex, excludeTypes);
+ } else {
+ logVertex(vertex);
+ }
}
stopWatch.stop();
String timeToFetchElements = stopWatch.prettyPrint();
@@ -1355,64 +1362,76 @@ public abstract class ToscaElementOperation extends BaseOperation {
return Either.left(existInCatalog.values().stream().collect(Collectors.toList()));
}
+ private void logVertex(Vertex vertex) {
+ StringBuilder sb = new StringBuilder();
+ vertex.keys().forEach(key -> {
+ Object value = vertex.property(key);
+ sb.append("[").append(key).append(": ").append(value).append("] ");
+ });
+ log.warn(EcompLoggerErrorCode.DATA_ERROR, "catalog-model", "Vertex has no metadata property: ", sb.toString());
+ }
+
private void handleCatalogComponent(Map<String, CatalogComponent> existInCatalog, Vertex vertex, List<ResourceTypeEnum> excludeTypes) {
VertexProperty<Object> property = vertex.property(GraphPropertiesDictionary.METADATA.getProperty());
String json = (String) property.value();
Map<String, Object> metadatObj = JsonParserUtils.toMap(json);
String uniqueId = (String) metadatObj.get(JsonPresentationFields.UNIQUE_ID.getPresentation());
Boolean isDeleted = (Boolean) metadatObj.get(JsonPresentationFields.IS_DELETED.getPresentation());
- if (isAddToCatalog(excludeTypes, metadatObj) && (existInCatalog.get(uniqueId) == null && (isDeleted == null || !isDeleted.booleanValue()))) {
- CatalogComponent catalogComponent = new CatalogComponent();
- catalogComponent.setUniqueId(uniqueId);
- catalogComponent.setModel((String) metadatObj.get(JsonPresentationFields.MODEL.getPresentation()));
- catalogComponent
- .setComponentType(ComponentTypeEnum.valueOf((String) metadatObj.get(JsonPresentationFields.COMPONENT_TYPE.getPresentation())));
- catalogComponent.setVersion((String) metadatObj.get(JsonPresentationFields.VERSION.getPresentation()));
- catalogComponent.setName((String) metadatObj.get(JsonPresentationFields.NAME.getPresentation()));
- catalogComponent.setIcon((String) metadatObj.get(JsonPresentationFields.ICON.getPresentation()));
- catalogComponent.setLifecycleState((String) metadatObj.get(JsonPresentationFields.LIFECYCLE_STATE.getPresentation()));
- Object lastUpdateDate = metadatObj.get(JsonPresentationFields.LAST_UPDATE_DATE.getPresentation());
- catalogComponent.setLastUpdateDate((lastUpdateDate != null ? (Long) lastUpdateDate : 0L));
- catalogComponent.setDistributionStatus((String) metadatObj.get(JsonPresentationFields.DISTRIBUTION_STATUS.getPresentation()));
- catalogComponent.setDescription((String) metadatObj.get(JsonPresentationFields.DESCRIPTION.getPresentation()));
- catalogComponent.setTenant((String) metadatObj.get(JsonPresentationFields.TENANT.getPresentation()));
- catalogComponent.setSystemName((String) metadatObj.get(JsonPresentationFields.SYSTEM_NAME.getPresentation()));
- catalogComponent.setUuid((String) metadatObj.get(JsonPresentationFields.UUID.getPresentation()));
- catalogComponent.setInvariantUUID((String) metadatObj.get(JsonPresentationFields.INVARIANT_UUID.getPresentation()));
- catalogComponent.setIsHighestVersion((Boolean) metadatObj.get(JsonPresentationFields.HIGHEST_VERSION.getPresentation()));
- Iterator<Edge> edges = vertex.edges(Direction.IN, EdgeLabelEnum.STATE.name());
- if (edges.hasNext()) {
- catalogComponent
- .setLastUpdaterUserId((String) edges.next().outVertex().property(GraphPropertiesDictionary.USERID.getProperty()).value());
- }
- Object resourceType = metadatObj.get(JsonPresentationFields.RESOURCE_TYPE.getPresentation());
- if (resourceType != null) {
- catalogComponent.setResourceType((String) resourceType);
- }
- if (catalogComponent.getComponentType() == ComponentTypeEnum.SERVICE) {
- setServiceCategoryFromGraphV(vertex, catalogComponent);
- } else {
- setResourceCategoryFromGraphV(vertex, catalogComponent);
- }
- List<String> tags = (List<String>) metadatObj.get(JsonPresentationFields.TAGS.getPresentation());
- if (tags != null) {
- catalogComponent.setTags(tags);
- }
+ if (isNotExcluded(excludeTypes, metadatObj) && (existInCatalog.get(uniqueId) == null && (isDeleted == null || !isDeleted.booleanValue()))) {
+ CatalogComponent catalogComponent = createCatalogComponent(vertex, metadatObj, uniqueId);
existInCatalog.put(uniqueId, catalogComponent);
}
}
- private boolean isAddToCatalog(List<ResourceTypeEnum> excludeTypes, Map<String, Object> metadatObj) {
+ private CatalogComponent createCatalogComponent(Vertex vertex, Map<String, Object> metadatObj, String uniqueId) {
+ CatalogComponent catalogComponent = new CatalogComponent();
+ catalogComponent.setUniqueId(uniqueId);
+ catalogComponent.setModel((String) metadatObj.get(JsonPresentationFields.MODEL.getPresentation()));
+ catalogComponent
+ .setComponentType(ComponentTypeEnum.valueOf((String) metadatObj.get(JsonPresentationFields.COMPONENT_TYPE.getPresentation())));
+ catalogComponent.setVersion((String) metadatObj.get(JsonPresentationFields.VERSION.getPresentation()));
+ catalogComponent.setName((String) metadatObj.get(JsonPresentationFields.NAME.getPresentation()));
+ catalogComponent.setIcon((String) metadatObj.get(JsonPresentationFields.ICON.getPresentation()));
+ catalogComponent.setLifecycleState((String) metadatObj.get(JsonPresentationFields.LIFECYCLE_STATE.getPresentation()));
+ Object lastUpdateDate = metadatObj.get(JsonPresentationFields.LAST_UPDATE_DATE.getPresentation());
+ catalogComponent.setLastUpdateDate((lastUpdateDate != null ? (Long) lastUpdateDate : 0L));
+ catalogComponent.setDistributionStatus((String) metadatObj.get(JsonPresentationFields.DISTRIBUTION_STATUS.getPresentation()));
+ catalogComponent.setDescription((String) metadatObj.get(JsonPresentationFields.DESCRIPTION.getPresentation()));
+ catalogComponent.setTenant((String) metadatObj.get(JsonPresentationFields.TENANT.getPresentation()));
+ catalogComponent.setSystemName((String) metadatObj.get(JsonPresentationFields.SYSTEM_NAME.getPresentation()));
+ catalogComponent.setUuid((String) metadatObj.get(JsonPresentationFields.UUID.getPresentation()));
+ catalogComponent.setInvariantUUID((String) metadatObj.get(JsonPresentationFields.INVARIANT_UUID.getPresentation()));
+ catalogComponent.setIsHighestVersion((Boolean) metadatObj.get(JsonPresentationFields.HIGHEST_VERSION.getPresentation()));
+ Iterator<Edge> edges = vertex.edges(Direction.IN, EdgeLabelEnum.STATE.name());
+ if (edges.hasNext()) {
+ catalogComponent
+ .setLastUpdaterUserId((String) edges.next().outVertex().property(GraphPropertiesDictionary.USERID.getProperty()).value());
+ }
+ Object resourceType = metadatObj.get(JsonPresentationFields.RESOURCE_TYPE.getPresentation());
+ if (resourceType != null) {
+ catalogComponent.setResourceType((String) resourceType);
+ }
+ if (catalogComponent.getComponentType() == ComponentTypeEnum.SERVICE) {
+ setServiceCategoryFromGraphV(vertex, catalogComponent);
+ } else {
+ setResourceCategoryFromGraphV(vertex, catalogComponent);
+ }
+ List<String> tags = (List<String>) metadatObj.get(JsonPresentationFields.TAGS.getPresentation());
+ if (tags != null) {
+ catalogComponent.setTags(tags);
+ }
+ return catalogComponent;
+ }
+
+ private boolean isNotExcluded(List<ResourceTypeEnum> excludeTypes, Map<String, Object> metadatObj) {
boolean isAddToCatalog = true;
Object resourceTypeStr = metadatObj.get(JsonPresentationFields.RESOURCE_TYPE.getPresentation());
- if (resourceTypeStr != null) {
+ if (resourceTypeStr != null && excludeTypes != null) {
ResourceTypeEnum resourceType = ResourceTypeEnum.getType((String) resourceTypeStr);
- if (!CollectionUtils.isEmpty(excludeTypes)) {
- Optional<ResourceTypeEnum> op = excludeTypes.stream().filter(rt -> rt == resourceType).findAny();
- if (op.isPresent()) {
- isAddToCatalog = false;
- }
- }
+ return !excludeTypes.stream()
+ .filter(type -> type == resourceType)
+ .findAny()
+ .isPresent();
}
return isAddToCatalog;
}
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperationCatalogTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperationCatalogTest.java
index 28f9fc8652..571a6d4b1f 100644
--- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperationCatalogTest.java
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperationCatalogTest.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyVertexProperty;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -51,20 +52,13 @@ public class ToscaElementOperationCatalogTest {
private static final String UPDATER_ID = "m08740";
private ArrayList<Vertex> vertexList = new ArrayList<>();
- @Mock
- Vertex vertex;
- @Mock
- Edge edge;
- @Mock
- Vertex outVertex;
- @Mock
- Iterator<Edge> edges;
- @Mock
- JanusGraphDao janusGraphDao;
- @Mock
- VertexProperty<Object> property;
- @Mock
- VertexProperty<Object> updaterProperty;
+ @Mock Edge edge;
+ @Mock Vertex vertex;
+ @Mock Vertex outVertex;
+ @Mock Iterator<Edge> edges;
+ @Mock JanusGraphDao janusGraphDao;
+ @Mock VertexProperty<Object> property;
+ @Mock VertexProperty<Object> updaterProperty;
@InjectMocks
private ToscaElementOperation toscaOperation = new TopologyTemplateOperation();
@@ -119,4 +113,13 @@ public class ToscaElementOperationCatalogTest {
assertEquals(UPDATER_ID, componentList.get(0).getLastUpdaterUserId());
}
+ @Test
+ public void thatVertexIsSkippedIfItHasNoMetadataProperty() {
+ VertexProperty<Object> emptyVertexProperty = new EmptyVertexProperty<>();
+ when(vertex.property(GraphPropertiesDictionary.METADATA.getProperty())).thenReturn(emptyVertexProperty);
+
+ List<CatalogComponent> componentList = toscaOperation.getElementCatalogData(true, null).left().value();
+ assertEquals(0, componentList.size());
+ }
+
}