mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
Tweak response buffering (#224)
In my testing, we can both increase the number of concurrent requests and remove the `ready_chunks`.
This commit is contained in:
parent
1c5cdcd70a
commit
6da9c2f534
1 changed files with 44 additions and 50 deletions
|
@ -511,68 +511,62 @@ impl<'a, Context: BuildContext + Sync> Resolver<'a, Context> {
|
||||||
async fn fetch(&self, request_stream: UnboundedReceiver<Request>) -> Result<(), ResolveError> {
|
async fn fetch(&self, request_stream: UnboundedReceiver<Request>) -> Result<(), ResolveError> {
|
||||||
let mut response_stream = request_stream
|
let mut response_stream = request_stream
|
||||||
.map(|request| self.process_request(request))
|
.map(|request| self.process_request(request))
|
||||||
.buffer_unordered(32)
|
.buffer_unordered(50);
|
||||||
.ready_chunks(32);
|
|
||||||
|
|
||||||
while let Some(chunk) = response_stream.next().await {
|
while let Some(response) = response_stream.next().await {
|
||||||
for response in chunk {
|
match response? {
|
||||||
match response? {
|
Response::Package(package_name, metadata) => {
|
||||||
Response::Package(package_name, metadata) => {
|
trace!("Received package metadata for {}", package_name);
|
||||||
trace!("Received package metadata for {}", package_name);
|
|
||||||
|
|
||||||
// Group the distributions by version and kind, discarding any incompatible
|
// Group the distributions by version and kind, discarding any incompatible
|
||||||
// distributions.
|
// distributions.
|
||||||
let mut version_map: VersionMap = BTreeMap::new();
|
let mut version_map: VersionMap = BTreeMap::new();
|
||||||
for file in metadata.files {
|
for file in metadata.files {
|
||||||
if let Ok(name) = WheelFilename::from_str(file.filename.as_str()) {
|
if let Ok(name) = WheelFilename::from_str(file.filename.as_str()) {
|
||||||
if name.is_compatible(self.tags) {
|
if name.is_compatible(self.tags) {
|
||||||
let version = PubGrubVersion::from(name.version);
|
let version = PubGrubVersion::from(name.version);
|
||||||
|
|
||||||
match version_map.entry(version) {
|
match version_map.entry(version) {
|
||||||
std::collections::btree_map::Entry::Occupied(mut entry) => {
|
std::collections::btree_map::Entry::Occupied(mut entry) => {
|
||||||
if let DistributionFile::Sdist(_) = entry.get() {
|
if let DistributionFile::Sdist(_) = entry.get() {
|
||||||
// Wheels get precedence over source distributions
|
// Wheels get precedence over source distributions
|
||||||
entry.insert(DistributionFile::from(
|
|
||||||
WheelFile::from(file),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::collections::btree_map::Entry::Vacant(entry) => {
|
|
||||||
entry.insert(DistributionFile::from(WheelFile::from(
|
entry.insert(DistributionFile::from(WheelFile::from(
|
||||||
file,
|
file,
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
std::collections::btree_map::Entry::Vacant(entry) => {
|
||||||
} else if let Ok(name) = SourceDistributionFilename::parse(
|
entry.insert(DistributionFile::from(WheelFile::from(file)));
|
||||||
file.filename.as_str(),
|
}
|
||||||
&package_name,
|
|
||||||
) {
|
|
||||||
let version = PubGrubVersion::from(name.version);
|
|
||||||
if let std::collections::btree_map::Entry::Vacant(entry) =
|
|
||||||
version_map.entry(version)
|
|
||||||
{
|
|
||||||
entry.insert(DistributionFile::from(SdistFile::from(file)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if let Ok(name) =
|
||||||
|
SourceDistributionFilename::parse(file.filename.as_str(), &package_name)
|
||||||
|
{
|
||||||
|
let version = PubGrubVersion::from(name.version);
|
||||||
|
if let std::collections::btree_map::Entry::Vacant(entry) =
|
||||||
|
version_map.entry(version)
|
||||||
|
{
|
||||||
|
entry.insert(DistributionFile::from(SdistFile::from(file)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.index
|
self.index
|
||||||
.packages
|
.packages
|
||||||
.insert(package_name.clone(), version_map);
|
.insert(package_name.clone(), version_map);
|
||||||
}
|
}
|
||||||
Response::Wheel(file, metadata) => {
|
Response::Wheel(file, metadata) => {
|
||||||
trace!("Received file metadata for {}", file.filename);
|
trace!("Received file metadata for {}", file.filename);
|
||||||
self.index
|
self.index
|
||||||
.versions
|
.versions
|
||||||
.insert(file.hashes.sha256.clone(), metadata);
|
.insert(file.hashes.sha256.clone(), metadata);
|
||||||
}
|
}
|
||||||
Response::Sdist(file, metadata) => {
|
Response::Sdist(file, metadata) => {
|
||||||
trace!("Received sdist build metadata for {}", file.filename);
|
trace!("Received sdist build metadata for {}", file.filename);
|
||||||
self.index
|
self.index
|
||||||
.versions
|
.versions
|
||||||
.insert(file.hashes.sha256.clone(), metadata);
|
.insert(file.hashes.sha256.clone(), metadata);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue