refactor: remove Semaphore::new(1) and use TaskQueue (#18014)

This commit is contained in:
David Sherret 2023-03-04 20:07:11 -05:00 committed by GitHub
parent 7afa3aceb0
commit 2f7222da8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 55 deletions

View file

@ -7,6 +7,7 @@ use deno_core::futures::future;
use deno_core::futures::future::LocalBoxFuture;
use deno_core::futures::FutureExt;
use deno_core::ModuleSpecifier;
use deno_core::TaskQueue;
use deno_graph::npm::NpmPackageNv;
use deno_graph::npm::NpmPackageReq;
use deno_graph::source::NpmResolver;
@ -34,7 +35,7 @@ pub struct CliGraphResolver {
npm_registry_api: NpmRegistryApi,
npm_resolution: NpmResolution,
package_json_deps_installer: PackageJsonDepsInstaller,
sync_download_semaphore: Option<Arc<tokio::sync::Semaphore>>,
sync_download_queue: Option<Arc<TaskQueue>>,
}
impl Default for CliGraphResolver {
@ -52,7 +53,7 @@ impl Default for CliGraphResolver {
npm_registry_api,
npm_resolution,
package_json_deps_installer: Default::default(),
sync_download_semaphore: Self::create_sync_download_semaphore(),
sync_download_queue: Self::create_sync_download_queue(),
}
}
}
@ -77,13 +78,13 @@ impl CliGraphResolver {
npm_registry_api,
npm_resolution,
package_json_deps_installer,
sync_download_semaphore: Self::create_sync_download_semaphore(),
sync_download_queue: Self::create_sync_download_queue(),
}
}
fn create_sync_download_semaphore() -> Option<Arc<tokio::sync::Semaphore>> {
fn create_sync_download_queue() -> Option<Arc<TaskQueue>> {
if crate::npm::should_sync_download() {
Some(Arc::new(tokio::sync::Semaphore::new(1)))
Some(Default::default())
} else {
None
}
@ -194,10 +195,10 @@ impl NpmResolver for CliGraphResolver {
let package_name = package_name.to_string();
let api = self.npm_registry_api.clone();
let deps_installer = self.package_json_deps_installer.clone();
let maybe_sync_download_semaphore = self.sync_download_semaphore.clone();
let maybe_sync_download_queue = self.sync_download_queue.clone();
async move {
let permit = if let Some(semaphore) = &maybe_sync_download_semaphore {
Some(semaphore.acquire().await.unwrap())
let permit = if let Some(task_queue) = &maybe_sync_download_queue {
Some(task_queue.acquire().await)
} else {
None
};