Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix unique index creation error for schemas added via API #229

Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ public String addEntity(Shard shard, String userId, JsonNode rootNode, boolean s
entityId = registryDao.addEntity(graph, rootNode);
if (commitEnabled) {
dbProvider.commitTransaction(graph, tx);
entityParenter.ensureKnownParentersNew(rootNode);
entityParenter.loadDefinitionIndex();
entityParenter.ensureIndexExists();
}
} finally {
if (tx != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.sunbirdrc.registry.util;

import com.fasterxml.jackson.databind.JsonNode;
import dev.sunbirdrc.registry.dao.VertexWriter;
import dev.sunbirdrc.registry.middleware.util.Constants;
import dev.sunbirdrc.registry.model.DBConnectionInfo;
Expand All @@ -26,6 +27,8 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import static dev.sunbirdrc.registry.Constants.Schema;

@Component("entityParenter")
public class EntityParenter {
private static Logger logger = LoggerFactory.getLogger(EntityParenter.class);
Expand Down Expand Up @@ -163,6 +166,59 @@ public Optional<String> ensureKnownParenters() {
return result;
}

public Optional<String> ensureKnownParentersNew(JsonNode schemaNode) {
logger.info("Start - ensure parent node for defined schema");
Optional<String> result;

dbConnectionInfoList.forEach(dbConnectionInfo -> {
logger.info("Starting to parents for {} definitions in shard {}", defintionNames.size(),
dbConnectionInfo.getShardId());
DatabaseProvider dbProvider = dbProviderFactory.getInstance(dbConnectionInfo);
try {
try (OSGraph osGraph = dbProvider.getOSGraph()) {
Graph graph = osGraph.getGraphStore();
List<ShardParentInfo> shardParentInfoList = new ArrayList<>();
try (Transaction tx = dbProvider.startTransaction(graph)) {

List<String> parentLabels = new ArrayList<>();
if(schemaNode.get(Schema)==null && schemaNode.fieldNames().next()!=null) {
String name = schemaNode.fieldNames().next();
defintionNames.forEach(defintionName -> {
if (defintionName.contains(name)) {
String parentLabel = ParentLabelGenerator.getLabel(defintionName);
parentLabels.add(parentLabel);

VertexWriter vertexWriter = new VertexWriter(graph, dbProvider, uuidPropertyName);
Vertex v = vertexWriter.ensureParentVertex(parentLabel);

ShardParentInfo shardParentInfo = new ShardParentInfo(defintionName, v);
shardParentInfo.setUuid(dbProvider.getId(v));
shardParentInfoList.add(shardParentInfo);
}
});


ShardParentInfoList valList = new ShardParentInfoList();
valList.setParentInfos(shardParentInfoList);

shardParentMap.put(dbConnectionInfo.getShardId(), valList);

dbProvider.commitTransaction(graph, tx);
}
}
logger.info("Ensured parents for {} definitions in shard {}", defintionNames.size(),
dbConnectionInfo.getShardId());
}
} catch (Exception e) {
logger.error("Can't ensure parents for definitions " + e);
}
});

logger.info("End - ensure parent node for defined schema");
result = Optional.empty();
return result;
}

/**
* Gets a known parent id
*
Expand Down