Skip to content

Commit 98ef362

Browse files
authored
fix(datastore-v1): synchronize multiple storageEngine initializations (#2389)
1 parent 6672b2a commit 98ef362

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

AmplifyPlugins/DataStore/AWSDataStoreCategoryPlugin/AWSDataStorePlugin.swift

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ import Combine
1010
import AWSPluginsCore
1111
import Foundation
1212

13+
enum InitStorageEngineResult {
14+
case successfullyInitialized
15+
case alreadyInitialized
16+
case failure(DataStoreError)
17+
}
18+
1319
final public class AWSDataStorePlugin: DataStoreCategoryPlugin {
1420

1521
public var key: PluginKey = "awsDataStorePlugin"
@@ -110,12 +116,12 @@ final public class AWSDataStorePlugin: DataStoreCategoryPlugin {
110116
/// Initializes the underlying storage engine
111117
/// - Returns: success if the engine is successfully initialized or
112118
/// a failure with a DataStoreError
113-
func initStorageEngine() -> DataStoreResult<Void> {
119+
func initStorageEngine() -> InitStorageEngineResult {
114120
storageEngineInitQueue.sync {
115121
if storageEngine != nil {
116-
return .successfulVoid
122+
return .alreadyInitialized
117123
}
118-
var result: DataStoreResult<Void>
124+
119125
do {
120126
if #available(iOS 13.0, *) {
121127
if self.dataStorePublisher == nil {
@@ -125,12 +131,13 @@ final public class AWSDataStorePlugin: DataStoreCategoryPlugin {
125131
try resolveStorageEngine(dataStoreConfiguration: dataStoreConfiguration)
126132
try storageEngine.setUp(modelSchemas: ModelRegistry.modelSchemas)
127133
try storageEngine.applyModelMigrations(modelSchemas: ModelRegistry.modelSchemas)
128-
result = .successfulVoid
134+
135+
return .successfullyInitialized
129136
} catch {
130-
result = .failure(causedBy: error)
131137
log.error(error: error)
138+
return .failure(.invalidOperation(causedBy: error))
132139
}
133-
return result
140+
134141
}
135142
}
136143

@@ -144,7 +151,9 @@ final public class AWSDataStorePlugin: DataStoreCategoryPlugin {
144151
}
145152

146153
switch initStorageEngine() {
147-
case .success:
154+
case .alreadyInitialized:
155+
completion(.successfulVoid)
156+
case .successfullyInitialized:
148157
storageEngine.startSync { result in
149158

150159
self.operationQueue.operations.forEach { operation in

0 commit comments

Comments
 (0)