File tree 4 files changed +19
-9
lines changed
firebase-firestore/src/main/java/com/google/firebase/firestore/local 4 files changed +19
-9
lines changed Original file line number Diff line number Diff line change @@ -26,7 +26,7 @@ public interface LruDelegate {
26
26
/** Enumerates all the targets in the QueryCache. */
27
27
void forEachTarget (Consumer <QueryData > consumer );
28
28
29
- long getTargetCount ();
29
+ long getSequenceNumberCount ();
30
30
31
31
/** Enumerates sequence numbers for documents not associated with a target. */
32
32
void forEachOrphanedDocumentSequenceNumber (Consumer <Long > consumer );
Original file line number Diff line number Diff line change @@ -109,7 +109,7 @@ public int getDocumentsRemoved() {
109
109
110
110
/** Given a percentile of target to collect, returns the number of targets to collect. */
111
111
int calculateQueryCount (int percentile ) {
112
- long targetCount = delegate .getTargetCount ();
112
+ long targetCount = delegate .getSequenceNumberCount ();
113
113
return (int ) ((percentile / 100.0f ) * targetCount );
114
114
}
115
115
@@ -216,15 +216,13 @@ private Results runGarbageCollection(SparseArray<?> liveTargetIds) {
216
216
int numDocumentsRemoved = removeOrphanedDocuments (upperBound );
217
217
long removedDocumentsTs = System .currentTimeMillis ();
218
218
219
- // TODO(gsoltis): post-compaction?
220
-
221
219
if (Logger .isDebugEnabled ()) {
222
220
String desc = "LRU Garbage Collection:\n " ;
223
221
desc += "\t Counted targets in " + (countedTargetsTs - startTs ) + "ms\n " ;
224
222
desc +=
225
223
String .format (
226
224
Locale .ROOT ,
227
- "\t Determined least recently used %d sequence numbers in %dms" ,
225
+ "\t Determined least recently used %d sequence numbers in %dms\n " ,
228
226
sequenceNumbers ,
229
227
(foundUpperBoundTs - countedTargetsTs ));
230
228
desc +=
Original file line number Diff line number Diff line change @@ -82,8 +82,14 @@ public void forEachTarget(Consumer<QueryData> consumer) {
82
82
}
83
83
84
84
@ 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 ];
87
93
}
88
94
89
95
@ Override
Original file line number Diff line number Diff line change @@ -70,8 +70,14 @@ public LruGarbageCollector getGarbageCollector() {
70
70
}
71
71
72
72
@ 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 ;
75
81
}
76
82
77
83
@ Override
You can’t perform that action at this time.
0 commit comments