Files
openide/python/pluginJava
Mikhail Golubev 7b6cc1fe1f 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
2020-09-25 20:03:59 +00:00
..