Skip to content

Commit 177e69d

Browse files
author
Greg Soltis
authored
Use orphaned docs as part of GC calculation (#1355)
* Use orphaned documents in sequence number count
1 parent ca6e1ee commit 177e69d

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

packages/firestore/src/local/indexeddb_persistence.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,8 +1075,23 @@ export class IndexedDbLruDelegate implements ReferenceDelegate, LruDelegate {
10751075
this.garbageCollector = new LruGarbageCollector(this);
10761076
}
10771077

1078-
getTargetCount(txn: PersistenceTransaction): PersistencePromise<number> {
1079-
return this.db.getQueryCache().getQueryCount(txn);
1078+
getSequenceNumberCount(
1079+
txn: PersistenceTransaction
1080+
): PersistencePromise<number> {
1081+
const docCountPromise = this.orphanedDocmentCount(txn);
1082+
const targetCountPromise = this.db.getQueryCache().getQueryCount(txn);
1083+
return targetCountPromise.next(targetCount =>
1084+
docCountPromise.next(docCount => targetCount + docCount)
1085+
);
1086+
}
1087+
1088+
private orphanedDocmentCount(
1089+
txn: PersistenceTransaction
1090+
): PersistencePromise<number> {
1091+
let orphanedCount = 0;
1092+
return this.forEachOrphanedDocumentSequenceNumber(txn, _ => {
1093+
orphanedCount++;
1094+
}).next(() => orphanedCount);
10801095
}
10811096

10821097
forEachTarget(

packages/firestore/src/local/lru_garbage_collector.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ export interface LruDelegate {
3636
f: (target: QueryData) => void
3737
): PersistencePromise<void>;
3838

39-
getTargetCount(txn: PersistenceTransaction): PersistencePromise<number>;
39+
getSequenceNumberCount(
40+
txn: PersistenceTransaction
41+
): PersistencePromise<number>;
4042

4143
/**
4244
* Enumerates sequence numbers for documents not associated with a target.
@@ -146,7 +148,7 @@ export class LruGarbageCollector {
146148
txn: PersistenceTransaction,
147149
percentile: number
148150
): PersistencePromise<number> {
149-
return this.delegate.getTargetCount(txn).next(targetCount => {
151+
return this.delegate.getSequenceNumberCount(txn).next(targetCount => {
150152
return Math.floor(percentile / 100.0 * targetCount);
151153
});
152154
}

packages/firestore/src/local/memory_persistence.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,8 +317,25 @@ export class MemoryLruDelegate implements ReferenceDelegate, LruDelegate {
317317
return this.persistence.getQueryCache().forEachTarget(txn, f);
318318
}
319319

320-
getTargetCount(txn: PersistenceTransaction): PersistencePromise<number> {
321-
return this.persistence.getQueryCache().getTargetCount(txn);
320+
getSequenceNumberCount(
321+
txn: PersistenceTransaction
322+
): PersistencePromise<number> {
323+
const docCountPromise = this.orphanedDocumentCount(txn);
324+
const targetCountPromise = this.persistence
325+
.getQueryCache()
326+
.getTargetCount(txn);
327+
return targetCountPromise.next(targetCount =>
328+
docCountPromise.next(docCount => targetCount + docCount)
329+
);
330+
}
331+
332+
private orphanedDocumentCount(
333+
txn: PersistenceTransaction
334+
): PersistencePromise<number> {
335+
let orphanedCount = 0;
336+
return this.forEachOrphanedDocumentSequenceNumber(txn, _ => {
337+
orphanedCount++;
338+
}).next(() => orphanedCount);
322339
}
323340

324341
forEachOrphanedDocumentSequenceNumber(

0 commit comments

Comments
 (0)