summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/backup/BackupRestoreEventLogger.java14
-rw-r--r--core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java63
-rw-r--r--services/backup/flags.aconfig9
3 files changed, 79 insertions, 7 deletions
diff --git a/core/java/android/app/backup/BackupRestoreEventLogger.java b/core/java/android/app/backup/BackupRestoreEventLogger.java
index ea31ef3ce289..112c5fd808ef 100644
--- a/core/java/android/app/backup/BackupRestoreEventLogger.java
+++ b/core/java/android/app/backup/BackupRestoreEventLogger.java
@@ -26,6 +26,8 @@ import android.os.Parcelable;
import android.util.ArrayMap;
import android.util.Slog;
+import com.android.server.backup.Flags;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.charset.StandardCharsets;
@@ -56,7 +58,7 @@ public final class BackupRestoreEventLogger {
*
* @hide
*/
- public static final int DATA_TYPES_ALLOWED = 15;
+ public static final int DATA_TYPES_ALLOWED = 150;
/**
* Denotes that the annotated element identifies a data type as required by the logging methods
@@ -299,7 +301,7 @@ public final class BackupRestoreEventLogger {
}
if (!mResults.containsKey(dataType)) {
- if (mResults.keySet().size() == DATA_TYPES_ALLOWED) {
+ if (mResults.keySet().size() == getDataTypesAllowed()) {
// This is a new data type and we're already at capacity.
Slog.d(TAG, "Logger is full, ignoring new data type");
return null;
@@ -315,6 +317,14 @@ public final class BackupRestoreEventLogger {
return mHashDigest.digest(metaData.getBytes(StandardCharsets.UTF_8));
}
+ private int getDataTypesAllowed(){
+ if (Flags.enableIncreaseDatatypesForAgentLogging()) {
+ return DATA_TYPES_ALLOWED;
+ } else {
+ return 15;
+ }
+ }
+
/**
* Encapsulate logging results for a single data type.
*/
diff --git a/core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java b/core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java
index 6e1c5803bbd0..0aefef2cd2d3 100644
--- a/core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java
+++ b/core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java
@@ -26,10 +26,14 @@ import static junit.framework.Assert.fail;
import android.app.backup.BackupRestoreEventLogger.DataTypeResult;
import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.flag.junit.SetFlagsRule;
import androidx.test.runner.AndroidJUnit4;
+import com.android.server.backup.Flags;
+
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -43,7 +47,9 @@ import java.util.Optional;
@Presubmit
@RunWith(AndroidJUnit4.class)
public class BackupRestoreEventLoggerTest {
- private static final int DATA_TYPES_ALLOWED = 15;
+ private static final int DATA_TYPES_ALLOWED_AFTER_FLAG = 150;
+
+ private static final int DATA_TYPES_ALLOWED_BEFORE_FLAG = 15;
private static final String DATA_TYPE_1 = "data_type_1";
private static final String DATA_TYPE_2 = "data_type_2";
@@ -55,6 +61,9 @@ public class BackupRestoreEventLoggerTest {
private BackupRestoreEventLogger mLogger;
private MessageDigest mHashDigest;
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+
@Before
public void setUp() throws Exception {
mHashDigest = MessageDigest.getInstance("SHA-256");
@@ -83,10 +92,53 @@ public class BackupRestoreEventLoggerTest {
}
@Test
- public void testBackupLogger_onlyAcceptsAllowedNumberOfDataTypes() {
+ public void testBackupLogger_datatypeLimitFlagOff_onlyAcceptsAllowedNumberOfDataTypes() {
+ mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
+ mLogger = new BackupRestoreEventLogger(BACKUP);
+
+ for (int i = 0; i < DATA_TYPES_ALLOWED_BEFORE_FLAG; i++) {
+ String dataType = DATA_TYPE_1 + i;
+ mLogger.logItemsBackedUp(dataType, /* count */ 5);
+ mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null);
+ mLogger.logBackupMetadata(dataType, METADATA_1);
+
+ assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo(
+ Optional.empty());
+ }
+
+ mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5);
+ mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null);
+ mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1);
+ assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty());
+ }
+
+ @Test
+ public void testRestoreLogger_datatypeLimitFlagOff_onlyAcceptsAllowedNumberOfDataTypes() {
+ mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
+ mLogger = new BackupRestoreEventLogger(RESTORE);
+
+ for (int i = 0; i < DATA_TYPES_ALLOWED_BEFORE_FLAG; i++) {
+ String dataType = DATA_TYPE_1 + i;
+ mLogger.logItemsRestored(dataType, /* count */ 5);
+ mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null);
+ mLogger.logRestoreMetadata(dataType, METADATA_1);
+
+ assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo(
+ Optional.empty());
+ }
+
+ mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5);
+ mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null);
+ mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1);
+ assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty());
+ }
+
+ @Test
+ public void testBackupLogger_datatypeLimitFlagOn_onlyAcceptsAllowedNumberOfDataTypes() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
mLogger = new BackupRestoreEventLogger(BACKUP);
- for (int i = 0; i < DATA_TYPES_ALLOWED; i++) {
+ for (int i = 0; i < DATA_TYPES_ALLOWED_AFTER_FLAG; i++) {
String dataType = DATA_TYPE_1 + i;
mLogger.logItemsBackedUp(dataType, /* count */ 5);
mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null);
@@ -103,10 +155,11 @@ public class BackupRestoreEventLoggerTest {
}
@Test
- public void testRestoreLogger_onlyAcceptsAllowedNumberOfDataTypes() {
+ public void testRestoreLogger_datatypeLimitFlagOn_onlyAcceptsAllowedNumberOfDataTypes() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
mLogger = new BackupRestoreEventLogger(RESTORE);
- for (int i = 0; i < DATA_TYPES_ALLOWED; i++) {
+ for (int i = 0; i < DATA_TYPES_ALLOWED_AFTER_FLAG; i++) {
String dataType = DATA_TYPE_1 + i;
mLogger.logItemsRestored(dataType, /* count */ 5);
mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null);
diff --git a/services/backup/flags.aconfig b/services/backup/flags.aconfig
index 6a63b3a9db24..71f2b9e8e10b 100644
--- a/services/backup/flags.aconfig
+++ b/services/backup/flags.aconfig
@@ -32,4 +32,13 @@ flag {
description: "Enables clearing the pipe buffer after restoring a single file to a BackupAgent."
bug: "320633449"
is_fixed_read_only: true
+}
+
+flag {
+ name: "enable_increase_datatypes_for_agent_logging"
+ namespace: "onboarding"
+ description: "Increase the number of a supported datatypes that an agent can define for its "
+ "logger."
+ bug: "296844513"
+ is_fixed_read_only: true
} \ No newline at end of file