Skip to content

Commit fd483eb

Browse files
committed
support deflate symbolgraph compression
1 parent e503f80 commit fd483eb

File tree

6 files changed

+46
-3
lines changed

6 files changed

+46
-3
lines changed

Package.resolved

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ let package:Package = .init(
100100
from: "0.5.0")),
101101
.package(url: "https://github.com/tayloraswift/swift-mongodb", .upToNextMinor(
102102
from: "0.10.5")),
103+
.package(url: "https://github.com/tayloraswift/swift-png", .upToNextMinor(
104+
from: "4.1.0")),
103105

104106
.package(url: "https://github.com/apple/swift-atomics", .upToNextMinor(
105107
from: "1.2.0")),
@@ -595,6 +597,7 @@ let package:Package = .init(
595597
.target(name: "SwiftinitAssets"),
596598
.target(name: "SwiftinitPages"),
597599
.target(name: "SwiftinitPlugins"),
600+
.product(name: "LZ77", package: "swift-png"),
598601
]),
599602

600603

Sources/SwiftinitServer/Endpoints/Procedural/Swiftinit.GraphStorageEndpoint.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import BSON
22
import HTTP
3+
import LZ77
34
import MongoDB
45
import S3
56
import S3Client
@@ -29,6 +30,20 @@ extension Swiftinit.GraphStorageEndpoint:BlockingEndpoint
2930
if let bucket:AWS.S3.Bucket = server.bucket,
3031
let bson:[UInt8] = snapshot.move()
3132
{
33+
var deflator:LZ77.Deflator = .init(format: .zlib,
34+
level: 7,
35+
hint: 128 << 10)
36+
37+
deflator.push((consume bson)[...], last: true)
38+
39+
var bson:[UInt8] = []
40+
while let part:[UInt8] = deflator.pull()
41+
{
42+
bson += part
43+
}
44+
45+
snapshot.type = .bson_zz
46+
3247
let s3:AWS.S3.Client = .init(threads: server.context.threads,
3348
niossl: server.context.niossl,
3449
bucket: bucket)

Sources/SwiftinitServer/Plugins/Swiftinit.GraphLoader.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import BSON
2+
import LZ77
23
import S3
34
import S3Client
45
import SymbolGraphs
@@ -21,6 +22,19 @@ extension Swiftinit.GraphLoader:Unidoc.GraphLoader
2122
{
2223
func load(graph:Unidoc.GraphPath) async throws -> [UInt8]
2324
{
24-
try await self.s3.get(path: "\(graph)")
25+
var bytes:[UInt8] = try await self.s3.get(path: "\(graph)")
26+
27+
switch graph.type
28+
{
29+
case .bson:
30+
break
31+
32+
case .bson_zz:
33+
var inflator:LZ77.Inflator = .init(format: .zlib)
34+
try inflator.push((consume bytes)[...])
35+
bytes = inflator.pull()
36+
}
37+
38+
return bytes
2539
}
2640
}

Sources/UnidocRecords/Packages/Unidoc.GraphType.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ extension Unidoc
99
{
1010
/// Uncompressed BSON.
1111
case bson = 0
12+
/// Zlib-compressed BSON.
13+
case bson_zz = 1
1214
}
1315
}
1416
extension Unidoc.GraphType:CustomStringConvertible
@@ -18,7 +20,8 @@ extension Unidoc.GraphType:CustomStringConvertible
1820
{
1921
switch self
2022
{
21-
case .bson: "bson"
23+
case .bson: "bson"
24+
case .bson_zz: "bson.zz"
2225
}
2326
}
2427
}

Sources/UnidocRecords/Packages/Unidoc.Snapshot.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ extension Unidoc.Snapshot
107107
let document:BSON.Document = .init(encoding: inline)
108108

109109
self.size = Int64.init(document.bytes.count)
110-
self.type = .bson
111110
self.inline = nil
112111

113112
return document.bytes

0 commit comments

Comments
 (0)