From 830c9e3e9fa786b1e776875e517337c334c7f4ea Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Tue, 28 Jan 2025 09:39:13 +0100 Subject: [PATCH] Versioning: don't wait for indexer before refresh indexing and versioning status updates can run concurrently since they don't interact with each other. git status refresh typically takes < 1s even in large projects, while indexing can take much longer. --- .../versioning/util/DelayScanRegistry.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/ide/versioning.util/src/org/netbeans/modules/versioning/util/DelayScanRegistry.java b/ide/versioning.util/src/org/netbeans/modules/versioning/util/DelayScanRegistry.java index 704ba8ff3c14..37aedd426466 100644 --- a/ide/versioning.util/src/org/netbeans/modules/versioning/util/DelayScanRegistry.java +++ b/ide/versioning.util/src/org/netbeans/modules/versioning/util/DelayScanRegistry.java @@ -35,9 +35,10 @@ public final class DelayScanRegistry { private final WeakHashMap registry; private static DelayScanRegistry instance; - private static int MAX_WAITING_TIME = 180000; // wait max 3 mins - private static int WAITING_PERIOD = 10000; + private static final int MAX_WAITING_TIME = 180000; // wait max 3 mins + private static final int WAITING_PERIOD = 10000; private static final boolean BLOCK_INDEFINITELY = "true".equals(System.getProperty("versioning.delayscan.nolimit", "false")); //NOI18N + private static final boolean NO_DELAY = "true".equals(System.getProperty("versioning.delayscan.disable", "false")); //NOI18N public static synchronized DelayScanRegistry getInstance() { if (instance == null) { @@ -47,7 +48,7 @@ public static synchronized DelayScanRegistry getInstance() { } private DelayScanRegistry () { - registry = new WeakHashMap(5); + registry = new WeakHashMap<>(5); } /** @@ -69,7 +70,7 @@ public boolean isDelayed (RequestProcessor.Task task, Logger logger, String logM // not interested } } - if (IndexingBridge.getInstance().isIndexingInProgress() + if (!NO_DELAY && IndexingBridge.getInstance().isIndexingInProgress() && (BLOCK_INDEFINITELY || scan.waitingLoops * WAITING_PERIOD < MAX_WAITING_TIME)) { // do not steal disk from openning projects and indexing tasks Level level = ++scan.waitingLoops < 10 ? Level.FINE : Level.INFO; @@ -84,11 +85,7 @@ public boolean isDelayed (RequestProcessor.Task task, Logger logger, String logM private DelayedScan getRegisteredScan(Task task) { synchronized (registry) { - DelayedScan scan = registry.get(task); - if (scan == null) { - registry.put(task, scan = new DelayedScan()); - } - return scan; + return registry.computeIfAbsent(task, k -> new DelayedScan()); } }