diff options
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 |