You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Ankita Agarwal (Jira)" <ji...@apache.org> on 2021/08/11 12:54:00 UTC

[jira] [Updated] (JCRVLT-549) Mandatory node is not deleted but it's marked for deletion

     [ https://issues.apache.org/jira/browse/JCRVLT-549?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ankita Agarwal updated JCRVLT-549:
----------------------------------
    Description: 
Let say we have a rule in nodetype.cnd file

{code:xml}
[a:RolloutConfig] > mix:title
 orderable
 - a:trigger (string) mandatory
 + * (a:LiveSyncAction) mandatory

[a:LiveSyncAction] > nt:unstructured
{code}

When a package(first) is installed where parent node's(rolloutconfigs) .content.xml has:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
    jcr:mixinTypes="[rep:AccessControllable]"
    jcr:primaryType="sling:OrderedFolder"
    jcr:title="Rollout Configurations">
    <default/>
    <pushonmodify/>
    <activate/>
    <deactivate/>
</jcr:root>
 {code}

 and default node's has .content.xml
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:a="http://www.day.com/jcr/a/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    a:trigger="rollout"
    jcr:description="abc"
    jcr:primaryType="a:RolloutConfig"
    jcr:title="Standard rollout config">
    <contentUpdate jcr:primaryType="a:LiveSyncAction"/>
    <contentCopy jcr:primaryType="a:LiveSyncAction"/>
    <contentDelete jcr:primaryType="a:LiveSyncAction"/>
    <referencesUpdate jcr:primaryType="a:LiveSyncAction"/>
    <personalizationContentRollout jcr:primaryType="a:LiveSyncAction"/>
</jcr:root>
{code}

Installing another package(second) with the same cnd file but with different child node's(default node) content.xml:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:a"http://www.day.com/jcr/a/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    a:trigger="rollout"
    jcr:description="abc"
    jcr:primaryType="a:RolloutConfig"
    jcr:title="Standard rollout config">
    <activate jcr:primaryType="a:LiveSyncAction"/>
    <contentCopy jcr:primaryType="a:LiveSyncAction"/>
</jcr:root>
{code}
 marks the below node for Deletion but doesn't delete them because it's a mandatory node 
{code:xml}
D /libs/msm/wcm/rolloutconfigs/default/contentDelete
D /libs/msm/wcm/rolloutconfigs/default/contentUpdate
D /libs/msm/wcm/rolloutconfigs/default/orderChildren
D /libs/msm/wcm/rolloutconfigs/default/personalizationContentRollout
D /libs/msm/wcm/rolloutconfigs/default/referencesUpdate
{code}


The issue lies at https://github.com/apache/jackrabbit-filevault/blob/jackrabbit-filevault-3.2.8/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java#L1190 . Here, check for the child node is mandatory or not is done after marking it for delete importInfo.onDeleted(path) which gives wrong information that the child node is deleted but in the repository, it still exists.





> Mandatory node is not deleted but it's marked for deletion
> ----------------------------------------------------------
>
>                 Key: JCRVLT-549
>                 URL: https://issues.apache.org/jira/browse/JCRVLT-549
>             Project: Jackrabbit FileVault
>          Issue Type: Bug
>          Components: vlt
>    Affects Versions: 3.4.0
>            Reporter: Ankita Agarwal
>            Priority: Major
>
> Let say we have a rule in nodetype.cnd file
> {code:xml}
> [a:RolloutConfig] > mix:title
>  orderable
>  - a:trigger (string) mandatory
>  + * (a:LiveSyncAction) mandatory
> [a:LiveSyncAction] > nt:unstructured
> {code}
> When a package(first) is installed where parent node's(rolloutconfigs) .content.xml has:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
>     jcr:mixinTypes="[rep:AccessControllable]"
>     jcr:primaryType="sling:OrderedFolder"
>     jcr:title="Rollout Configurations">
>     <default/>
>     <pushonmodify/>
>     <activate/>
>     <deactivate/>
> </jcr:root>
>  {code}
>  and default node's has .content.xml
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <jcr:root xmlns:a="http://www.day.com/jcr/a/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
>     a:trigger="rollout"
>     jcr:description="abc"
>     jcr:primaryType="a:RolloutConfig"
>     jcr:title="Standard rollout config">
>     <contentUpdate jcr:primaryType="a:LiveSyncAction"/>
>     <contentCopy jcr:primaryType="a:LiveSyncAction"/>
>     <contentDelete jcr:primaryType="a:LiveSyncAction"/>
>     <referencesUpdate jcr:primaryType="a:LiveSyncAction"/>
>     <personalizationContentRollout jcr:primaryType="a:LiveSyncAction"/>
> </jcr:root>
> {code}
> Installing another package(second) with the same cnd file but with different child node's(default node) content.xml:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <jcr:root xmlns:a"http://www.day.com/jcr/a/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
>     a:trigger="rollout"
>     jcr:description="abc"
>     jcr:primaryType="a:RolloutConfig"
>     jcr:title="Standard rollout config">
>     <activate jcr:primaryType="a:LiveSyncAction"/>
>     <contentCopy jcr:primaryType="a:LiveSyncAction"/>
> </jcr:root>
> {code}
>  marks the below node for Deletion but doesn't delete them because it's a mandatory node 
> {code:xml}
> D /libs/msm/wcm/rolloutconfigs/default/contentDelete
> D /libs/msm/wcm/rolloutconfigs/default/contentUpdate
> D /libs/msm/wcm/rolloutconfigs/default/orderChildren
> D /libs/msm/wcm/rolloutconfigs/default/personalizationContentRollout
> D /libs/msm/wcm/rolloutconfigs/default/referencesUpdate
> {code}
> The issue lies at https://github.com/apache/jackrabbit-filevault/blob/jackrabbit-filevault-3.2.8/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java#L1190 . Here, check for the child node is mandatory or not is done after marking it for delete importInfo.onDeleted(path) which gives wrong information that the child node is deleted but in the repository, it still exists.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)