Skip to content

Commit 2a703ae

Browse files
committed
objectify the Mongo.Session parameter into Unidoc.DB, which sacrifices Sendability, but greatly reduces the amount of forwarded function parameters
1 parent 38611e9 commit 2a703ae

File tree

81 files changed

+937
-1047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+937
-1047
lines changed

Sources/UnidocDB/Activity/Unidoc.DB.DocsFeed.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ extension Unidoc.DB
1111
{
1212
public
1313
let database:Mongo.Database
14+
public
15+
let session:Mongo.Session
1416

15-
@inlinable internal
16-
init(database:Mongo.Database)
17+
@inlinable
18+
init(database:Mongo.Database, session:Mongo.Session)
1719
{
1820
self.database = database
21+
self.session = session
1922
}
2023
}
2124
}
@@ -45,8 +48,7 @@ extension Unidoc.DB.DocsFeed:Mongo.CollectionModel
4548
extension Unidoc.DB.DocsFeed
4649
{
4750
public
48-
func push(_ activity:Activity<Unidoc.Edition>,
49-
with session:Mongo.Session) async throws -> Bool
51+
func push(_ activity:Activity<Unidoc.Edition>) async throws -> Bool
5052
{
5153
let (_, inserted):(Activity<Unidoc.Edition>, UnixMillisecond?) = try await session.run(
5254
command: Mongo.FindAndModify<Mongo.Upserting<

Sources/UnidocDB/Activity/Unidoc.DB.RepoFeed.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ extension Unidoc.DB
88
{
99
public
1010
let database:Mongo.Database
11+
public
12+
let session:Mongo.Session
1113

12-
@inlinable internal
13-
init(database:Mongo.Database)
14+
@inlinable
15+
init(database:Mongo.Database, session:Mongo.Session)
1416
{
1517
self.database = database
18+
self.session = session
1619
}
1720
}
1821
}
@@ -34,14 +37,14 @@ extension Unidoc.DB.RepoFeed:Mongo.CollectionModel
3437
extension Unidoc.DB.RepoFeed
3538
{
3639
public
37-
func last(_ count:Int, with session:Mongo.Session) async throws -> [Activity]
40+
func last(_ count:Int) async throws -> [Activity]
3841
{
39-
try await self.find(last: count, with: session)
42+
try await self.find(last: count)
4043
}
4144

4245
public
43-
func push(_ activity:Activity, with session:Mongo.Session) async throws
46+
func push(_ activity:Activity) async throws
4447
{
45-
try await self.insert(some: activity, with: session)
48+
try await self.insert(some: activity)
4649
}
4750
}

Sources/UnidocDB/Building/Unidoc.DB.PackageBuilds.swift

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ extension Unidoc.DB
1111
{
1212
public
1313
let database:Mongo.Database
14+
public
15+
let session:Mongo.Session
1416

15-
@inlinable internal
16-
init(database:Mongo.Database)
17+
@inlinable
18+
init(database:Mongo.Database, session:Mongo.Session)
1719
{
1820
self.database = database
21+
self.session = session
1922
}
2023
}
2124
}
@@ -61,8 +64,7 @@ extension Unidoc.DB.PackageBuilds:Mongo.CollectionModel
6164
extension Unidoc.DB.PackageBuilds
6265
{
6366
public
64-
func selectBuild(await awaits:Bool,
65-
with session:Mongo.Session) async throws -> Unidoc.BuildMetadata?
67+
func selectBuild(await awaits:Bool) async throws -> Unidoc.BuildMetadata?
6668
{
6769
// Find a build, any build...
6870
if let build:Unidoc.BuildMetadata = try await session.run(
@@ -123,8 +125,7 @@ extension Unidoc.DB.PackageBuilds
123125
public
124126
func submitBuild(
125127
request:Unidoc.BuildRequest<Void>,
126-
package:Unidoc.Package,
127-
with session:Mongo.Session) async throws -> Bool
128+
package:Unidoc.Package) async throws -> Bool
128129
{
129130
do
130131
{
@@ -161,8 +162,7 @@ extension Unidoc.DB.PackageBuilds
161162

162163
public
163164
func cancelBuild(
164-
package:Unidoc.Package,
165-
with session:Mongo.Session) async throws -> Bool
165+
package:Unidoc.Package) async throws -> Bool
166166
{
167167
let deleted:Mongo.DeleteResponse = try await session.run(
168168
command: Mongo.Delete<Mongo.One>.init(Self.name)
@@ -187,8 +187,7 @@ extension Unidoc.DB.PackageBuilds
187187
func assignBuild(
188188
request:Unidoc.BuildBehavior,
189189
package:Unidoc.Package,
190-
builder:Unidoc.Account,
191-
with session:Mongo.Session) async throws -> Bool
190+
builder:Unidoc.Account) async throws -> Bool
192191
{
193192
let (update, _):(Unidoc.BuildMetadata?, Never?) = try await session.run(
194193
command: Mongo.FindAndModify<Mongo.Existing<Unidoc.BuildMetadata>>.init(Self.name,
@@ -224,8 +223,7 @@ extension Unidoc.DB.PackageBuilds
224223
public
225224
func updateBuild(
226225
package:Unidoc.Package,
227-
entered:Unidoc.BuildStage,
228-
with session:Mongo.Session) async throws -> Unidoc.BuildMetadata?
226+
entered:Unidoc.BuildStage) async throws -> Unidoc.BuildMetadata?
229227
{
230228
let (status, _):(Unidoc.BuildMetadata?, Never?) = try await session.run(
231229
command: Mongo.FindAndModify<Mongo.Existing<Unidoc.BuildMetadata>>.init(Self.name,
@@ -257,8 +255,7 @@ extension Unidoc.DB.PackageBuilds
257255
func finishBuild(
258256
package:Unidoc.Package,
259257
failure:Unidoc.BuildFailure? = nil,
260-
logs:[Unidoc.BuildLogType] = [],
261-
with session:Mongo.Session) async throws -> Unidoc.BuildMetadata?
258+
logs:[Unidoc.BuildLogType] = []) async throws -> Unidoc.BuildMetadata?
262259
{
263260
let (status, _):(Unidoc.BuildMetadata?, Never?) = try await session.run(
264261
command: Mongo.FindAndModify<Mongo.Existing<Unidoc.BuildMetadata>>.init(Self.name,
@@ -302,10 +299,9 @@ extension Unidoc.DB.PackageBuilds
302299
}
303300

304301
public
305-
func lintBuilds(startedBefore:UnixMillisecond,
306-
with session:Mongo.Session) async throws -> Int
302+
func lintBuilds(startedBefore:UnixMillisecond) async throws -> Int
307303
{
308-
try await self.killBuilds(with: session)
304+
try await self.killBuilds
309305
{
310306
$0[Unidoc.BuildMetadata[.progress]] { $0[.exists] = true }
311307
$0[Unidoc.BuildMetadata[.progress] / Unidoc.BuildProgress[.started]]
@@ -316,19 +312,17 @@ extension Unidoc.DB.PackageBuilds
316312
}
317313

318314
public
319-
func killBuilds(builder:Unidoc.Account,
320-
with session:Mongo.Session) async throws -> Int
315+
func killBuilds(builder:Unidoc.Account) async throws -> Int
321316
{
322-
try await self.killBuilds(with: session)
317+
try await self.killBuilds
323318
{
324319
$0[Unidoc.BuildMetadata[.progress]] { $0[.exists] = true }
325320
$0[Unidoc.BuildMetadata[.progress] / Unidoc.BuildProgress[.builder]] = builder
326321
}
327322
}
328323

329324
private
330-
func killBuilds(with session:Mongo.Session,
331-
where predicate:(inout Mongo.PredicateEncoder) -> ()) async throws -> Int
325+
func killBuilds(where predicate:(inout Mongo.PredicateEncoder) -> ()) async throws -> Int
332326
{
333327
let failure:Unidoc.BuildFailure = .killed
334328
let response:Mongo.UpdateResponse = try await session.run(

Sources/UnidocDB/Crawling/Unidoc.DB.CrawlingTickets.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ extension Unidoc.DB
1010
{
1111
public
1212
let database:Mongo.Database
13+
public
14+
let session:Mongo.Session
1315

14-
@inlinable internal
15-
init(database:Mongo.Database)
16+
@inlinable
17+
init(database:Mongo.Database, session:Mongo.Session)
1618
{
1719
self.database = database
20+
self.session = session
1821
}
1922
}
2023
}
@@ -43,13 +46,12 @@ extension Unidoc.DB.CrawlingTickets
4346
/// Creates tickets that do not exist yet, or updates the state of existing tickets. This
4447
/// won’t overwrite the scheduled times in existing tickets.
4548
public
46-
func create(tickets:[Unidoc.CrawlingTicket<Unidoc.Package>],
47-
with session:Mongo.Session) async throws -> Mongo.Updates<Unidoc.Package>
49+
func create(tickets:[Element]) async throws -> Mongo.Updates<Unidoc.Package>
4850
{
4951
let response:Mongo.UpdateResponse<Unidoc.Package> = try await session.run(
5052
command: Mongo.Update<Mongo.Many, Unidoc.Package>.init(Self.name)
5153
{
52-
for ticket:Unidoc.CrawlingTicket<Unidoc.Package> in tickets
54+
for ticket:Element in tickets
5355
{
5456
$0
5557
{
@@ -77,8 +79,7 @@ extension Unidoc.DB.CrawlingTickets
7779
}
7880

7981
public
80-
func find(stalest limit:Int,
81-
with session:Mongo.Session) async throws -> [Unidoc.CrawlingTicket<Unidoc.Package>]
82+
func find(stalest limit:Int) async throws -> [Element]
8283
{
8384
let command:Mongo.Find<Mongo.SingleBatch<Element>> = .init(Self.name,
8485
limit: limit)
@@ -95,10 +96,9 @@ extension Unidoc.DB.CrawlingTickets
9596
public
9697
func move(ticket:Unidoc.Package,
9798
time:UnixMillisecond,
98-
last:UnixMillisecond? = nil,
99-
with session:Mongo.Session) async throws -> Bool?
99+
last:UnixMillisecond? = nil) async throws -> Bool?
100100
{
101-
try await self.update(with: session)
101+
try await self.update
102102
{
103103
$0
104104
{

Sources/UnidocDB/Crawling/Unidoc.DB.CrawlingWindows.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ extension Unidoc.DB
1010
{
1111
public
1212
let database:Mongo.Database
13+
public
14+
let session:Mongo.Session
1315

14-
@inlinable internal
15-
init(database:Mongo.Database)
16+
@inlinable
17+
init(database:Mongo.Database, session:Mongo.Session)
1618
{
1719
self.database = database
20+
self.session = session
1821
}
1922
}
2023
}
@@ -43,8 +46,7 @@ extension Unidoc.DB.CrawlingWindows
4346
/// Creates crawling windows, starting from today and going back up to `days` number of
4447
/// days. If some of the windows already exist, they are not reinitialized.
4548
public
46-
func create(previous days:Days,
47-
with session:Mongo.Session) async throws -> Mongo.Updates<UnixMillisecond>
49+
func create(previous days:Days) async throws -> Mongo.Updates<UnixMillisecond>
4850
{
4951
let response:Mongo.UpdateResponse<UnixMillisecond> = try await session.run(
5052
command: Mongo.Update<Mongo.One, Element.ID>.init(Self.name)
@@ -80,7 +82,7 @@ extension Unidoc.DB.CrawlingWindows
8082
/// Retrieves a single window that has not been crawled yet. Windows with lower expirations
8183
/// will be returned first.
8284
public
83-
func pull(with session:Mongo.Session) async throws -> Unidoc.CrawlingWindow?
85+
func pull() async throws -> Unidoc.CrawlingWindow?
8486
{
8587
let command:Mongo.Find<Mongo.Single<Unidoc.CrawlingWindow>> = .init(Self.name,
8688
limit: 1)
@@ -95,8 +97,8 @@ extension Unidoc.DB.CrawlingWindows
9597
/// Updates the state of an existing crawling window.
9698
@discardableResult
9799
public
98-
func push(window:Unidoc.CrawlingWindow, with session:Mongo.Session) async throws -> Bool?
100+
func push(window:Unidoc.CrawlingWindow) async throws -> Bool?
99101
{
100-
try await self.update(some: window, with: session)
102+
try await self.update(some: window)
101103
}
102104
}

Sources/UnidocDB/Editions/Unidoc.DB.EditionDependencies.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ extension Unidoc.DB
99
{
1010
public
1111
let database:Mongo.Database
12+
public
13+
let session:Mongo.Session
1214

1315
@inlinable
14-
init(database:Mongo.Database)
16+
init(database:Mongo.Database, session:Mongo.Session)
1517
{
1618
self.database = database
19+
self.session = session
1720
}
1821
}
1922
}
@@ -65,8 +68,7 @@ extension Unidoc.DB.EditionDependencies:Mongo.CollectionModel
6568
extension Unidoc.DB.EditionDependencies
6669
{
6770
func create(dependent:Unidoc.Edition,
68-
from boundaries:[Unidoc.Mesh.Boundary],
69-
with session:Mongo.Session) async throws
71+
from boundaries:[Unidoc.Mesh.Boundary]) async throws
7072
{
7173
let dependencies:[Unidoc.EditionDependency] = boundaries.reduce(into: [])
7274
{
@@ -88,7 +90,7 @@ extension Unidoc.DB.EditionDependencies
8890
let _:Mongo.Insertions = try response.insertions()
8991
}
9092

91-
func clear(dependent:Unidoc.Edition, with session:Mongo.Session) async throws
93+
func clear(dependent:Unidoc.Edition) async throws
9294
{
9395
let response:Mongo.DeleteResponse = try await session.run(
9496
command: Mongo.Delete<Mongo.Many>.init(Self.name)
@@ -112,10 +114,9 @@ extension Unidoc.DB.EditionDependencies
112114
/// ``Unidoc.EditionDependency/targetABI`` does not match `dependencyABI`.
113115
@discardableResult
114116
func update(dependencyABI:MD5,
115-
dependency:Unidoc.Edition,
116-
with session:Mongo.Session) async throws -> Int
117+
dependency:Unidoc.Edition) async throws -> Int
117118
{
118-
try await self.updateMany(with: session)
119+
try await self.updateMany
119120
{
120121
$0
121122
{

Sources/UnidocDB/Editions/Unidoc.DB.Editions.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ extension Unidoc.DB
1212
{
1313
public
1414
let database:Mongo.Database
15+
public
16+
let session:Mongo.Session
1517

16-
@inlinable internal
17-
init(database:Mongo.Database)
18+
@inlinable
19+
init(database:Mongo.Database, session:Mongo.Session)
1820
{
1921
self.database = database
22+
self.session = session
2023
}
2124
}
2225
}
@@ -103,10 +106,9 @@ extension Unidoc.DB.Editions:Mongo.CollectionModel
103106
extension Unidoc.DB.Editions:Mongo.RecodableModel
104107
{
105108
public
106-
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)
109+
func recode() async throws -> (modified:Int, of:Int)
107110
{
108111
try await self.recode(through: Unidoc.EditionMetadata.self,
109-
with: session,
110112
by: .now.advanced(by: .seconds(60)))
111113
}
112114
}

0 commit comments

Comments
 (0)