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

ASF subversion and git services commented on ATLAS-2774:
--------------------------------------------------------

Commit daabed1312c73916136eacf09218300d75bb8f9b in atlas's branch 
refs/heads/branch-0.8 from [~mad...@apache.org]
[ https://git-wip-us.apache.org/repos/asf?p=atlas.git;h=daabed1 ]

ATLAS-2774: enhancement to support parameterized delete-type (hard or soft) per 
API call

(cherry picked from commit d003ddb33b16a0a67e6b7f7eae29c1638a4d0971)


> Options for hard and soft delete of instances
> ---------------------------------------------
>
>                 Key: ATLAS-2774
>                 URL: https://issues.apache.org/jira/browse/ATLAS-2774
>             Project: Atlas
>          Issue Type: New Feature
>            Reporter: Graham Wallis
>            Assignee: Ashutosh Mestry
>            Priority: Major
>         Attachments: ATLAS-2774-Soft-and-hard-delete-impl.patch, 
> ATLAS-2774-branch-0.8.patch, ATLAS-2774-master.patch
>
>
> *Overview*
> For Entities and Relationships, the following delete behaviors are desired.
> Atlas can be configured to offer hard delete (only). Alternatively it can be 
> configured to offer soft-delete. Configuration is achieved by setting the 
> delete handler configuration property (see atlas-application.properties) to 
> either the SoftDeleteHandlerV1 or the HardDeleteHandlerV1. The default (for 
> when the property is not set) is to use the SoftDeleteHandlerV1.
> The AtlasEntityStoreV2 deleteById() and deleteByIds() and methods and the 
> AtlasRelationshipStoreV2 deleteById() method are sensitive to the above 
> configuration. When the configuration is soft these methods will perform a 
> soft delete; when it is hard they will perform a hard delete.
> In addition to the above methods, the AtlasEntityStoreV2 and 
> AtlasRelationshipStoreV2 offer a (new) purgeById() method that ALWAYS 
> performs a hard delete. This is true regardless of which delete handler has 
> been configured. When the configuration is hard, the purgeById() methods and 
> deleteById() methods are essentially equivalent. When the configuration is 
> soft, the purgeById() methods continue to provide a hard delete capability.
> The AtlasEntityStoreV2 deleteById(), deleteByIds() and purgeById() methods 
> will delete the specified entities and any relationships to which they are 
> connected. The AtlasRelationshipStoreV2 deleteById() and purgeById() methods 
> will delete the specified relationship. Deletion of a relationship may cause 
> an upate to an entity to which the relationhsip is connected, if it changes 
> the propagation of classifications, for example.
> In a hard delete or purge operation, an affected entity and relationship will 
> be removed from the graph and will not be returned in response to any future 
> queries. This is true regardless of whether the affected entity or 
> relationship has already been soft deleted or not. i.e. it's status could 
> initially be ACTIVE or DELETED. Following the operation it will not exist.
> In a soft delete, the affected entities and relationships (that initially 
> have status ACTIVE) are updated to set the status to DELETED. These instances 
> can still be returned from queries and searches if the appropriate control is 
> selected (to include deleted instances). Without that control selected they 
> will not be returned.
> *Use Case for soft delete*
> Soft delete provides a 'safe' means of deleting instances from the repository 
> whilst preserving an audit trail and (if supported by the repository) 
> enabling a deleted instance to be restored (to ACTIVE status).
> *Use Cases for hard delete*
> One use case for hard delete is to permanently remove soft-deleted items some 
> period of time after they were soft deleted.
>  Another use case for hard delete is to is to correct (clean up after) a 
> mistake in which a potentially large batch of incomplete/corrupted/wrong 
> metadata is loaded and needs to be fully removed.
> *Use Scenario for an OMAS user*
> An OMAS provides a delete function that does NOT offer the user a choice of 
> hard/soft. The OMAS's delete function will invoke the relevant soft delete 
> method provided by the OMRS - deleteEntity or deleteRelationship. These are 
> both soft delete methods.
> The Atlas OMRS Connector's deleteEntity/deleteRelationship methods will check 
> whether Atlas is configured for hard or soft delete. If Atlas is configured 
> for hard delete then soft-delete is not possible, and the method will throw a 
> FunctionNotSupported exception which is caught by the OMAS.
> On catching this exception the OMAS author should automatically escalate the 
> soft delete to a hard delete by calling either of the mandatory OMRS 
> purgeEntity() or purgeRelationship() methods. In the Atlas OMRS Connector 
> these methods will invoke AtlasEntityStoreV2 purgeById() or 
> AtlasRelationshipStoreV2 purgeById(). The effect of this is that if soft 
> delete is not possible, a hard delete is used instead.
> An OMAS does NOT provide a purge capability to a non-privileged user, but a 
> suitably expert OMRS or Atlas repository administrator can explicitly issue a 
> purge call at the OMRS or Atlas interface, by calling purgeEntity() or 
> purgeRelationship() (or the relevant Atlas store's purgeById() method).
> *Use Scenario for an Administrator*
> As highlighted above, a suitably expert repository Administrator can invoke 
> the purgeEntity(), purgeRelationship() methods directly. They may need to do 
> this to permanently remove instances following an earlier soft-delete and the 
> timeout of a period of grace, or following a failed import or batch update.
> In addition to the above direct use by a repository administrator of the 
> 'purge' methods, an Administrator could alternatively use the deleteEntity(), 
> deleteRelationship() methods to perform soft deletes. The invoked method will 
> behave as described above for an OMAS - performing a soft-delete if possible 
> and throwing a FunctionNotSupported exception otherwise. In the latter case 
> (no support for soft-delete), the Administrator COULD then choose to issue a 
> purgeEntity(), purgeRelationship() call.
> *Restore of an entity or relationship*
> If an instance has been deleted using a soft-delete, the object still exists 
> but has a status of 'DELETED'. Whilst in the DELETED state, the object can be:
>  * optionally included/excluded from search results
>  * restored using the OMRS method for restoreEntity or restoreRelationship.
>  * purged from the repository using the purgeEntity() or purgeRelationship() 
> method (or the underlying Atlas store purgeById() method).
> The use case for restoring a soft-deleted entity or relationship is to 
> correct an accidental deletion, or possibly a deliberately deletion that was 
> performed for impact analysis.
> To restore an entity or relationship that has been soft-deleted, an OMAS user 
> or repository administrator can use the restoreEntity() or 
> restoreRealtionship() method of the OMRS connector.
> In the case of the Atlas OMRS Connector, the restoreEntity() and 
> restoreRealtionship() methods will invoke (new) Atlas store methods to update 
> the affected entities and relationships, leaving them in ACTIVE state and 
> with classifications that reflect the propagation options between all the 
> resulting active entities and relationships.
> *Within the Atlas Repository*
> The AtlasEntityStoreV2 and AtlasRelationshipStoreV2 provide additional 
> methods for purgeById() that perform a hard delete, regardless of the choice 
> of configured delete handler.
> The stores also provide additional methods to enable restore of an entity or 
> relationship that has been soft-deleted.
> *Within the Atlas OMRS Connector*
> The Atlas OMRS Connector will interrogate the Atlas repository configuration 
> to determine whether it is configuraed for soft or hard deletes. The Atlas 
> OMRS Connector implementations of deleteEntity() and deleteRelationship() 
> methods will therefore have prior knowledge as to whether it is feasible to 
> attempt to perform a soft-delete. If feasible, the soft-delete will be issued 
> to the relevant Atlas store. If not feasible, the methods will throw a 
> FunctionNotSupported exception.
> Also within the Atlas OMRS Connector, the mandatory OMRS purgeEntity(), 
> purgeRelationship() methods will invoke the Atlas stores' purgeById() methods 
> to perform permanent (hard) removal of an entity or relationship from the 
> repository. As outline above, these methods may be called either by an OMAS 
> that has attempted a soft-delete and been 'bounced' or called directly by an 
> Adminstrator.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to