Skip to content

Commit ba5b77b

Browse files
committed
Make targetTrieReady a Bool
1 parent 9f647cd commit ba5b77b

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

Sources/PackageCollections/Storage/SQLitePackageCollectionsStorage.swift

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
4545

4646
// Targets have in-memory trie in addition to SQLite FTS as optimization
4747
private let targetTrie = Trie<CollectionPackage>()
48-
private var targetTrieReady = ThreadSafeBox<Bool>()
48+
private var targetTrieReady = false
4949
private let populateTargetTrieLock = Lock()
5050

5151
init(location: SQLite.Location? = nil, configuration: Configuration = .init(), diagnosticsEngine: DiagnosticsEngine? = nil) {
@@ -504,7 +504,7 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
504504
var matchingCollections = Set<Model.CollectionIdentifier>()
505505

506506
// Trie is more performant for target search; use it if available
507-
if self.targetTrieReady.get() ?? false {
507+
if self.targetTrieReady {
508508
do {
509509
switch type {
510510
case .exactMatch:
@@ -763,42 +763,41 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
763763
internal func populateTargetTrie(callback: @escaping (Result<Void, Error>) -> Void = { _ in }) {
764764
DispatchQueue.sharedConcurrent.async(group: nil, qos: .background, flags: .assignCurrentContext) {
765765
do {
766-
try self.populateTargetTrieLock.withLock { // Prevents race to calling targetTrieReady.memoize
767-
_ = try self.targetTrieReady.memoize { // memoize body is only executed once
768-
// since running on low priority thread make sure the database has not already gone away
769-
switch (try self.withStateLock { self.state }) {
770-
case .disconnected, .disconnecting:
771-
return false
772-
default:
773-
break
774-
}
766+
try self.populateTargetTrieLock.withLock { // Prevent race to populate targetTrie
767+
// since running on low priority thread make sure the database has not already gone away
768+
switch (try self.withStateLock { self.state }) {
769+
case .disconnected, .disconnecting:
770+
self.targetTrieReady = false
771+
return
772+
default:
773+
break
774+
}
775775

776-
// Use FTS to build the trie
777-
let query = "SELECT collection_id_blob_base64, package_repository_url, name FROM \(Self.targetsFTSName);"
778-
try self.executeStatement(query) { statement in
779-
while let row = try statement.step() {
780-
#if os(Linux)
781-
// lock not required since executeStatement locks
782-
guard case .connected = self.state else {
783-
return
784-
}
785-
#else
786-
guard case .connected = (try self.withStateLock { self.state }) else {
787-
return
788-
}
789-
#endif
776+
// Use FTS to build the trie
777+
let query = "SELECT collection_id_blob_base64, package_repository_url, name FROM \(Self.targetsFTSName);"
778+
try self.executeStatement(query) { statement in
779+
while let row = try statement.step() {
780+
#if os(Linux)
781+
// lock not required since executeStatement locks
782+
guard case .connected = self.state else {
783+
return
784+
}
785+
#else
786+
guard case .connected = (try self.withStateLock { self.state }) else {
787+
return
788+
}
789+
#endif
790790

791-
let targetName = row.string(at: 2)
791+
let targetName = row.string(at: 2)
792792

793-
if let collectionData = Data(base64Encoded: row.string(at: 0)),
794-
let collection = try? self.decoder.decode(Model.CollectionIdentifier.self, from: collectionData) {
795-
let collectionPackage = CollectionPackage(collection: collection, package: PackageIdentity(url: row.string(at: 1)))
796-
self.targetTrie.insert(word: targetName.lowercased(), foundIn: collectionPackage)
797-
}
793+
if let collectionData = Data(base64Encoded: row.string(at: 0)),
794+
let collection = try? self.decoder.decode(Model.CollectionIdentifier.self, from: collectionData) {
795+
let collectionPackage = CollectionPackage(collection: collection, package: PackageIdentity(url: row.string(at: 1)))
796+
self.targetTrie.insert(word: targetName.lowercased(), foundIn: collectionPackage)
798797
}
799798
}
800-
return true
801799
}
800+
self.targetTrieReady = true
802801
}
803802
callback(.success(()))
804803
} catch {

0 commit comments

Comments
 (0)