Skip to content

Commit 3139910

Browse files
mroberpull[bot]
authored andcommitted
Clean up old sessions in the NDK before initializing and after finalizing a session. (#2680)
1 parent 17e1c92 commit 3139910

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk/CrashFilesManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ interface CrashFilesManager {
2222

2323
File getSessionFileDirectory(String sessionId);
2424

25-
void deleteSessionFilesDirectory(String sessionId);
25+
void deleteSessionFileDirectory(String sessionId);
26+
27+
void cleanOldSessionFileDirectories();
2628
}

firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk/CrashpadController.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929

3030
class CrashpadController implements NativeComponentController {
3131

32+
@SuppressWarnings("CharsetObjectCanBeUsed") // StandardCharsets requires API level 19.
3233
private static final Charset UTF_8 = Charset.forName("UTF-8");
34+
3335
private static final String SESSION_METADATA_FILE = "session.json";
3436
private static final String APP_METADATA_FILE = "app.json";
3537
private static final String DEVICE_METADATA_FILE = "device.json";
@@ -48,6 +50,7 @@ class CrashpadController implements NativeComponentController {
4850
@Override
4951
public boolean initialize(String sessionId) {
5052
boolean initSuccess = false;
53+
filesManager.cleanOldSessionFileDirectories();
5154
final File crashReportDirectory = filesManager.getSessionFileDirectory(sessionId);
5255
try {
5356
if (crashReportDirectory != null) {
@@ -71,7 +74,8 @@ public boolean hasCrashDataForSession(String sessionId) {
7174

7275
@Override
7376
public boolean finalizeSession(String sessionId) {
74-
filesManager.deleteSessionFilesDirectory(sessionId);
77+
filesManager.deleteSessionFileDirectory(sessionId);
78+
filesManager.cleanOldSessionFileDirectories();
7579
return true;
7680
}
7781

firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk/NdkCrashFilesManager.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@
1717
import androidx.annotation.NonNull;
1818
import androidx.annotation.Nullable;
1919
import java.io.File;
20+
import java.util.Arrays;
21+
import java.util.Comparator;
2022

2123
class NdkCrashFilesManager implements CrashFilesManager {
24+
private static final Comparator<? super File> LATEST_SESSION_FIRST =
25+
(f1, f2) -> f2.getName().compareTo(f1.getName());
26+
private static final int MAX_SESSIONS = 8;
2227

2328
private final File rootPath;
2429

@@ -38,10 +43,21 @@ public File getSessionFileDirectory(String sessionId) {
3843
}
3944

4045
@Override
41-
public void deleteSessionFilesDirectory(String sessionId) {
46+
public void deleteSessionFileDirectory(String sessionId) {
4247
recursiveDelete(new File(rootPath, sessionId));
4348
}
4449

50+
@Override
51+
public void cleanOldSessionFileDirectories() {
52+
File[] sessionFileDirectories = rootPath.listFiles(File::isDirectory);
53+
if (sessionFileDirectories != null && sessionFileDirectories.length > MAX_SESSIONS) {
54+
Arrays.sort(sessionFileDirectories, LATEST_SESSION_FIRST);
55+
for (int i = MAX_SESSIONS; i < sessionFileDirectories.length; i++) {
56+
recursiveDelete(sessionFileDirectories[i]);
57+
}
58+
}
59+
}
60+
4561
@Nullable
4662
private static File prepareDirectory(File file) {
4763
if (file != null) {

0 commit comments

Comments
 (0)