diff options
Diffstat (limited to 'src/main')
5 files changed, 21 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/ActionCache.java b/src/main/java/com/google/devtools/build/lib/actions/cache/ActionCache.java index 1e123e5f93..59eb31ff09 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/cache/ActionCache.java +++ b/src/main/java/com/google/devtools/build/lib/actions/cache/ActionCache.java @@ -187,6 +187,9 @@ public interface ActionCache { */ long save() throws IOException; + /** Clear the action cache, closing all opened file handle. */ + void clear(); + /** * Dumps action cache content into the given PrintStream. */ diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/CompactPersistentActionCache.java b/src/main/java/com/google/devtools/build/lib/actions/cache/CompactPersistentActionCache.java index 1dee81126b..95a986053e 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/cache/CompactPersistentActionCache.java +++ b/src/main/java/com/google/devtools/build/lib/actions/cache/CompactPersistentActionCache.java @@ -293,6 +293,12 @@ public class CompactPersistentActionCache implements ActionCache { } @Override + public void clear() { + indexer.clear(); + map.clear(); + } + + @Override public synchronized String toString() { StringBuilder builder = new StringBuilder(); // map.size() - 1 to avoid counting the validation key. diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java b/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java index bf8d4384fd..28970bfca3 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java +++ b/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java @@ -77,11 +77,6 @@ final class PersistentStringIndexer extends CanonicalStringIndexer { throw new UnsupportedOperationException(); } - @Override - public void clear() { - throw new UnsupportedOperationException(); - } - public void flush() { super.forceFlush(); } diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeWorkspace.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeWorkspace.java index 1f54096a38..d5b05da5e9 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeWorkspace.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeWorkspace.java @@ -208,10 +208,19 @@ public final class BlazeWorkspace { } /** + * Reinitializes the Skyframe evaluator. + */ + public void resetEvaluator() throws IOException { + skyframeExecutor.resetEvaluator(); + } + + /** * Removes in-memory caches. */ public void clearCaches() throws IOException { - skyframeExecutor.resetEvaluator(); + if (actionCache != null) { + actionCache.clear(); + } actionCache = null; FileSystemUtils.deleteTree(getCacheDirectory()); } diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java index 352c19635e..ef107885dd 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java @@ -227,6 +227,7 @@ public final class CleanCommand implements BlazeCommand { if (env.getOutputService() != null) { env.getOutputService().clean(); } + env.getBlazeWorkspace().clearCaches(); if (expunge) { LOG.info("Expunging..."); env.getRuntime().prepareForAbruptShutdown(); @@ -255,7 +256,7 @@ public final class CleanCommand implements BlazeCommand { asyncClean(env, outputBase, "Output base"); } else { LOG.info("Output cleaning..."); - env.getBlazeWorkspace().clearCaches(); + env.getBlazeWorkspace().resetEvaluator(); // In order to be sure that we delete everything, delete the workspace directory both for // --deep_execroot and for --nodeep_execroot. for (String directory : new String[] {workspaceDirectory, "execroot"}) { |