Skip to content

Commit 9b3654b

Browse files
authored
C++ migration: port write stream-related part of FSTRemoteStore (#2335)
1 parent a2e13d5 commit 9b3654b

18 files changed

+377
-372
lines changed

Firestore/Example/Tests/Local/FSTLocalStoreTests.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ - (void)acknowledgeMutationWithVersion:(FSTTestSnapshotVersion)documentVersion {
153153
transformResults:nil];
154154
FSTMutationBatchResult *result = [FSTMutationBatchResult resultWithBatch:batch
155155
commitVersion:version
156-
mutationResults:@[ mutationResult ]
156+
mutationResults:{mutationResult}
157157
streamToken:nil];
158158
_lastChanges = [self.localStore acknowledgeBatchWithResult:result];
159159
}

Firestore/Example/Tests/SpecTests/FSTMockDatastore.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <memory>
2020
#include <unordered_map>
21+
#include <vector>
2122

2223
#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
2324
#include "Firestore/core/src/firebase/firestore/model/types.h"
@@ -40,7 +41,7 @@ class MockDatastore : public Datastore {
4041
auth::CredentialsProvider* credentials);
4142

4243
std::shared_ptr<WatchStream> CreateWatchStream(WatchStreamCallback* callback) override;
43-
std::shared_ptr<WriteStream> CreateWriteStream(id<FSTWriteStreamDelegate> delegate) override;
44+
std::shared_ptr<WriteStream> CreateWriteStream(WriteStreamCallback* callback) override;
4445

4546
/**
4647
* A count of the total number of requests sent to the watch stream since the beginning of the
@@ -82,7 +83,7 @@ class MockDatastore : public Datastore {
8283
int WritesSent() const;
8384

8485
/** Injects a write ack as though it had come from the backend in response to a write. */
85-
void AckWrite(const model::SnapshotVersion& version, NSArray<FSTMutationResult*>* results);
86+
void AckWrite(const model::SnapshotVersion& version, std::vector<FSTMutationResult*> results);
8687

8788
/** Injects a stream failure as though it had come from the backend. */
8889
void FailWrite(const util::Status& error);

Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#import "Firestore/Source/Local/FSTQueryData.h"
2626
#import "Firestore/Source/Model/FSTMutation.h"
2727
#import "Firestore/Source/Remote/FSTSerializerBeta.h"
28-
#import "Firestore/Source/Remote/FSTStream.h"
2928

