jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fabián Mandelbaum <fmandelb...@gmail.com>
Subject Re: Delete complete version history when node is deleted.
Date Wed, 25 May 2011 14:52:15 GMT
Hello Raj.

Glad to hear I've helped you.

The jcr:baseVersion is automatically deleted IIRC. If you dig this ML
archives, you'll see this question arised (and answered) many times.

Once the file node is gone, its base version should be gone too.

On Wed, May 25, 2011 at 11:40 AM, Raj <db.rajeev@gmail.com> wrote:
> Dear Fabián,
>
> Thanks for sharing your code. Appreciate it.
>
> My current approach is identical. I can successfully delete all versions
> except jcr:baseVersion, which is the first version automatically created.
> I delete the node and all other versions. There is a saving of disk space,
> as the number of rows in version tables reduce.
>
> My question is, is it possible to get rid of jcr:baseVersion also ? If not,
> what is the overhead (in terms of space and references) ?
> Is it auto deleted in some way?
>
> regards,
> Raj
>
> 2011/5/25 Fabián Mandelbaum <fmandelbaum@gmail.com>
>
>> Hello Raj,
>>
>> Please find below an excerpt of some of our code that performs what
>> you want. It deletes all nt:file nodes stored under a certain node and
>> all the revisions of that file.
>>
>> Hope this helps.
>>
>> You should also take a look at
>> http://wiki.apache.org/jackrabbit/DataStore#Data_Store_Garbage_Collection
>> to claim back disk space once you delete lots of revisions.
>>
>> Good luck
>>
>> // Files+revisions
>>                StringBuilder sb = new StringBuilder();
>>                sb.append("SELECT * FROM [nt:file] WHERE
>> ISDESCENDANTNODE('/workspaces/").append(wname).append("/content')");
>> // NOI18N
>>                NodeIterator nit2 =
>> session.getWorkspace().getQueryManager().createQuery(sb.toString(),
>> Query.JCR_SQL2).execute().getNodes();
>>                VersionManager vm =
>> session.getWorkspace().getVersionManager();
>>                while (nit2.hasNext()) {
>>                    Node node = nit2.nextNode();
>>                    getLogger().fine(String.format("Processing file
>> stored at %s ...", node.getPath()));
>>                    VersionHistory vh =
>> vm.getVersionHistory(node.getNode(Node.JCR_CONTENT).getPath());
>>                    node.remove();
>>                    session.save();
>>                    for (VersionIterator vit = vh.getAllVersions();
>> vit.hasNext(); ) {
>>                        Version v = vit.nextVersion();
>>                        String vname = v.getName();
>>                        if (!"jcr:rootVersion".equals(vname)) { // NOI18N
>>                            vh.removeVersion(vname);
>>                            getLogger().fine(String.format("Deleted
>> version %s", vname)); // NOI18N
>>                         }
>>                    }
>>                }
>>
>>
>>
>> On Tue, May 24, 2011 at 12:34 PM, Raj <db.rajeev@gmail.com> wrote:
>> > Any pointers would be helpful.
>> >
>> > thanks,
>> > Raj
>> >
>> > On Mon, May 23, 2011 at 2:12 PM, Raj <db.rajeev@gmail.com> wrote:
>> >
>> >> hi All,
>> >>
>> >> My requirement is to delete the node and its history, as both won't be
>> >> useful as per application logic.
>> >> I would like to completely delete version history for the node as it
>> will
>> >> save us disk space and backup time.
>> >>
>> >>         Node childNode = parentNode.getNode("mynode"); /* node to be
>> >> completely deleted */
>> >>
>> >>      /* get a handle to version history before node deletion */
>> >>     VersionHistory vh =
>> >>
>> session.getWorkspace().getVersionManager().getVersionHistory(childNode.getPath());
>> >>     VersionIterator vitr = vh.getAllVersions();
>> >>     vitr.skip(1);          /* skipping as this is "jcr:baseVersion"
*/
>> >>     List<String> vnames = new ArrayList<String>();
>> >>         childNode.remove() ;
>> >>      session.save();
>> >>     while (vitr.hasNext()) {
>> >>     Version v = vitr.nextVersion();
>> >>     String vName = v.getName();
>> >>     vnames.add(vName);
>> >>     }
>> >>     for (String name: vnames) {
>> >>         vh.removeVersion(name);
>> >>     }
>> >>     session.save();
>> >>
>> >> Using this logic I can delete all version nodes, except the base node
>> >> "jcr:baseVersion".
>> >> Node hierarchy is root/parent/childNode. I don't have any references of
>> >> childNode from any other node in Jack rabbit tree.
>> >>
>> >> Would like to know --
>> >> 1. How to completely delete the version history of node, including
>> >> "jcr:baseVersion" ?
>> >>
>> >> 2. If it is impossible to delete them, what is the overhead (space and
>> >> references wise) of leaving then hanging?
>> >>
>> >> 3. As per Cedric's reply, "jcr:baseVersion" should be auto deleted. When
>> >> does the system actually delete it? During session.save() ?
>> >> How to verify it?
>> >>
>> >> Pasted below is the note about auto deletion -
>> >> http://web.archiveorange.com/archive/v/L1HBQ8pa9cRvxZlPyJ1C
>> >> ===================
>> >>
>> >> Hi all,
>> >>
>> >> As of 1.6, empty and unused VersionHistory will be automatically removed
>> >> after removal of the last Version (see
>> https://issues.apache.org/jira/browse/JCR-134).
>> >> This will ensure that the disk usage will not grow unnecessarily.
>> >>
>> >> Regards,
>> >> Cédric
>> >>
>> >> ===================
>> >>
>> >>
>> >> Related discussion -
>> http://stackoverflow.com/questions/3531597/cant-remove-version-in-jackrabbit
>> >>
>> >> thanks & regards,
>> >> Raj
>> >>
>> >>
>> >
>>
>>
>>
>> --
>> Fabián Mandelbaum
>> IS Engineer
>>
>



-- 
Fabián Mandelbaum
IS Engineer

Mime
View raw message