You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Jukka Zitting (JIRA)" <ji...@apache.org> on 2008/02/22 20:01:19 UTC
[jira] Resolved: (JCR-1394) FileDataStore Garbage Collector and
empty directories
[ https://issues.apache.org/jira/browse/JCR-1394?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jukka Zitting resolved JCR-1394.
--------------------------------
Resolution: Fixed
Assignee: Jukka Zitting
Good idea! Automatic directory removal added in revision 630285.
I used a slightly different mechanism that doesn't need multiple passes and that avoids accidentally removing the root directory of the data store:
if (file != directory && file.list().length == 0) {
file.delete();
}
> FileDataStore Garbage Collector and empty directories
> -----------------------------------------------------
>
> Key: JCR-1394
> URL: https://issues.apache.org/jira/browse/JCR-1394
> Project: Jackrabbit
> Issue Type: Improvement
> Components: jackrabbit-core
> Reporter: Jacco van Weert
> Assignee: Jukka Zitting
> Priority: Minor
> Fix For: 1.5
>
> Original Estimate: 0.17h
> Remaining Estimate: 0.17h
>
> When the org.apache.jackrabbit.core.data.GarbageCollector is called for a FileDataStore the file objects are correctly deleted.
> But the (sub)directories aren't removed.
> In time this will result in a huge tree of unused empty directories
> I've created a small chance in method FileDataStore.deleteOlderRecursive()
> It will remove a directory when it hasn't any files entries. Please note that currently the file objects are stored three levels deep, so it
> will take three gc calls remove all directories. Which I think is no problem because the currently implementation is lightweighted.
> >>>>> CURRENT FileDataStore.java
> private int deleteOlderRecursive(File file, long min) {
> int count = 0;
> if (file.isFile() && file.exists() && file.canWrite()) {
> if (file.lastModified() < min) {
> DataIdentifier id = new DataIdentifier(file.getName());
> if (!inUse.containsKey(id)) {
> file.delete();
> count++;
> }
> }
> } else if (file.isDirectory()) {
> File[] list = file.listFiles();
> for (int i = 0; i < list.length; i++) {
> count += deleteOlderRecursive(list[i], min);
> }
> }
> return count;
> }
> >>>>>>> NEW
> private int deleteOlderRecursive(File file, long min) {
> int count = 0;
> if (file.isFile() && file.exists() && file.canWrite()) {
> if (file.lastModified() < min) {
> DataIdentifier id = new DataIdentifier(file.getName());
> if (!inUse.containsKey(id)) {
> file.delete();
> count++;
> }
> }
> } else if (file.isDirectory()) {
> File[] list = file.listFiles();
> if (list.length==0) {
> file.delete();
> } else {
> for (int i = 0; i < list.length; i++) {
> count += deleteOlderRecursive(list[i], min);
> }
> }
> }
> return count;
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.