3029
#include "Firestore/core/src/firebase/firestore/auth/credentials_provider.h"
3130
#include "Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.h"
@@ -161,18 +160,18 @@ void WriteWatchChange(const WatchChange& change, SnapshotVersion snap) {
161160
CredentialsProvider* credentials_provider,
162161
FSTSerializerBeta* serializer,
163162
GrpcConnection* grpc_connection,
164-
id<FSTWriteStreamDelegate> delegate,
163+
WriteStreamCallback* callback,
165164
MockDatastore* datastore)
166-
: WriteStream{worker_queue, credentials_provider, serializer, grpc_connection, delegate},
165+
: WriteStream{worker_queue, credentials_provider, serializer, grpc_connection, callback},
167166
datastore_{datastore},
168-
delegate_{delegate} {
167+
callback_{callback} {
169168
}
170169

171170
void Start() override {
172171
HARD_ASSERT(!open_, "Trying to start already started write stream");
173172
open_ = true;
174173
sent_mutations_ = {};
175-
[delegate_ writeStreamDidOpen];
174+
callback_->OnWriteStreamOpen();
176175
}
177176

178177
void Stop() override {
@@ -194,7 +193,7 @@ bool IsOpen() const override {
194193
void WriteHandshake() override {
195194
datastore_->IncrementWriteStreamRequests();
196195
SetHandshakeComplete();
197-
[delegate_ writeStreamDidCompleteHandshake];
196+
callback_->OnWriteStreamHandshakeComplete();
198197
}
199198

200199
void WriteMutations(NSArray<FSTMutation*>* mutations) override {
@@ -203,14 +202,14 @@ void WriteMutations(NSArray<FSTMutation*>* mutations) override {
203202
}
204203

205204
/** Injects a write ack as though it had come from the backend in response to a write. */
206-
void AckWrite(const SnapshotVersion& commitVersion, NSArray<FSTMutationResult*>* results) {
207-
[delegate_ writeStreamDidReceiveResponseWithVersion:commitVersion mutationResults:results];
205+
void AckWrite(const SnapshotVersion& commitVersion, std::vector<FSTMutationResult*> results) {
206+
callback_->OnWriteStreamMutationResult(commitVersion, std::move(results));
208207
}
209208

210209
/** Injects a failed write response as though it had come from the backend. */
211210
void FailStream(const Status& error) {
212211
open_ = false;
213-
[delegate_ writeStreamWasInterruptedWithError:error];
212+
callback_->OnWriteStreamClose(error);
214213
}
215214

216215
/**
@@ -236,7 +235,7 @@ int sent_mutations_count() const {
236235
bool open_ = false;
237236
std::queue<NSArray<FSTMutation*>*> sent_mutations_;
238237
MockDatastore* datastore_ = nullptr;
239-
id<FSTWriteStreamDelegate> delegate_ = nullptr;
238+
WriteStreamCallback* callback_ = nullptr;
240239
};
241240

242241
MockDatastore::MockDatastore(const core::DatabaseInfo& database_info,
@@ -257,11 +256,11 @@ int sent_mutations_count() const {
257256
return watch_stream_;
258257
}
259258

260-
std::shared_ptr<WriteStream> MockDatastore::CreateWriteStream(id<FSTWriteStreamDelegate> delegate) {
259+
std::shared_ptr<WriteStream> MockDatastore::CreateWriteStream(WriteStreamCallback* callback) {
261260
write_stream_ = std::make_shared<MockWriteStream>(
262261
worker_queue_, credentials_,
263262
[[FSTSerializerBeta alloc] initWithDatabaseID:&database_info_->database_id()],
264-
grpc_connection(), delegate, this);
263+
grpc_connection(), callback, this);
265264

266265
return write_stream_;
267266
}
@@ -290,8 +289,9 @@ int sent_mutations_count() const {
290289
return write_stream_->sent_mutations_count();
291290
}
292291

293-
void MockDatastore::AckWrite(const SnapshotVersion& version, NSArray<FSTMutationResult*>* results) {
294-
write_stream_->AckWrite(version, results);
292+
void MockDatastore::AckWrite(const SnapshotVersion& version,
293+
std::vector<FSTMutationResult*> results) {
294+
write_stream_->AckWrite(version, std::move(results));
295295
}
296296

297297
void MockDatastore::FailWrite(const Status& error) {

Firestore/Example/Tests/SpecTests/FSTSpecTests.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ - (void)doWriteAck:(NSDictionary *)spec {
363363

364364
FSTMutationResult *mutationResult = [[FSTMutationResult alloc] initWithVersion:version
365365
transformResults:nil];
366-
[self.driver receiveWriteAckWithVersion:version mutationResults:@[ mutationResult ]];
366+
[self.driver receiveWriteAckWithVersion:version mutationResults:{mutationResult}];
367367
}
368368

369369
- (void)doFailWrite:(NSDictionary *)spec {

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <map>
2020
#include <unordered_map>
21+
#include <vector>
2122

2223
#import "Firestore/Source/Remote/FSTRemoteStore.h"
2324

@@ -195,9 +196,9 @@ typedef std::unordered_map<firebase::firestore::auth::User,
195196
* the mutation. Snapshot versions must be monotonically increasing.
196197
* @param mutationResults The mutation results for the write that is being acked.
197198
*/
198-
- (FSTOutstandingWrite *)receiveWriteAckWithVersion:
199-
(const firebase::firestore::model::SnapshotVersion &)commitVersion
200-
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults;
199+
- (FSTOutstandingWrite *)
200+
receiveWriteAckWithVersion:(const firebase::firestore::model::SnapshotVersion &)commitVersion
201+
mutationResults:(std::vector<FSTMutationResult *>)mutationResults;
201202

202203
/**
203204
* A count of the mutations written to the write stream by the FSTSyncEngine, but not yet

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,13 @@ - (void)changeUser:(const User &)user {
273273

274274
- (FSTOutstandingWrite *)receiveWriteAckWithVersion:(const SnapshotVersion &)commitVersion
275275
mutationResults:
276-
(NSArray<FSTMutationResult *> *)mutationResults {
276+
(std::vector<FSTMutationResult *>)mutationResults {
277277
FSTOutstandingWrite *write = [self currentOutstandingWrites].firstObject;
278278
[[self currentOutstandingWrites] removeObjectAtIndex:0];
279279
[self validateNextWriteSent:write.write];
280280

281-
_workerQueue->EnqueueBlocking([&] { _datastore->AckWrite(commitVersion, mutationResults); });
281+
_workerQueue->EnqueueBlocking(
282+
[&] { _datastore->AckWrite(commitVersion, std::move(mutationResults)); });
282283

283284
return write;
284285
}

Firestore/Source/Model/FSTMutationBatch.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#import <Foundation/Foundation.h>
1818

1919
#include <unordered_map>
20+
#include <vector>
2021

2122
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
2223
#include "Firestore/core/src/firebase/firestore/model/document_key_set.h"
@@ -102,13 +103,13 @@ NS_ASSUME_NONNULL_BEGIN
102103
*/
103104
+ (instancetype)resultWithBatch:(FSTMutationBatch *)batch
104105
commitVersion:(firebase::firestore::model::SnapshotVersion)commitVersion
105-
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
106+
mutationResults:(std::vector<FSTMutationResult *>)mutationResults
106107
streamToken:(nullable NSData *)streamToken;
107108

108109
- (const firebase::firestore::model::SnapshotVersion &)commitVersion;
110+
- (const std::vector<FSTMutationResult *> &)mutationResults;
109111

110112
@property(nonatomic, strong, readonly) FSTMutationBatch *batch;
111-
@property(nonatomic, strong, readonly) NSArray<FSTMutationResult *> *mutationResults;
112113
@property(nonatomic, strong, readonly, nullable) NSData *streamToken;
113114

114115
- (const firebase::firestore::model::DocumentVersionMap &)docVersions;

Firestore/Source/Model/FSTMutationBatch.mm

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ - (FSTMaybeDocument *_Nullable)applyToRemoteDocument:(FSTMaybeDocument *_Nullabl
8282
"applyTo: key %s doesn't match maybeDoc key %s", documentKey.ToString(),
8383
maybeDoc.key.ToString());
8484

85-
HARD_ASSERT(mutationBatchResult.mutationResults.count == self.mutations.count,
85+
HARD_ASSERT(mutationBatchResult.mutationResults.size() == self.mutations.count,
8686
"Mismatch between mutations length (%s) and results length (%s)",
87-
self.mutations.count, mutationBatchResult.mutationResults.count);
87+
self.mutations.count, mutationBatchResult.mutationResults.size());
8888

8989
for (NSUInteger i = 0; i < self.mutations.count; i++) {
9090
FSTMutation *mutation = self.mutations[i];
@@ -130,25 +130,26 @@ - (DocumentKeySet)keys {
130130
@interface FSTMutationBatchResult ()
131131
- (instancetype)initWithBatch:(FSTMutationBatch *)batch
132132
commitVersion:(SnapshotVersion)commitVersion
133-
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
133+
mutationResults:(std::vector<FSTMutationResult *>)mutationResults
134134
streamToken:(nullable NSData *)streamToken
135135
docVersions:(DocumentVersionMap)docVersions NS_DESIGNATED_INITIALIZER;
136136
@end
137137

138138
@implementation FSTMutationBatchResult {
139139
SnapshotVersion _commitVersion;
140+
std::vector<FSTMutationResult *> _mutationResults;
140141
DocumentVersionMap _docVersions;
141142
}
142143

143144
- (instancetype)initWithBatch:(FSTMutationBatch *)batch
144145
commitVersion:(SnapshotVersion)commitVersion
145-
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
146+
mutationResults:(std::vector<FSTMutationResult *>)mutationResults
146147
streamToken:(nullable NSData *)streamToken
147148
docVersions:(DocumentVersionMap)docVersions {
148149
if (self = [super init]) {
149150
_batch = batch;
150151
_commitVersion = std::move(commitVersion);
151-
_mutationResults = mutationResults;
152+
_mutationResults = std::move(mutationResults);
152153
_streamToken = streamToken;
153154
_docVersions = std::move(docVersions);
154155
}
@@ -159,17 +160,21 @@ - (instancetype)initWithBatch:(FSTMutationBatch *)batch
159160
return _commitVersion;
160161
}
161162

163+
- (const std::vector<FSTMutationResult *> &)mutationResults {
164+
return _mutationResults;
165+
}
166+
162167
- (const DocumentVersionMap &)docVersions {
163168
return _docVersions;
164169
}
165170

166171
+ (instancetype)resultWithBatch:(FSTMutationBatch *)batch
167172
commitVersion:(SnapshotVersion)commitVersion
168-
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
173+
mutationResults:(std::vector<FSTMutationResult *>)mutationResults
169174
streamToken:(nullable NSData *)streamToken {
170-
HARD_ASSERT(batch.mutations.count == mutationResults.count,
175+
HARD_ASSERT(batch.mutations.count == mutationResults.size(),
171176
"Mutations sent %s must equal results received %s", batch.mutations.count,
172-
mutationResults.count);
177+
mutationResults.size());
173178

174179
DocumentVersionMap docVersions;
175180
NSArray<FSTMutation *> *mutations = batch.mutations;
@@ -186,7 +191,7 @@ + (instancetype)resultWithBatch:(FSTMutationBatch *)batch
186191

187192
return [[FSTMutationBatchResult alloc] initWithBatch:batch
188193
commitVersion:std::move(commitVersion)
189-
mutationResults:mutationResults
194+
mutationResults:std::move(mutationResults)
190195
streamToken:streamToken
191196
docVersions:std::move(docVersions)];
192197
}

0 commit comments

Comments
 (0)