diff options
author | Greg Soltis <gsoltis@google.com> | 2018-01-17 12:23:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-17 12:23:45 -0800 |
commit | 70d401d4837c7ff76531e74d2f363783e651bd4e (patch) | |
tree | 5b7176d5a0e18375cbc37e20a673c110d0556b43 /Firestore/Source/Core | |
parent | b341356be10ab6860a021e0c4da4a1158f40ca8f (diff) |
Listen sequence numbers (#675)
* Generate and save sequence numbers for listens
* Add documentation
* Fix include path
* Fix unavailable comment
* Review feedback
Diffstat (limited to 'Firestore/Source/Core')
-rw-r--r-- | Firestore/Source/Core/FSTListenSequence.h | 37 | ||||
-rw-r--r-- | Firestore/Source/Core/FSTListenSequence.m | 34 | ||||
-rw-r--r-- | Firestore/Source/Core/FSTSyncEngine.m | 5 | ||||
-rw-r--r-- | Firestore/Source/Core/FSTTypes.h | 2 |
4 files changed, 78 insertions, 0 deletions
diff --git a/Firestore/Source/Core/FSTListenSequence.h b/Firestore/Source/Core/FSTListenSequence.h new file mode 100644 index 0000000..56d0e78 --- /dev/null +++ b/Firestore/Source/Core/FSTListenSequence.h @@ -0,0 +1,37 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import <Foundation/Foundation.h> + +#import "FSTTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * FSTListenSequence is a monotonic sequence. It is initialized with a minimum value to + * exceed. All subsequent calls to next will return increasing values. + */ +@interface FSTListenSequence : NSObject + +- (instancetype)initStartingAfter:(FSTListenSequenceNumber)after NS_DESIGNATED_INITIALIZER; + +- (id)init NS_UNAVAILABLE; + +- (FSTListenSequenceNumber)next; + +@end + +NS_ASSUME_NONNULL_END
\ No newline at end of file diff --git a/Firestore/Source/Core/FSTListenSequence.m b/Firestore/Source/Core/FSTListenSequence.m new file mode 100644 index 0000000..27ade7c --- /dev/null +++ b/Firestore/Source/Core/FSTListenSequence.m @@ -0,0 +1,34 @@ +#import "FSTListenSequence.h" + +NS_ASSUME_NONNULL_BEGIN + +#pragma mark - FSTListenSequence + +@interface FSTListenSequence () { + FSTListenSequenceNumber _previousSequenceNumber; +} + +@end + +@implementation FSTListenSequence + +#pragma mark - Constructors + +- (instancetype)initStartingAfter:(FSTListenSequenceNumber)after { + self = [super init]; + if (self) { + _previousSequenceNumber = after; + } + return self; +} + +#pragma mark - Public methods + +- (FSTListenSequenceNumber)next { + _previousSequenceNumber++; + return _previousSequenceNumber; +} + +@end + +NS_ASSUME_NONNULL_END
\ No newline at end of file diff --git a/Firestore/Source/Core/FSTSyncEngine.m b/Firestore/Source/Core/FSTSyncEngine.m index 27ab73e..f90c5dd 100644 --- a/Firestore/Source/Core/FSTSyncEngine.m +++ b/Firestore/Source/Core/FSTSyncEngine.m @@ -43,6 +43,10 @@ NS_ASSUME_NONNULL_BEGIN +// Limbo documents don't use persistence, and are eagerly GC'd. So, listens for them don't need +// real sequence numbers. +static const FSTListenSequenceNumber kIrrelevantSequenceNumber = -1; + #pragma mark - FSTQueryView /** @@ -490,6 +494,7 @@ NS_ASSUME_NONNULL_BEGIN FSTQuery *query = [FSTQuery queryWithPath:key.path]; FSTQueryData *queryData = [[FSTQueryData alloc] initWithQuery:query targetID:limboTargetID + listenSequenceNumber:kIrrelevantSequenceNumber purpose:FSTQueryPurposeLimboResolution]; self.limboKeysByTarget[@(limboTargetID)] = key; [self.remoteStore listenToTargetWithQueryData:queryData]; diff --git a/Firestore/Source/Core/FSTTypes.h b/Firestore/Source/Core/FSTTypes.h index b47bd0b..877ec94 100644 --- a/Firestore/Source/Core/FSTTypes.h +++ b/Firestore/Source/Core/FSTTypes.h @@ -26,6 +26,8 @@ typedef int32_t FSTBatchID; typedef int32_t FSTTargetID; +typedef int64_t FSTListenSequenceNumber; + typedef NSNumber FSTBoxedTargetID; /** |