Skip to content

Commit 0a90efb

Browse files
committed
fix a drastic query performance regression
1 parent 36a5c95 commit 0a90efb

File tree

2 files changed

+38
-33
lines changed

2 files changed

+38
-33
lines changed

Sources/UnidocDB/Crawling/UnidocDatabase.CrawlingWindows.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ extension UnidocDatabase.CrawlingWindows
8484
public
8585
func pull(with session:Mongo.Session) async throws -> Unidoc.CrawlingWindow?
8686
{
87-
try await session.run(
88-
command: Mongo.Find<Mongo.Single<Unidoc.CrawlingWindow>>.init(Self.name,
89-
limit: 1)
90-
{
91-
$0[.sort] = .init { $0[Unidoc.CrawlingWindow[.expires]] = (+) }
92-
$0[.hint] = Self.indexExpiration.id
93-
},
94-
against: self.database)
87+
let command:Mongo.Find<Mongo.Single<Unidoc.CrawlingWindow>> = .init(Self.name,
88+
limit: 1)
89+
{
90+
$0[.sort] = .init { $0[Unidoc.CrawlingWindow[.expires]] = (+) }
91+
$0[.hint] = Self.indexExpiration.id
92+
}
93+
94+
return try await session.run(command: command, against: self.database)
9595
}
9696

9797
/// Updates the state of an existing crawling window.

Sources/UnidocDB/Packages/UnidocDatabase.Packages.swift

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,23 @@ extension UnidocDatabase.Packages
9797
func findGitHub(repo id:Int32,
9898
with session:Mongo.Session) async throws -> Unidoc.PackageMetadata?
9999
{
100-
try await session.run(
101-
command: Mongo.Find<Mongo.Single<Unidoc.PackageMetadata>>.init(Self.name, limit: 1)
100+
let command:Mongo.Find<Mongo.Single<Unidoc.PackageMetadata>> = .init(Self.name,
101+
limit: 1)
102+
{
103+
$0[.filter] = .init
102104
{
103-
$0[.filter] = .init
104-
{
105-
$0[ Unidoc.PackageMetadata[.repo] /
106-
Unidoc.PackageRepo[.github] /
107-
Unidoc.PackageRepo.GitHubOrigin[.id]] = id
108-
}
109-
$0[.hint] = Self.indexRepoGitHub.id
110-
},
111-
against: self.database)
105+
// We need this to use the partial index, for some reason.
106+
$0[ Unidoc.PackageMetadata[.repo] /
107+
Unidoc.PackageRepo[.github]] = .init { $0[.exists] = true }
108+
109+
$0[ Unidoc.PackageMetadata[.repo] /
110+
Unidoc.PackageRepo[.github] /
111+
Unidoc.PackageRepo.GitHubOrigin[.id]] = id
112+
}
113+
$0[.hint] = Self.indexRepoGitHub.id
114+
}
115+
116+
return try await session.run(command: command, against: self.database)
112117
}
113118

114119
public
@@ -158,21 +163,21 @@ extension UnidocDatabase.Packages
158163
func stalest(_ limit:Int,
159164
with session:Mongo.Session) async throws -> [Unidoc.PackageMetadata]
160165
{
161-
try await session.run(
162-
command: Mongo.Find<Mongo.SingleBatch<Unidoc.PackageMetadata>>.init(Self.name,
163-
limit: limit)
166+
let command:Mongo.Find<Mongo.SingleBatch<Unidoc.PackageMetadata>> = .init(Self.name,
167+
limit: limit)
168+
{
169+
$0[.filter] = .init
164170
{
165-
$0[.filter] = .init
166-
{
167-
$0[Unidoc.PackageMetadata[.repo]] = .init { $0[.exists] = true }
168-
}
169-
$0[.sort] = .init
170-
{
171-
$0[Unidoc.PackageMetadata[.expires]] = (+)
172-
}
173-
$0[.hint] = Self.indexExpiration.id
174-
},
175-
against: self.database)
171+
$0[Unidoc.PackageMetadata[.repo]] = .init { $0[.exists] = true }
172+
}
173+
$0[.sort] = .init
174+
{
175+
$0[Unidoc.PackageMetadata[.expires]] = (+)
176+
}
177+
$0[.hint] = Self.indexExpiration.id
178+
}
179+
180+
return try await session.run(command: command, against: self.database)
176181
}
177182
}
178183
extension UnidocDatabase.Packages

0 commit comments

Comments
 (0)