Skip to content

Commit 1734c6e

Browse files
committed
handle oom error as IOException
1 parent b6d0107 commit 1734c6e

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/metadata/MetaDataStore.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public void writeUserData(String sessionId, String userId) {
6363
writer.flush();
6464
} catch (Exception e) {
6565
Logger.getLogger().w("Error serializing user metadata.", e);
66+
} catch (OutOfMemoryError e) {
67+
Logger.getLogger().w("OOM serializing user metadata.", e);
6668
} finally {
6769
CommonUtils.closeOrLog(writer, "Failed to close user metadata file.");
6870
}
@@ -86,6 +88,9 @@ public String readUserId(String sessionId) {
8688
} catch (Exception e) {
8789
Logger.getLogger().w("Error deserializing user metadata.", e);
8890
safeDeleteCorruptFile(f);
91+
} catch (OutOfMemoryError e) {
92+
Logger.getLogger().w("OOM deserializing user metadata.", e);
93+
safeDeleteCorruptFile(f);
8994
} finally {
9095
CommonUtils.closeOrLog(is, "Failed to close user metadata file.");
9196
}
@@ -108,6 +113,9 @@ public void writeKeyData(String sessionId, Map<String, String> keyData, boolean
108113
} catch (Exception e) {
109114
Logger.getLogger().w("Error serializing key/value metadata.", e);
110115
safeDeleteCorruptFile(f);
116+
} catch (OutOfMemoryError e) {
117+
Logger.getLogger().w("OOM serializing key/value metadata.", e);
118+
safeDeleteCorruptFile(f);
111119
} finally {
112120
CommonUtils.closeOrLog(writer, "Failed to close key/value metadata file.");
113121
}
@@ -132,6 +140,9 @@ Map<String, String> readKeyData(String sessionId, boolean isInternal) {
132140
} catch (Exception e) {
133141
Logger.getLogger().w("Error deserializing user metadata.", e);
134142
safeDeleteCorruptFile(f);
143+
} catch (OutOfMemoryError e) {
144+
Logger.getLogger().w("OOM deserializing user metadata.", e);
145+
safeDeleteCorruptFile(f);
135146
} finally {
136147
CommonUtils.closeOrLog(is, "Failed to close user metadata file.");
137148
}
@@ -155,6 +166,9 @@ public List<RolloutAssignment> readRolloutsState(String sessionId) {
155166
} catch (Exception e) {
156167
Logger.getLogger().w("Error deserializing rollouts state.", e);
157168
safeDeleteCorruptFile(f);
169+
} catch (OutOfMemoryError e) {
170+
Logger.getLogger().w("OOM deserializing rollouts state.", e);
171+
safeDeleteCorruptFile(f);
158172
} finally {
159173
CommonUtils.closeOrLog(is, "Failed to close rollouts state file.");
160174
}
@@ -177,6 +191,9 @@ public void writeRolloutState(String sessionId, List<RolloutAssignment> rollouts
177191
} catch (Exception e) {
178192
Logger.getLogger().w("Error serializing rollouts state.", e);
179193
safeDeleteCorruptFile(f);
194+
} catch (OutOfMemoryError e) {
195+
Logger.getLogger().w("OOM serializing rollouts state.", e);
196+
safeDeleteCorruptFile(f);
180197
} finally {
181198
CommonUtils.closeOrLog(writer, "Failed to close rollouts state file.");
182199
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/metadata/QueueFileLogStore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ private void doWriteToLog(long timestamp, String msg) {
176176
}
177177
} catch (IOException e) {
178178
Logger.getLogger().e("There was a problem writing to the Crashlytics log.", e);
179+
} catch (OutOfMemoryError e) {
180+
Logger.getLogger().e("OOM when writing to the Crashlytics log.", e);
179181
}
180182
}
181183
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,9 @@ private static int oldestEventFileFirst(@NonNull File f1, @NonNull File f2) {
413413
private static void writeTextFile(File file, String text) throws IOException {
414414
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8)) {
415415
writer.write(text);
416+
} catch (OutOfMemoryError e) {
417+
Logger.getLogger().w("Write text file out of memory.", e);
418+
throw new IOException("out of memory");
416419
}
417420
}
418421

@@ -421,6 +424,9 @@ private static void writeTextFile(File file, String text, long lastModifiedTimes
421424
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8)) {
422425
writer.write(text);
423426
file.setLastModified(convertTimestampFromSecondsToMs(lastModifiedTimestampSeconds));
427+
} catch (OutOfMemoryError e) {
428+
Logger.getLogger().w("Write text file out of memory.", e);
429+
throw new IOException("out of memory");
424430
}
425431
}
426432

@@ -434,6 +440,9 @@ private static String readTextFile(@NonNull File file) throws IOException {
434440
bos.write(readBuffer, 0, read);
435441
}
436442
return new String(bos.toByteArray(), UTF_8);
443+
} catch (OutOfMemoryError e) {
444+
Logger.getLogger().w("Read text file out of memory.", e);
445+
throw new IOException("out of memory");
437446
}
438447
}
439448

0 commit comments

Comments
 (0)