Skip to content

Commit b87a3cd

Browse files
author
Greg Soltis
authored
Use orphaned docs as part of GC calculation (#80)
* Use orphaned documents in sequence number calculation
1 parent 9244537 commit b87a3cd

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/local/LruDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface LruDelegate {
2626
/** Enumerates all the targets in the QueryCache. */
2727
void forEachTarget(Consumer<QueryData> consumer);
2828

29-
long getTargetCount();
29+
long getSequenceNumberCount();
3030

3131
/** Enumerates sequence numbers for documents not associated with a target. */
3232
void forEachOrphanedDocumentSequenceNumber(Consumer<Long> consumer);

firebase-firestore/src/main/java/com/google/firebase/firestore/local/LruGarbageCollector.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public int getDocumentsRemoved() {
109109

110110
/** Given a percentile of target to collect, returns the number of targets to collect. */
111111
int calculateQueryCount(int percentile) {
112-
long targetCount = delegate.getTargetCount();
112+
long targetCount = delegate.getSequenceNumberCount();
113113
return (int) ((percentile / 100.0f) * targetCount);
114114
}
115115

@@ -216,15 +216,13 @@ private Results runGarbageCollection(SparseArray<?> liveTargetIds) {
216216
int numDocumentsRemoved = removeOrphanedDocuments(upperBound);
217217
long removedDocumentsTs = System.currentTimeMillis();
218218

219-
// TODO(gsoltis): post-compaction?
220-
221219
if (Logger.isDebugEnabled()) {
222220
String desc = "LRU Garbage Collection:\n";
223221
desc += "\tCounted targets in " + (countedTargetsTs - startTs) + "ms\n";
224222
desc +=
225223
String.format(
226224
Locale.ROOT,
227-
"\tDetermined least recently used %d sequence numbers in %dms",
225+
"\tDetermined least recently used %d sequence numbers in %dms\n",
228226
sequenceNumbers,
229227
(foundUpperBoundTs - countedTargetsTs));
230228
desc +=

firebase-firestore/src/main/java/com/google/firebase/firestore/local/MemoryLruReferenceDelegate.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ public void forEachTarget(Consumer<QueryData> consumer) {
8282
}
8383

8484
@Override
85-
public long getTargetCount() {
86-
return persistence.getQueryCache().getTargetCount();
85+
public long getSequenceNumberCount() {
86+
long targetCount = persistence.getQueryCache().getTargetCount();
87+
long orphanedCount[] = new long[1];
88+
forEachOrphanedDocumentSequenceNumber(
89+
sequenceNumber -> {
90+
orphanedCount[0]++;
91+
});
92+
return targetCount + orphanedCount[0];
8793
}
8894

8995
@Override

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteLruReferenceDelegate.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,14 @@ public LruGarbageCollector getGarbageCollector() {
7070
}
7171

7272
@Override
73-
public long getTargetCount() {
74-
return persistence.getQueryCache().getTargetCount();
73+
public long getSequenceNumberCount() {
74+
long targetCount = persistence.getQueryCache().getTargetCount();
75+
long orphanedDocumentCount =
76+
persistence
77+
.query(
78+
"SELECT COUNT(*) FROM (SELECT sequence_number FROM target_documents GROUP BY path HAVING COUNT(*) = 1 AND target_id = 0)")
79+
.firstValue(row -> row.getLong(0));
80+
return targetCount + orphanedDocumentCount;
7581
}
7682

7783
@Override

0 commit comments

Comments
 (0)