Skip to content

Commit 10cc4f2

Browse files
authored
Migrate FSTListenSequenceNumber to C++ ListenSequenceNumber (#1703)
1 parent a9f8a8f commit 10cc4f2

25 files changed

+136
-104
lines changed

Firestore/Example/Tests/Local/FSTLRUGarbageCollectorTests.mm

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
using firebase::firestore::model::DocumentKey;
4343
using firebase::firestore::model::DocumentKeyHash;
4444
using firebase::firestore::model::DocumentKeySet;
45+
using firebase::firestore::model::ListenSequenceNumber;
4546
using firebase::firestore::model::Precondition;
4647
using firebase::firestore::model::TargetId;
4748

@@ -57,7 +58,7 @@ @implementation FSTLRUGarbageCollectorTests {
5758
id<FSTRemoteDocumentCache> _documentCache;
5859
id<FSTMutationQueue> _mutationQueue;
5960
FSTLRUGarbageCollector *_gc;
60-
FSTListenSequenceNumber _initialSequenceNumber;
61+
ListenSequenceNumber _initialSequenceNumber;
6162
User _user;
6263
}
6364

@@ -82,7 +83,7 @@ - (void)newTestResources {
8283
_queryCache = [_persistence queryCache];
8384
_documentCache = [_persistence remoteDocumentCache];
8485
_mutationQueue = [_persistence mutationQueueForUser:_user];
85-
_initialSequenceNumber = _persistence.run("start querycache", [&]() -> FSTListenSequenceNumber {
86+
_initialSequenceNumber = _persistence.run("start querycache", [&]() -> ListenSequenceNumber {
8687
[_mutationQueue start];
8788
_gc = ((id<FSTLRUDelegate>)_persistence.referenceDelegate).gc;
8889
return _persistence.currentSequenceNumber;
@@ -95,18 +96,17 @@ - (void)newTestResources {
9596

9697
#pragma mark - helpers
9798

98-
- (FSTListenSequenceNumber)sequenceNumberForQueryCount:(int)queryCount {
99-
return _persistence.run("gc", [&]() -> FSTListenSequenceNumber {
100-
return [_gc sequenceNumberForQueryCount:queryCount];
101-
});
99+
- (ListenSequenceNumber)sequenceNumberForQueryCount:(int)queryCount {
100+
return _persistence.run(
101+
"gc", [&]() -> ListenSequenceNumber { return [_gc sequenceNumberForQueryCount:queryCount]; });
102102
}
103103

104104
- (int)queryCountForPercentile:(int)percentile {
105105
return _persistence.run("query count",
106106
[&]() -> int { return [_gc queryCountForPercentile:percentile]; });
107107
}
108108

109-
- (int)removeQueriesThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
109+
- (int)removeQueriesThroughSequenceNumber:(ListenSequenceNumber)sequenceNumber
110110
liveQueries:(NSDictionary<NSNumber *, FSTQueryData *> *)liveQueries {
111111
return _persistence.run("gc", [&]() -> int {
112112
return [_gc removeQueriesUpThroughSequenceNumber:sequenceNumber liveQueries:liveQueries];
@@ -115,15 +115,15 @@ - (int)removeQueriesThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumbe
115115

116116
// Removes documents that are not part of a target or a mutation and have a sequence number
117117
// less than or equal to the given sequence number.
118-
- (int)removeOrphanedDocumentsThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber {
118+
- (int)removeOrphanedDocumentsThroughSequenceNumber:(ListenSequenceNumber)sequenceNumber {
119119
return _persistence.run("gc", [&]() -> int {
120120
return [_gc removeOrphanedDocumentsThroughSequenceNumber:sequenceNumber];
121121
});
122122
}
123123

124124
- (FSTQueryData *)nextTestQuery {
125125
TargetId targetID = ++_previousTargetID;
126-
FSTListenSequenceNumber listenSequenceNumber = _persistence.currentSequenceNumber;
126+
ListenSequenceNumber listenSequenceNumber = _persistence.currentSequenceNumber;
127127
FSTQuery *query = FSTTestQuery(absl::StrCat("path", targetID));
128128
return [[FSTQueryData alloc] initWithQuery:query
129129
targetID:targetID
@@ -586,8 +586,8 @@ - (void)testRemoveTargetsThenGC {
586586
// Add a couple docs from the newest target to the oldest (preserves them past the point where
587587
// newest was removed)
588588
// upperBound is the sequence number right before middleTarget is updated, then removed.
589-
FSTListenSequenceNumber upperBound = _persistence.run(
590-
"Add a couple docs from the newest target to the oldest", [&]() -> FSTListenSequenceNumber {
589+
ListenSequenceNumber upperBound = _persistence.run(
590+
"Add a couple docs from the newest target to the oldest", [&]() -> ListenSequenceNumber {
591591
[self updateTargetInTransaction:oldestTarget];
592592
for (const DocumentKey &docKey : newestDocsToAddToOldest) {
593593
[self addDocument:docKey toTarget:oldestTarget.targetID];

Firestore/Example/Tests/Local/FSTLevelDBQueryCacheTests.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
using firebase::Timestamp;
3434
using firebase::firestore::model::DatabaseId;
35+
using firebase::firestore::model::ListenSequenceNumber;
3536
using firebase::firestore::model::ResourcePath;
3637
using firebase::firestore::model::SnapshotVersion;
3738
using firebase::firestore::model::TargetId;
@@ -75,7 +76,7 @@ - (void)testMetadataPersistedAcrossRestarts {
7576
SnapshotVersion versionZero;
7677
XCTAssertEqual(versionZero, queryCache.lastRemoteSnapshotVersion);
7778

78-
FSTListenSequenceNumber minimumSequenceNumber = 1234;
79+
ListenSequenceNumber minimumSequenceNumber = 1234;
7980
TargetId lastTargetId = 5;
8081
SnapshotVersion lastVersion(Timestamp(1, 2));
8182

Firestore/Example/Tests/Local/FSTLocalStoreTests.mm

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@
4444

4545
namespace testutil = firebase::firestore::testutil;
4646
using firebase::firestore::auth::User;
47-
using firebase::firestore::model::SnapshotVersion;
4847
using firebase::firestore::model::DocumentKeySet;
48+
using firebase::firestore::model::ListenSequenceNumber;
49+
using firebase::firestore::model::SnapshotVersion;
4950
using firebase::firestore::model::TargetId;
5051

5152
NS_ASSUME_NONNULL_BEGIN
@@ -817,7 +818,7 @@ - (void)testPersistsResumeTokens {
817818

818819
FSTQuery *query = FSTTestQuery("foo/bar");
819820
FSTQueryData *queryData = [self.localStore allocateQuery:query];
820-
FSTListenSequenceNumber initialSequenceNumber = queryData.sequenceNumber;
821+
ListenSequenceNumber initialSequenceNumber = queryData.sequenceNumber;
821822
FSTBoxedTargetID *targetID = @(queryData.targetID);
822823
NSData *resumeToken = FSTTestResumeTokenFromSnapshotVersion(1000);
823824

@@ -844,7 +845,7 @@ - (void)testPersistsResumeTokens {
844845
XCTAssertEqualObjects(queryData2.resumeToken, resumeToken);
845846

846847
// The sequence number should have been bumped when we saved the new resume token.
847-
FSTListenSequenceNumber newSequenceNumber = queryData2.sequenceNumber;
848+
ListenSequenceNumber newSequenceNumber = queryData2.sequenceNumber;
848849
XCTAssertGreaterThan(newSequenceNumber, initialSequenceNumber);
849850
}
850851

Firestore/Example/Tests/Local/FSTQueryCacheTests.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,15 @@
3232
namespace testutil = firebase::firestore::testutil;
3333
using firebase::firestore::model::DocumentKey;
3434
using firebase::firestore::model::DocumentKeySet;
35+
using firebase::firestore::model::ListenSequenceNumber;
3536
using firebase::firestore::model::SnapshotVersion;
3637
using firebase::firestore::model::TargetId;
3738

3839
NS_ASSUME_NONNULL_BEGIN
3940

4041
@implementation FSTQueryCacheTests {
4142
FSTQuery *_queryRooms;
42-
FSTListenSequenceNumber _previousSequenceNumber;
43+
ListenSequenceNumber _previousSequenceNumber;
4344
TargetId _previousTargetID;
4445
FSTTestSnapshotVersion _previousSnapshotVersion;
4546
}
@@ -365,7 +366,7 @@ - (FSTQueryData *)queryDataWithQuery:(FSTQuery *)query {
365366

366367
- (FSTQueryData *)queryDataWithQuery:(FSTQuery *)query
367368
targetID:(TargetId)targetID
368-
listenSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
369+
listenSequenceNumber:(ListenSequenceNumber)sequenceNumber
369370
version:(FSTTestSnapshotVersion)version {
370371
NSData *resumeToken = FSTTestResumeTokenFromSnapshotVersion(version);
371372
return [[FSTQueryData alloc] initWithQuery:query

Firestore/Source/Core/FSTListenSequence.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
#import <Foundation/Foundation.h>
1818

19-
#import "Firestore/Source/Core/FSTTypes.h"
19+
#include "Firestore/core/src/firebase/firestore/model/types.h"
2020

2121
NS_ASSUME_NONNULL_BEGIN
2222

@@ -26,12 +26,13 @@ NS_ASSUME_NONNULL_BEGIN
2626
*/
2727
@interface FSTListenSequence : NSObject
2828

29-
- (instancetype)initStartingAfter:(FSTListenSequenceNumber)after NS_DESIGNATED_INITIALIZER;
29+
- (instancetype)initStartingAfter:(firebase::firestore::model::ListenSequenceNumber)after
30+
NS_DESIGNATED_INITIALIZER;
3031

3132
- (id)init NS_UNAVAILABLE;
3233

33-
- (FSTListenSequenceNumber)next;
34+
- (firebase::firestore::model::ListenSequenceNumber)next;
3435

3536
@end
3637

37-
NS_ASSUME_NONNULL_END
38+
NS_ASSUME_NONNULL_END

Firestore/Source/Core/FSTListenSequence.mm

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
#import "Firestore/Source/Core/FSTListenSequence.h"
1818

19+
using firebase::firestore::model::ListenSequenceNumber;
20+
1921
NS_ASSUME_NONNULL_BEGIN
2022

2123
#pragma mark - FSTListenSequence
2224

2325
@interface FSTListenSequence () {
24-
FSTListenSequenceNumber _previousSequenceNumber;
26+
ListenSequenceNumber _previousSequenceNumber;
2527
}
2628

2729
@end
@@ -30,7 +32,7 @@ @implementation FSTListenSequence
3032

3133
#pragma mark - Constructors
3234

33-
- (instancetype)initStartingAfter:(FSTListenSequenceNumber)after {
35+
- (instancetype)initStartingAfter:(ListenSequenceNumber)after {
3436
self = [super init];
3537
if (self) {
3638
_previousSequenceNumber = after;
@@ -40,11 +42,11 @@ - (instancetype)initStartingAfter:(FSTListenSequenceNumber)after {
4042

4143
#pragma mark - Public methods
4244

43-
- (FSTListenSequenceNumber)next {
45+
- (ListenSequenceNumber)next {
4446
_previousSequenceNumber++;
4547
return _previousSequenceNumber;
4648
}
4749

4850
@end
4951

50-
NS_ASSUME_NONNULL_END
52+
NS_ASSUME_NONNULL_END

Firestore/Source/Core/FSTSyncEngine.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,15 @@
5252
using firebase::firestore::model::BatchId;
5353
using firebase::firestore::model::DocumentKey;
5454
using firebase::firestore::model::DocumentKeySet;
55+
using firebase::firestore::model::ListenSequenceNumber;
5556
using firebase::firestore::model::SnapshotVersion;
5657
using firebase::firestore::model::TargetId;
5758

5859
NS_ASSUME_NONNULL_BEGIN
5960

6061
// Limbo documents don't use persistence, and are eagerly GC'd. So, listens for them don't need
6162
// real sequence numbers.
62-
static const FSTListenSequenceNumber kIrrelevantSequenceNumber = -1;
63+
static const ListenSequenceNumber kIrrelevantSequenceNumber = -1;
6364

6465
#pragma mark - FSTQueryView
6566

Firestore/Source/Core/FSTTypes.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ NS_ASSUME_NONNULL_BEGIN
2323
@class FSTMaybeDocument;
2424
@class FSTTransaction;
2525

26-
typedef int64_t FSTListenSequenceNumber;
27-
2826
/**
2927
* FSTVoidBlock is a block that's called when a specific event happens but that otherwise has
3028
* no information associated with it.

Firestore/Source/Local/FSTLRUGarbageCollector.h

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

1919
#import "Firestore/Source/Local/FSTQueryData.h"
2020
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
21+
#include "Firestore/core/src/firebase/firestore/model/types.h"
2122

2223
@protocol FSTQueryCache;
2324

2425
@class FSTLRUGarbageCollector;
2526

26-
extern const FSTListenSequenceNumber kFSTListenSequenceNumberInvalid;
27+
extern const firebase::firestore::model::ListenSequenceNumber kFSTListenSequenceNumberInvalid;
2728

2829
/**
2930
* Persistence layers intending to use LRU Garbage collection should implement this protocol. This
@@ -40,21 +41,24 @@ extern const FSTListenSequenceNumber kFSTListenSequenceNumberInvalid;
4041
/**
4142
* Enumerates all of the outstanding mutations.
4243
*/
43-
- (void)enumerateMutationsUsingBlock:(void (^)(const firebase::firestore::model::DocumentKey &key,
44-
FSTListenSequenceNumber sequenceNumber,
45-
BOOL *stop))block;
44+
- (void)enumerateMutationsUsingBlock:
45+
(void (^)(const firebase::firestore::model::DocumentKey &key,
46+
firebase::firestore::model::ListenSequenceNumber sequenceNumber,
47+
BOOL *stop))block;
4648

4749
/**
4850
* Removes all unreferenced documents from the cache that have a sequence number less than or equal
4951
* to the given sequence number. Returns the number of documents removed.
5052
*/
51-
- (int)removeOrphanedDocumentsThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber;
53+
- (int)removeOrphanedDocumentsThroughSequenceNumber:
54+
(firebase::firestore::model::ListenSequenceNumber)sequenceNumber;
5255

5356
/**
5457
* Removes all targets that are not currently being listened to and have a sequence number less than
5558
* or equal to the given sequence number. Returns the number of targets removed.
5659
*/
57-
- (int)removeTargetsThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
60+
- (int)removeTargetsThroughSequenceNumber:
61+
(firebase::firestore::model::ListenSequenceNumber)sequenceNumber
5862
liveQueries:(NSDictionary<NSNumber *, FSTQueryData *> *)liveQueries;
5963

6064
/** Access to the underlying LRU Garbage collector instance. */
@@ -81,19 +85,22 @@ extern const FSTListenSequenceNumber kFSTListenSequenceNumberInvalid;
8185
/**
8286
* Given a number of queries n, return the nth sequence number in the cache.
8387
*/
84-
- (FSTListenSequenceNumber)sequenceNumberForQueryCount:(NSUInteger)queryCount;
88+
- (firebase::firestore::model::ListenSequenceNumber)sequenceNumberForQueryCount:
89+
(NSUInteger)queryCount;
8590

8691
/**
8792
* Removes queries that are not currently live (as indicated by presence in the liveQueries map) and
8893
* have a sequence number less than or equal to the given sequence number.
8994
*/
90-
- (int)removeQueriesUpThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
95+
- (int)removeQueriesUpThroughSequenceNumber:
96+
(firebase::firestore::model::ListenSequenceNumber)sequenceNumber
9197
liveQueries:(NSDictionary<NSNumber *, FSTQueryData *> *)liveQueries;
9298

9399
/**
94100
* Removes all unreferenced documents from the cache that have a sequence number less than or equal
95101
* to the given sequence number. Returns the number of documents removed.
96102
*/
97-
- (int)removeOrphanedDocumentsThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber;
103+
- (int)removeOrphanedDocumentsThroughSequenceNumber:
104+
(firebase::firestore::model::ListenSequenceNumber)sequenceNumber;
98105

99106
@end

Firestore/Source/Local/FSTLRUGarbageCollector.mm

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@
2323
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
2424

2525
using firebase::firestore::model::DocumentKey;
26+
using firebase::firestore::model::ListenSequenceNumber;
2627

27-
const FSTListenSequenceNumber kFSTListenSequenceNumberInvalid = -1;
28+
const ListenSequenceNumber kFSTListenSequenceNumberInvalid = -1;
2829

2930
/**
3031
* RollingSequenceNumberBuffer tracks the nth sequence number in a series. Sequence numbers may be
@@ -33,26 +34,26 @@
3334
class RollingSequenceNumberBuffer {
3435
public:
3536
explicit RollingSequenceNumberBuffer(size_t max_elements)
36-
: max_elements_(max_elements), queue_(std::priority_queue<FSTListenSequenceNumber>()) {
37+
: max_elements_(max_elements), queue_(std::priority_queue<ListenSequenceNumber>()) {
3738
}
3839

3940
RollingSequenceNumberBuffer(const RollingSequenceNumberBuffer &other) = delete;
4041

4142
RollingSequenceNumberBuffer &operator=(const RollingSequenceNumberBuffer &other) = delete;
4243

43-
void AddElement(FSTListenSequenceNumber sequence_number) {
44+
void AddElement(ListenSequenceNumber sequence_number) {
4445
if (queue_.size() < max_elements_) {
4546
queue_.push(sequence_number);
4647
} else {
47-
FSTListenSequenceNumber highestValue = queue_.top();
48+
ListenSequenceNumber highestValue = queue_.top();
4849
if (sequence_number < highestValue) {
4950
queue_.pop();
5051
queue_.push(sequence_number);
5152
}
5253
}
5354
}
5455

55-
FSTListenSequenceNumber max_value() const {
56+
ListenSequenceNumber max_value() const {
5657
return queue_.top();
5758
}
5859

@@ -61,7 +62,7 @@ size_t size() const {
6162
}
6263

6364
private:
64-
std::priority_queue<FSTListenSequenceNumber> queue_;
65+
std::priority_queue<ListenSequenceNumber> queue_;
6566
const size_t max_elements_;
6667
};
6768

@@ -91,7 +92,7 @@ - (int)queryCountForPercentile:(NSUInteger)percentile {
9192
return setSize;
9293
}
9394

94-
- (FSTListenSequenceNumber)sequenceNumberForQueryCount:(NSUInteger)queryCount {
95+
- (ListenSequenceNumber)sequenceNumberForQueryCount:(NSUInteger)queryCount {
9596
if (queryCount == 0) {
9697
return kFSTListenSequenceNumberInvalid;
9798
}
@@ -102,19 +103,19 @@ - (FSTListenSequenceNumber)sequenceNumberForQueryCount:(NSUInteger)queryCount {
102103
ptr_to_buffer->AddElement(queryData.sequenceNumber);
103104
}];
104105
[_delegate enumerateMutationsUsingBlock:^(const DocumentKey &docKey,
105-
FSTListenSequenceNumber sequenceNumber, BOOL *stop) {
106+
ListenSequenceNumber sequenceNumber, BOOL *stop) {
106107
ptr_to_buffer->AddElement(sequenceNumber);
107108
}];
108109
return buffer.max_value();
109110
}
110111

111-
- (int)removeQueriesUpThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
112+
- (int)removeQueriesUpThroughSequenceNumber:(ListenSequenceNumber)sequenceNumber
112113
liveQueries:
113114
(NSDictionary<NSNumber *, FSTQueryData *> *)liveQueries {
114115
return [_delegate removeTargetsThroughSequenceNumber:sequenceNumber liveQueries:liveQueries];
115116
}
116117

117-
- (int)removeOrphanedDocumentsThroughSequenceNumber:(FSTListenSequenceNumber)sequenceNumber {
118+
- (int)removeOrphanedDocumentsThroughSequenceNumber:(ListenSequenceNumber)sequenceNumber {
118119
return [_delegate removeOrphanedDocumentsThroughSequenceNumber:sequenceNumber];
119120
}
120121

0 commit comments

Comments
 (0)