From fe051a3dc3759adbe89002569f959c60e0a031be Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Sat, 5 Nov 2016 23:04:35 +0100 Subject: [PATCH] flusher daemon flushes vfs attributes / contents completely: this is needed for better fault tolerance --- .../vfs/newvfs/persistent/FSRecords.java | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java index eb13ada0583b..1267acbb8763 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java @@ -384,7 +384,7 @@ public class FSRecords implements Forceable { @Override public void run() { if (lastModCount == ourLocalModificationCount) { - flushSome(); + flush(); } lastModCount = ourLocalModificationCount; } @@ -394,23 +394,25 @@ public class FSRecords implements Forceable { public static void force() { w.lock(); try { - if (myRecords != null) { - markClean(); - } - if (myNames != null) { - myNames.force(); - myAttributes.force(); - myContents.force(); - if (myContentHashesEnumerator != null) myContentHashesEnumerator.force(); - myRecords.force(); - } + doForce(); } finally { w.unlock(); } } - static void flushSome() { + private static void doForce() { + if (myNames != null) { + myNames.force(); + myAttributes.force(); + myContents.force(); + if (myContentHashesEnumerator != null) myContentHashesEnumerator.force(); + markClean(); + myRecords.force(); + } + } + + private static void flush() { if (!isDirty() || HeavyProcessLatch.INSTANCE.isRunning()) return; r.lock(); @@ -418,15 +420,7 @@ public class FSRecords implements Forceable { if (myFlushingFuture == null) { return; // avoid NPE when close has already taken place } - myNames.force(); - - final boolean attribsFlushed = myAttributes.flushSome(); - final boolean contentsFlushed = myContents.flushSome(); - if (myContentHashesEnumerator != null) myContentHashesEnumerator.force(); - if (attribsFlushed && contentsFlushed) { - markClean(); - myRecords.force(); - } + doForce(); } finally { r.unlock();