> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
> > Line 204 (original), 211 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897761#file1897761line211>
> >
> >     what happens for delete edges.
> 
> Graham Wallis wrote:
>     I think they can be ignored.
> 
> David Radley wrote:
>     I thought Atlas tried to reuse soft deleted edges - so we avoid creating 
> multiple duplicate deleted edges.

Good point - but from a quick look through the code - particularly the handling 
of relationship edges, I suspect that this is a much broader problem. For 
example in AtlasRelationshipStoreV1.createRelationship(), getRelationshipEdge() 
is called to determine whether there is an existing edge; if an edge is 
returned then it is assumed that therelationship already exists and an 
exception is thron; However, if you dig into the call stack it appears (see 
getRelationshipEdge and getEdgeForLabel) that a soft-deleted edge can be 
returned. 

So I think you have highlighted a genuine problem, but I also think it should 
maybe be the subject of a separate JIRA as I suspect it affects a broader set 
of code than this patch (which set out to fix the pre-existing behaviour in 
which a search over existing elements was abandoned prematurely dependeing on 
the order of the target related entities). I think a separate JIRA may be 
needed that holistically covers the resurrection of soft-deleted objects.


> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java
> > Lines 364 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897762#file1897762line369>
> >
> >     I do not understand this comment or the following code line. What does 
> > "attribute is a relationship " mean? We are looping through the possible 
> > relationship attributes as defined in the entityType and we find that the 
> > entity does not have this relationship attribute. Why does 
> > entity.getAttribute(attrName); give us a value when     
> >     entity.hasRelationshipAttribute(attrName) does not?
> 
> Graham Wallis wrote:
>     This was to cater for what happens during import service, when you get a 
> partial entity. i.e. you could be reading an entity that *should* have a 
> reference to another but you haven't read the other entity yet. So you have a 
> kind of dangling, incomplete reference. You can find out from the entityType 
> that it should have a relationship attribute, but if you try to use 
> getRelationshipAttribute() to read it you will not get it. But knowing from 
> the type that this is a relationship, we can use the more general 
> getAttribute(). If you don't do this then the result is the object reference 
> will not be recorded, which means that the entity store will not do a 
> preCreate and the entity graph mapper will not be able to find the attribute 
> vertex, so it barfs and gives up.
> 
> David Radley wrote:
>     Ok that makes sense. Please could you add a comment to this effect.

Done


> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java
> > Lines 370 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897762#file1897762line375>
> >
> >     can we move this line and the line below outside the if else- as they 
> > are repeated in each section.
> 
> Graham Wallis wrote:
>     Personally I quite like it the way it is - I think it is clearer.
> 
> David Radley wrote:
>     It is duplicated code, it should be clearer and simpler to have the code 
> once. When I looked at the code I assumed there was some subtle different 
> between the lines that I was missing - so I found it took me more time  to 
> read. I do not feel strongly about style - so if you decide to drop the 
> issue, that is fine by me.

Well, I changed it anyway - I was feeling kind ;-)


> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
> > Lines 965 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897765#file1897765line979>
> >
> >     or empty
> 
> Graham Wallis wrote:
>     ?
> 
> David Radley wrote:
>     The comment talks of checking null, but the code checks for it being 
> empty. I suggest adding "or empty" to the comment to keep it in line withe 
> the code

The CollectionUtils test for non-emptiness checks both - something is deemed to 
be not empty if it is neither null nor (non-null but) empty.


> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
> > Lines 1033 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897765#file1897765line1047>
> >
> >     could we check the relationship guid? If this was specified in the new 
> > elements we should match it. Or can this not be specified?
> 
> Graham Wallis wrote:
>     I don't know - it is not obvious to me that that's possible; I was seeing 
> entity guids, types and unique attributes in the AtlasObjectIds in the 
> mutation contexts. Is it possible to retrieve a relationship GUID as well?
> 
> David Radley wrote:
>     I suspect that many (all?) of the AtlasObjectIds are actually 
> AtlasRelatedObjectIds - so you could cast to that and get the relationship 
> guid.

I can see how to get the relaionshipGuid from the new element (an 
Atlas[Related]ObjectId) - and have added code to extract that and log it - but 
it is not clear to me how to retrieve the comparative relationshipGuid of the 
existing edge, without navigating via the vertices to locate the relationship - 
and we already check the vertex guids.

Interestingly - I tested with the above logging of the relationshipGuid of the 
new element - and the element appears to be not an AtlasRelatedObjectId. (It is 
an instance of AtlasObjectId).


> On Dec. 6, 2017, 2:54 p.m., David Radley wrote:
> > repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
> > Lines 1146 (patched)
> > <https://reviews.apache.org/r/63879/diff/3/?file=1897765#file1897765line1160>
> >
> >     I do not understand what this if doing. it looks like the delete 
> > handler has done a soft delete- why would a soft deleted edgebe added to 
> > newElementsCreated?
> 
> Graham Wallis wrote:
>     Because it adds to the overall number of elements processed; some of the 
> original variable names are a bit odd but I was trying to minimise changes.
> 
> David Radley wrote:
>     I suggest the variable name be something like elementsProcessed - so it 
> is clearer.

I agree - but this was one of the existing variables and I am loath to change 
it.


- Graham


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/63879/#review192983
-----------------------------------------------------------


On Nov. 20, 2017, 5:15 p.m., Graham Wallis wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/63879/
> -----------------------------------------------------------
> 
> (Updated Nov. 20, 2017, 5:15 p.m.)
> 
> 
> Review request for atlas.
> 
> 
> Repository: atlas
> 
> 
> Description
> -------
> 
> ATLAS-2262.patch
> This patch contains fixes for the EntityGraphMapper and related classes, to 
> fix intermittent relationship failures.
> This change means that an UPDATE operation will inspect the existing and new 
> relationships and compare them fully before adding/modifying edges. Matching 
> elements will be reused, new elements will be added, and redundant elements 
> will be discarded. The behaviour should be consistent regardless of which 
> graph provider is being used.
> 
> 
> Diffs
> -----
> 
>   repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java 
> 3e602431400677cbe0d8fe440732b02bb4a30a62 
>   
> repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java
>  739d610263a1b5bb8a0a9ff8183196ebe2c6294b 
>   
> repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1.java
>  b0f9845d6e92a6ef4bb53cccec537a0a54afb5e8 
>   
> repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AttributeMutationContext.java
>  b6d82dd834b8cc8b3bac630c084b91ac34dd0cec 
>   
> repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
>  f6a15b695e676bc035ce8336bcce7bacf1852ff9 
>   
> repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java
>  b24774d6376765f054022b9220b61769505e488c 
>   
> repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityStoreV1Test.java
>  fd1b6db0c4dd57cd70ba56f49b9c4751f6915858 
>   
> repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1Test.java
>  d207a6958ab9dce0bd9f8e08c8e49232ab7d2e8a 
> 
> 
> Diff: https://reviews.apache.org/r/63879/diff/3/
> 
> 
> Testing
> -------
> 
> Build with full tests with janus grap provider
> 
> 
> Thanks,
> 
> Graham Wallis
> 
>

Reply via email to