[ 
https://issues.apache.org/jira/browse/ATLAS-535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15172921#comment-15172921
 ] 

David Kantor commented on ATLAS-535:
------------------------------------

I prefer option 3, as it provides a mechanism for modeling behavior that can 
have use cases other than delete rules.  For example, when exporting metadata 
from Atlas, there can be closure rules applied to attributes which determine 
which referenced objects are included in the export closure for a given type.  
When importing metadata into Atlas, there can be merge rules applied to 
attributes, which control how the data being imported is merged with existing 
data.  I understand that option 2 is easier to implement but my experience is 
that it is worth doing the "right" thing as early as possible - it always seems 
that once a mechanism is in place, it becomes harder to justify changing it as 
other priorities emerge and there never seems to be a good time to do the 
migration.

I think association rules should be defined on attributes, not on classes.  
Modelers may define multiple references between two different classes (we saw 
this many times), and there should be a way to specify different behavior for 
each reference to particular target type.  So I would suggest that 
AssociationRule should have an attributeName field rather than the targetType 
field.  The type system would validate/enforce that the type definition has the 
attribute specified in the rule.

My experience on other metadata repositories is that the overhead for checking 
rules is negligible (especially if the type information is cached as it is in 
Atlas) and that processing is dwarfed by the core processing of the operation 
on non-trivial data sets - rule checking doesn't show up on the radar when 
doing performance profiling.  

In the absence of rules, the default behavior will be in effect.  For example, 
with deletes, the default behavior is that composite references have the 
CASCADE delete rule.  

I'm not entirely comfortable with the proposal of adding a flag to the 
deleteEntities operation which controls whether deletes are cascaded.  I think 
that behavior should be modeled appropriately.  In other words, if the modeler 
defines a reference as composite, then they are saying the composite entities 
have no meaning on their own and should not live independently of their 
container; if the container is deleted then the composite entities should also 
be deleted.  If that is not the desired behavior, then the modeler should 
either define the reference as non-composite; OR, apply a delete rule to that 
reference which overrides the default rule of CASCADE and specifies a  
DeleteDisconnectRule on that reference.  If there is a compelling use case for 
overriding the default delete rules at deleteEntities method invocation time, 
then I guess it is worth considering extending deleteEntities to allow that.  I 
am not convinced that such a use case exists... but I'm open to being convinced 
:^)

> Support delete cascade efficently
> ---------------------------------
>
>                 Key: ATLAS-535
>                 URL: https://issues.apache.org/jira/browse/ATLAS-535
>             Project: Atlas
>          Issue Type: Sub-task
>            Reporter: Suma Shivaprasad
>             Fix For: 0.7-incubating
>
>
> Currently there are some limitation in the typesystem and modelling to 
> support delete cascades at scale through the isComposite flag



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to