Skip to content

Commit 6048a8e

Browse files
committed
Reuse object during dir cleanup instead of many created Sets
1 parent de94720 commit 6048a8e

File tree

1 file changed

+25
-28
lines changed

1 file changed

+25
-28
lines changed

src/org/opensolaris/opengrok/index/PendingFileCompleter.java

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
/*
21-
* Copyright (c) 2017, Chris Fraire <[email protected]>.
21+
* Copyright (c) 2017-2018, Chris Fraire <[email protected]>.
2222
*/
2323

2424
package org.opensolaris.opengrok.index;
@@ -277,16 +277,22 @@ private void doRename(PendingFileRenamingExec ren) throws IOException {
277277
}
278278
}
279279

280+
/**
281+
* For the unique set of parent directories among
282+
* {@link PendingFileDeletionExec#absoluteParent}, traverse in descending
283+
* order of path-length, and attempt to clean any empty directories.
284+
*/
280285
private void tryDeleteParents(List<PendingFileDeletionExec> dels) {
281286
Set<File> parents = new TreeSet<>(DESC_PATHLEN_COMPARATOR);
282287
dels.forEach((del) -> { parents.add(del.absoluteParent); });
283288

289+
SkeletonDirs skels = new SkeletonDirs();
284290
for (File dir : parents) {
285-
Set<File> children = findFilelessChildren(dir);
286-
children.forEach((childDir) -> {
291+
skels.reset();
292+
findFilelessChildren(skels, dir);
293+
skels.childDirs.forEach((childDir) -> {
287294
tryDeleteDirectory(childDir);
288295
});
289-
290296
tryDeleteDirectory(dir);
291297
}
292298
}
@@ -299,25 +305,10 @@ private void tryDeleteDirectory(File dir) {
299305
}
300306

301307
/**
302-
* Determines a DESC ordered set of eligible file-less child directories
303-
* for cleaning up.
304-
*/
305-
private Set<File> findFilelessChildren(File directory) {
306-
SkeletonDirs ret = new SkeletonDirs();
307-
findFilelessChildrenDeep(ret, directory);
308-
309-
Set<File> parents = new TreeSet<>(DESC_PATHLEN_COMPARATOR);
310-
// N.b. the `ineligible' field is not relevant here but only during
311-
// recursion. `childDirs' contains eligible directories.
312-
parents.addAll(ret.childDirs);
313-
return parents;
314-
}
315-
316-
/**
317-
* Recursive method used by {@link #findFilelessChildren(java.io.File)}.
308+
* Recursively determines eligible, file-less child directories for cleaning
309+
* up, and writes them to {@code skels}.
318310
*/
319-
private void findFilelessChildrenDeep(SkeletonDirs ret, File directory) {
320-
311+
private void findFilelessChildren(SkeletonDirs skels, File directory) {
321312
if (!directory.exists()) return;
322313
String dirPath = directory.getAbsolutePath();
323314
boolean topLevelIneligible = false;
@@ -337,9 +328,9 @@ private void findFilelessChildrenDeep(SkeletonDirs ret, File directory) {
337328
f.getAbsolutePath());
338329
}
339330
} else {
340-
findFilelessChildrenDeep(ret, f);
341-
if (!ret.ineligible) {
342-
ret.childDirs.add(f);
331+
findFilelessChildren(skels, f);
332+
if (!skels.ineligible) {
333+
skels.childDirs.add(f);
343334
} else {
344335
topLevelIneligible = true;
345336
if (LOGGER.isLoggable(Level.FINEST)) {
@@ -351,7 +342,7 @@ private void findFilelessChildrenDeep(SkeletonDirs ret, File directory) {
351342

352343
// Reset this flag so that other potential, eligible
353344
// children are evaluated.
354-
ret.ineligible = false;
345+
skels.ineligible = false;
355346
}
356347
}
357348
} catch (IOException ex) {
@@ -362,7 +353,7 @@ private void findFilelessChildrenDeep(SkeletonDirs ret, File directory) {
362353
}
363354
}
364355

365-
ret.ineligible = topLevelIneligible;
356+
skels.ineligible = topLevelIneligible;
366357
}
367358

368359
/**
@@ -404,6 +395,12 @@ public PendingFileRenamingExec(String source, String target) {
404395
*/
405396
private class SkeletonDirs {
406397
public boolean ineligible; // a flag used during recursion
407-
public List<File> childDirs = new ArrayList<>();
398+
public final Set<File> childDirs = new TreeSet<>(
399+
DESC_PATHLEN_COMPARATOR);
400+
401+
public void reset() {
402+
ineligible = false;
403+
childDirs.clear();
404+
}
408405
}
409406
}

0 commit comments

Comments
 (0)