10000 Bug fix 3.6/edit edge vertex validation (#12145) · RtiWeb/arangodb@4e13f2d · GitHub
[go: up one dir, main page]

Skip to content

Commit 4e13f2d

Browse files
hkernbachgoedderzKVS85
authored
Bug fix 3.6/edit edge vertex validation (arangodb#12145)
* add vertex validation if vertex is available * Update arangod/Graph/GraphManager.h Co-authored-by: Tobias Gödderz <tobias@arangodb.com> * changelog Co-authored-by: Tobias Gödderz <tobias@arangodb.com> Co-authored-by: Vadim <vadim@arangodb.com>
1 parent bef753a commit 4e13f2d

File tree

4 files changed

+16
-6
lines changed

4 files changed

+16
-6
lines changed

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
v3.6.5 (XXXX-XX-XX)
22
-------------------
33

4+
* Added vertex validation in case of a SmartGraph edge definition update.
5+
46
* Fix untenable ultra precondition for removeServer.
57

68
* Fixed that the hotbackup agency lock is released under all circumstances using

arangod/Graph/GraphManager.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,12 +230,13 @@ Result GraphManager::checkForEdgeDefinitionConflicts(std::map<std::string, EdgeD
230230
}
231231

232232
OperationResult GraphManager::findOrCreateCollectionsByEdgeDefinitions(
233-
std::map<std::string, EdgeDefinition> const& edgeDefinitions,
233+
Graph const& graph, std::map<std::string, EdgeDefinition> const& edgeDefinitions,
234234
bool waitForSync, VPackSlice options) {
235235
for (auto const& it : edgeDefinitions) {
236236
EdgeDefinition const& edgeDefinition = it.second;
237237
OperationResult res =
238-
findOrCreateCollectionsByEdgeDefinition(edgeDefinition, waitForSync, options);
238+
findOrCreateCollectionsByEdgeDefinition(graph, edgeDefinition,
239+
waitForSync, options);
239240

240241
if (res.fail()) {
241242
return res;
@@ -246,7 +247,8 @@ OperationResult GraphManager::findOrCreateCollectionsByEdgeDefinitions(
246247
}
247248

248249
OperationResult GraphManager::findOrCreateCollectionsByEdgeDefinition(
249-
EdgeDefinition const& edgeDefinition, bool waitForSync, VPackSlice const options) {
250+
Graph const& graph, EdgeDefinition const& edgeDefinition, bool waitForSync,
251+
VPackSlice const options) {
250252
std::string const& edgeCollection = edgeDefinition.getName();
251253
std::shared_ptr<LogicalCollection> def =
252254
getCollectionByName(ctx()->vocbase(), edgeCollection);
@@ -274,6 +276,11 @@ OperationResult GraphManager::findOrCreateCollectionsByEdgeDefinition(
274276
if (res.fail()) {
275277
return res;
276278
}
279+
} else {
280+
auto res = graph.validateCollection(*def.get());
281+
if (res.fail()) {
282+
return OperationResult{std::move(res)};
283+
}
277284
}
278285
}
279286

arangod/Graph/GraphManager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,11 @@ class GraphManager {
102102
/// @brief find or create collections by EdgeDefinitions
103103
////////////////////////////////////////////////////////////////////////////////
104104
OperationResult findOrCreateCollectionsByEdgeDefinitions(
105-
std::map<std::string, EdgeDefinition> const& edgeDefinitions,
105+
Graph const& graph, std::map<std::string, EdgeDefinition> const& edgeDefinitions,
106106
bool waitForSync, VPackSlice options);
107107

108-
OperationResult findOrCreateCollectionsByEdgeDefinition(EdgeDefinition const& edgeDefinition,
108+
OperationResult findOrCreateCollectionsByEdgeDefinition(Graph const& graph,
109+
EdgeDefinition const& edgeDefinition,
109110
bool waitForSync,
110111
VPackSlice options);
111112

arangod/Graph/GraphOperations.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ OperationResult GraphOperations::editEdgeDefinition(VPackSlice edgeDefinitionSli
236236
collectionsOptions.openObject();
237237
_graph.createCollectionOptions(collectionsOptions, waitForSync);
238238
collectionsOptions.close();
239-
result = gmngr.findOrCreateCollectionsByEdgeDefinition(edgeDefinition, waitForSync,
239+
result = gmngr.findOrCreateCollectionsByEdgeDefinition(_graph, edgeDefinition, waitForSync,
240240
collectionsOptions.slice());
241241
if (result.fail()) {
242242
return result;

0 commit comments

Comments
 (0)
0