diff --git a/tools/aconfig/aconfig/src/codegen/rust.rs b/tools/aconfig/aconfig/src/codegen/rust.rs index 661faeb24d..1be386f4be 100644 --- a/tools/aconfig/aconfig/src/codegen/rust.rs +++ b/tools/aconfig/aconfig/src/codegen/rust.rs @@ -287,6 +287,11 @@ lazy_static::lazy_static! { "com.android.aconfig.test.disabled_rw", "false") == "true"; + let use_new_storage_value = flags_rust::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; + if Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() { // This will be called multiple times. Subsequent calls after the first are noops. logger::init( @@ -315,14 +320,23 @@ lazy_static::lazy_static! { match aconfig_storage_result { Ok(storage_result) if storage_result == result => { log!(Level::Info, "AconfigTestMission1: success! flag 'disabled_rw' contained correct value. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Ok(storage_result) => { log!(Level::Error, "AconfigTestMission1: error: mismatch for flag 'disabled_rw'. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Err(err) => { - log!(Level::Error, "AconfigTestMission1: error: {err}") + log!(Level::Error, "AconfigTestMission1: error: {err}"); + panic!("failed to read flag value: {err}"); } } } @@ -338,6 +352,11 @@ lazy_static::lazy_static! { "com.android.aconfig.test.disabled_rw_exported", "false") == "true"; + let use_new_storage_value = flags_rust::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; + if Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() { // This will be called multiple times. Subsequent calls after the first are noops. logger::init( @@ -366,14 +385,23 @@ lazy_static::lazy_static! { match aconfig_storage_result { Ok(storage_result) if storage_result == result => { log!(Level::Info, "AconfigTestMission1: success! flag 'disabled_rw_exported' contained correct value. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Ok(storage_result) => { log!(Level::Error, "AconfigTestMission1: error: mismatch for flag 'disabled_rw_exported'. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Err(err) => { - log!(Level::Error, "AconfigTestMission1: error: {err}") + log!(Level::Error, "AconfigTestMission1: error: {err}"); + panic!("failed to read flag value: {err}"); } } } @@ -389,6 +417,11 @@ lazy_static::lazy_static! { "com.android.aconfig.test.disabled_rw_in_other_namespace", "false") == "true"; + let use_new_storage_value = flags_rust::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; + if Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() { // This will be called multiple times. Subsequent calls after the first are noops. logger::init( @@ -417,14 +450,23 @@ lazy_static::lazy_static! { match aconfig_storage_result { Ok(storage_result) if storage_result == result => { log!(Level::Info, "AconfigTestMission1: success! flag 'disabled_rw_in_other_namespace' contained correct value. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Ok(storage_result) => { log!(Level::Error, "AconfigTestMission1: error: mismatch for flag 'disabled_rw_in_other_namespace'. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Err(err) => { - log!(Level::Error, "AconfigTestMission1: error: {err}") + log!(Level::Error, "AconfigTestMission1: error: {err}"); + panic!("failed to read flag value: {err}"); } } } @@ -440,6 +482,11 @@ lazy_static::lazy_static! { "com.android.aconfig.test.enabled_rw", "true") == "true"; + let use_new_storage_value = flags_rust::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; + if Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() { // This will be called multiple times. Subsequent calls after the first are noops. logger::init( @@ -468,14 +515,23 @@ lazy_static::lazy_static! { match aconfig_storage_result { Ok(storage_result) if storage_result == result => { log!(Level::Info, "AconfigTestMission1: success! flag 'enabled_rw' contained correct value. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Ok(storage_result) => { log!(Level::Error, "AconfigTestMission1: error: mismatch for flag 'enabled_rw'. Legacy storage was {result}, new storage was {storage_result}"); - return storage_result; + if use_new_storage_value { + return storage_result; + } else { + return result; + } }, Err(err) => { - log!(Level::Error, "AconfigTestMission1: error: {err}") + log!(Level::Error, "AconfigTestMission1: error: {err}"); + panic!("failed to read flag value: {err}"); } } } diff --git a/tools/aconfig/aconfig/templates/cpp_source_file.template b/tools/aconfig/aconfig/templates/cpp_source_file.template index 2a1e5af71f..0b857bec98 100644 --- a/tools/aconfig/aconfig/templates/cpp_source_file.template +++ b/tools/aconfig/aconfig/templates/cpp_source_file.template @@ -76,7 +76,8 @@ namespace {cpp_namespace} \{ : boolean_start_index_() {{ -endif }} , flag_value_file_(nullptr) - , read_from_new_storage_(false) \{ + , read_from_new_storage_(false) + , use_new_storage_value(false) \{ struct stat buffer; if (stat("/metadata/aconfig_test_missions/mission_1", &buffer) == 0) \{ @@ -117,6 +118,11 @@ namespace {cpp_namespace} \{ // cache flag value file flag_value_file_ = std::unique_ptr( *flag_value_file); + + use_new_storage_value = server_configurable_flags::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; } {{ -endif }} {{ -endif }} @@ -156,7 +162,11 @@ namespace {cpp_namespace} \{ ALOGI("success: {item.flag_name} value matches"); } - return *value; + if (use_new_storage_value) \{ + return *value; + } else \{ + return expected_value; + } } {{ -endif }} @@ -181,6 +191,7 @@ namespace {cpp_namespace} \{ std::unique_ptr flag_value_file_; bool read_from_new_storage_; + bool use_new_storage_value; {{ -endif }} {{ -endif }} diff --git a/tools/aconfig/aconfig/templates/rust.template b/tools/aconfig/aconfig/templates/rust.template index 85bab03ec7..cbc33ba260 100644 --- a/tools/aconfig/aconfig/templates/rust.template +++ b/tools/aconfig/aconfig/templates/rust.template @@ -35,6 +35,11 @@ lazy_static::lazy_static! \{ "{flag.device_config_flag}", "{flag.default_value}") == "true"; + let use_new_storage_value = flags_rust::GetServerConfigurableFlag( + "aconfig_flags.core_experiments_team_internal", + "com.android.providers.settings.use_new_storage_value", + "false") == "true"; + if Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() \{ // This will be called multiple times. Subsequent calls after the first are noops. logger::init( @@ -63,14 +68,23 @@ lazy_static::lazy_static! \{ match aconfig_storage_result \{ Ok(storage_result) if storage_result == result => \{ log!(Level::Info, "AconfigTestMission1: success! flag '{flag.name}' contained correct value. Legacy storage was \{result}, new storage was \{storage_result}"); - return storage_result; + if use_new_storage_value \{ + return storage_result; + } else \{ + return result; + } }, Ok(storage_result) => \{ log!(Level::Error, "AconfigTestMission1: error: mismatch for flag '{flag.name}'. Legacy storage was \{result}, new storage was \{storage_result}"); - return storage_result; + if use_new_storage_value \{ + return storage_result; + } else \{ + return result; + } }, Err(err) => \{ - log!(Level::Error, "AconfigTestMission1: error: \{err}") + log!(Level::Error, "AconfigTestMission1: error: \{err}"); + panic!("failed to read flag value: \{err}"); } } }