mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-43773 More robust synchronization of Python SDK background updates
Previous synchronization of background updates in PythonSdkUpdater was flawed. It didn't prevent us from launching several concurrent updates for the same SDK, but only blocked subsequent refresh tasks on a BlockingSet, still showing the corresponding progress indicators, piling up threads and exhausting system resources. The new implementation attempts to enforce the following policy: no two updates for the same SDK can be run concurrently, and all subsequent updates for an SDK already being refreshed are squashed and queued to be executed once it finished. We also adjusted PythonSdkUpdater interface to better indicate synchronization of individual methods. The old update() method, which performed a few of update operations in a blocking fashion, is now deprecated and replaced with more explicit scheduleUpdate(), always asynchronous, and internal updateVersionAndPathsSynchronouslyAndScheduleRemaining() that replicates the old behavior for the time being due to a number of existing usages, but is to be revised. Synchronous version and paths refreshes are now performed under a modal progress indicator. The legacy updating mechanism can be restored as a fallback if "python.use.new.sdk.updater" Registry flag is reset. Additionally, internal PyUpdateProjectSdk action was added for diagnostic. These changes are a result of a joint effort with Alexey Kniazev. GitOrigin-RevId: 6260cda7a22c4f5932f7d78eb6660a50e2b972b6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3f6bc5c1b9
commit
7b6cc1fe1f
+2
-3
@@ -2,9 +2,9 @@
|
||||
package com.jetbrains.python.inspections;
|
||||
|
||||
import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.facet.FacetManager;
|
||||
import com.intellij.ide.CommandLineInspectionProgressReporter;
|
||||
import com.intellij.ide.CommandLineInspectionProjectConfigurator;
|
||||
import com.intellij.facet.FacetManager;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.fileTypes.FileTypeRegistry;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -24,7 +24,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
public class PythonPluginCommandLineInspectionProjectConfigurator implements CommandLineInspectionProjectConfigurator {
|
||||
@@ -80,7 +79,7 @@ public class PythonPluginCommandLineInspectionProjectConfigurator implements Com
|
||||
ProjectJdkTable.getInstance().addJdk(sdk);
|
||||
});
|
||||
|
||||
PythonSdkUpdater.update(sdk, null, null, null);
|
||||
PythonSdkUpdater.updateVersionAndPathsSynchronouslyAndScheduleRemaining(sdk, null, null);
|
||||
}
|
||||
else {
|
||||
logger.reportMessage(1, "ERROR: Can't find Python interpreter");
|
||||
|
||||
Reference in New Issue
Block a user