aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source/Local/FSTLevelDBQueryCache.mm
diff options
context:
space:
mode:
authorGravatar Greg Soltis <gsoltis@google.com>2018-02-13 11:12:17 -0800
committerGravatar GitHub <noreply@github.com>2018-02-13 11:12:17 -0800
commit5f5f80825820487e1c7ed964c94a472e84adc552 (patch)
tree57ff66e437adc598a29976d24d6e14a5e9d57043 /Firestore/Source/Local/FSTLevelDBQueryCache.mm
parentc7c51a72d2c08284d3054730f6d40f86c9d579e2 (diff)
Keep track of number of queries in the query cache (#776)
* Implement schema versions * Style fixes * newlines, copyrights, assumptions * Fix nullability * Raw ptr -> shared_ptr * kVersionTableGlobal -> kVersionGlobalTable * Drop utils, move into static methods * Drop extra include * Add a few more comments * Move version constant into migrations file * formatting? * Fix comment * Split add and update queryData * Work on adding targetCount * More work on count * Using shared_ptr * Implement count for query cache * use quotes * Add cast * Styling * Revert year bump in copyright * Add adversarial key to migration test * Add comment * Fix style
Diffstat (limited to 'Firestore/Source/Local/FSTLevelDBQueryCache.mm')
-rw-r--r--Firestore/Source/Local/FSTLevelDBQueryCache.mm54
1 files changed, 39 insertions, 15 deletions
diff --git a/Firestore/Source/Local/FSTLevelDBQueryCache.mm b/Firestore/Source/Local/FSTLevelDBQueryCache.mm
index b3f4822..fe1bf19 100644
--- a/Firestore/Source/Local/FSTLevelDBQueryCache.mm
+++ b/Firestore/Source/Local/FSTLevelDBQueryCache.mm
@@ -18,7 +18,6 @@
#include <leveldb/db.h>
#include <leveldb/write_batch.h>
-#include <string>
#import "Firestore/Protos/objc/firestore/local/Target.pbobjc.h"
#import "Firestore/Source/Core/FSTQuery.h"
@@ -127,31 +126,50 @@ using leveldb::WriteOptions;
_db.reset();
}
-- (void)addQueryData:(FSTQueryData *)queryData group:(FSTWriteGroup *)group {
+- (void)saveQueryData:(FSTQueryData *)queryData group:(FSTWriteGroup *)group {
FSTTargetID targetID = queryData.targetID;
std::string key = [FSTLevelDBTargetKey keyWithTargetID:targetID];
[group setMessage:[self.serializer encodedQueryData:queryData] forKey:key];
+}
+
+- (void)saveMetadataInGroup:(FSTWriteGroup *)group {
+ [group setMessage:self.metadata forKey:[FSTLevelDBTargetGlobalKey key]];
+}
+
+- (BOOL)updateMetadataForQueryData:(FSTQueryData *)queryData {
+ BOOL updatedMetadata = NO;
+
+ if (queryData.targetID > self.metadata.highestTargetId) {
+ self.metadata.highestTargetId = queryData.targetID;
+ updatedMetadata = YES;
+ }
+
+ if (queryData.sequenceNumber > self.metadata.highestListenSequenceNumber) {
+ self.metadata.highestListenSequenceNumber = queryData.sequenceNumber;
+ updatedMetadata = YES;
+ }
+ return updatedMetadata;
+}
+
+- (void)addQueryData:(FSTQueryData *)queryData group:(FSTWriteGroup *)group {
+ [self saveQueryData:queryData group:group];
NSString *canonicalID = queryData.query.canonicalID;
std::string indexKey =
- [FSTLevelDBQueryTargetKey keyWithCanonicalID:canonicalID targetID:targetID];
+ [FSTLevelDBQueryTargetKey keyWithCanonicalID:canonicalID targetID:queryData.targetID];
std::string emptyBuffer;
[group setData:emptyBuffer forKey:indexKey];
- BOOL saveMetadata = NO;
- FSTPBTargetGlobal *metadata = self.metadata;
- if (targetID > metadata.highestTargetId) {
- metadata.highestTargetId = targetID;
- saveMetadata = YES;
- }
+ self.metadata.targetCount += 1;
+ [self updateMetadataForQueryData:queryData];
+ [self saveMetadataInGroup:group];
+}
- if (queryData.sequenceNumber > metadata.highestListenSequenceNumber) {
- metadata.highestListenSequenceNumber = queryData.sequenceNumber;
- saveMetadata = YES;
- }
+- (void)updateQueryData:(FSTQueryData *)queryData group:(FSTWriteGroup *)group {
+ [self saveQueryData:queryData group:group];
- if (saveMetadata) {
- [group setMessage:metadata forKey:[FSTLevelDBTargetGlobalKey key]];
+ if ([self updateMetadataForQueryData:queryData]) {
+ [self saveMetadataInGroup:group];
}
}
@@ -166,6 +184,12 @@ using leveldb::WriteOptions;
std::string indexKey =
[FSTLevelDBQueryTargetKey keyWithCanonicalID:queryData.query.canonicalID targetID:targetID];
[group removeMessageForKey:indexKey];
+ self.metadata.targetCount -= 1;
+ [self saveMetadataInGroup:group];
+}
+
+- (int32_t)count {
+ return self.metadata.targetCount;
}
/**