aconfig: instrument actual flag read APIs
The logging instrumentation for the storage migration contained a bug;
we want to instrument the actual flag read APIs, not the FlagProvider.
Bug: 328444881
Test: m
Change-Id: I6973ccf69005e812ac443ac5e7e14293db7b0845
Ignore-AOSP-First: internal storage migration, this code will be deleted
diff --git a/tools/aconfig/aconfig/src/codegen/rust.rs b/tools/aconfig/aconfig/src/codegen/rust.rs
index 591781e..6042593 100644
--- a/tools/aconfig/aconfig/src/codegen/rust.rs
+++ b/tools/aconfig/aconfig/src/codegen/rust.rs
@@ -114,7 +114,7 @@
static STORAGE_MIGRATION_MARKER_FILE: &str =
"/metadata/aconfig/storage_test_mission_1";
-static MIGRATION_LOG_TAG: &str = "AconfigStorageTestMission1";
+static MIGRATION_LOG_TAG: &str = "AconfigTestMission1";
/// flag provider
pub struct FlagProvider;
@@ -517,7 +517,7 @@
static STORAGE_MIGRATION_MARKER_FILE: &str =
"/metadata/aconfig/storage_test_mission_1";
-static MIGRATION_LOG_TAG: &str = "AconfigStorageTestMission1";
+static MIGRATION_LOG_TAG: &str = "AconfigTestMission1";
/// flag provider
pub struct FlagProvider;
@@ -546,20 +546,17 @@
impl FlagProvider {
/// query flag disabled_rw_exported
pub fn disabled_rw_exported(&self) -> bool {
- let result = *CACHED_disabled_rw_exported;
- result
+ *CACHED_disabled_rw_exported
}
/// query flag enabled_fixed_ro_exported
pub fn enabled_fixed_ro_exported(&self) -> bool {
- let result = *CACHED_enabled_fixed_ro_exported;
- result
+ *CACHED_enabled_fixed_ro_exported
}
/// query flag enabled_ro_exported
pub fn enabled_ro_exported(&self) -> bool {
- let result = *CACHED_enabled_ro_exported;
- result
+ *CACHED_enabled_ro_exported
}
}
@@ -594,7 +591,7 @@
static STORAGE_MIGRATION_MARKER_FILE: &str =
"/metadata/aconfig/storage_test_mission_1";
-static MIGRATION_LOG_TAG: &str = "AconfigStorageTestMission1";
+static MIGRATION_LOG_TAG: &str = "AconfigTestMission1";
/// flag provider
pub struct FlagProvider;
@@ -602,344 +599,32 @@
impl FlagProvider {
/// query flag disabled_ro
pub fn disabled_ro(&self) -> bool {
- let result = false;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'disabled_ro': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'disabled_ro', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'disabled_ro': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'disabled_ro': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 0 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'disabled_ro': {}", err);
- return result;
- }
- };
- if false != value {
- let default_value = false;
- error!("flag mismatch for 'disabled_ro'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ false
}
/// query flag disabled_rw
pub fn disabled_rw(&self) -> bool {
- let result = false;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'disabled_rw': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'disabled_rw', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'disabled_rw': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'disabled_rw': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 1 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'disabled_rw': {}", err);
- return result;
- }
- };
- if false != value {
- let default_value = false;
- error!("flag mismatch for 'disabled_rw'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ false
}
/// query flag disabled_rw_in_other_namespace
pub fn disabled_rw_in_other_namespace(&self) -> bool {
- let result = false;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'disabled_rw_in_other_namespace': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'disabled_rw_in_other_namespace', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'disabled_rw_in_other_namespace': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'disabled_rw_in_other_namespace': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 2 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'disabled_rw_in_other_namespace': {}", err);
- return result;
- }
- };
- if false != value {
- let default_value = false;
- error!("flag mismatch for 'disabled_rw_in_other_namespace'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ false
}
/// query flag enabled_fixed_ro
pub fn enabled_fixed_ro(&self) -> bool {
- let result = true;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'enabled_fixed_ro': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'enabled_fixed_ro', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'enabled_fixed_ro': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'enabled_fixed_ro': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 3 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'enabled_fixed_ro': {}", err);
- return result;
- }
- };
- if true != value {
- let default_value = true;
- error!("flag mismatch for 'enabled_fixed_ro'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ true
}
/// query flag enabled_ro
pub fn enabled_ro(&self) -> bool {
- let result = true;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'enabled_ro': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'enabled_ro', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'enabled_ro': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'enabled_ro': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 4 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'enabled_ro': {}", err);
- return result;
- }
- };
- if true != value {
- let default_value = true;
- error!("flag mismatch for 'enabled_ro'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ true
}
/// query flag enabled_rw
pub fn enabled_rw(&self) -> bool {
- let result = true;
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() {
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe {
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) {
- Ok(file) => file,
- Err(err) => {
- error!("failed to read flag 'enabled_rw': {}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "com.android.aconfig.test") {
- Ok(Some(offset)) => offset,
- Ok(None) => {
- error!("failed to read flag 'enabled_rw', not found in package map");
- return result;
- },
- Err(err) => {
- error!("failed to read flag 'enabled_rw': {}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("system", StorageFileType::FlagVal) {
- Ok(val_map) => val_map,
- Err(err) => {
- error!("failed to read flag 'enabled_rw': {}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, 5 + package_offset.boolean_offset) {
- Ok(val) => val,
- Err(err) => {
- error!("failed to read flag 'enabled_rw': {}", err);
- return result;
- }
- };
- if true != value {
- let default_value = true;
- error!("flag mismatch for 'enabled_rw'. Legacy storage was {default_value}, new storage was {value}")
- }
- }
- result
+ true
}
}
@@ -1020,16 +705,16 @@
#[test]
fn test_generate_rust_code_for_test() {
- test_generate_rust_code(CodegenMode::Test, true);
+ test_generate_rust_code(CodegenMode::Test, false);
}
#[test]
fn test_generate_rust_code_for_exported() {
- test_generate_rust_code(CodegenMode::Exported, true);
+ test_generate_rust_code(CodegenMode::Exported, false);
}
#[test]
fn test_generate_rust_code_for_force_read_only() {
- test_generate_rust_code(CodegenMode::ForceReadOnly, true);
+ test_generate_rust_code(CodegenMode::ForceReadOnly, false);
}
}
diff --git a/tools/aconfig/aconfig/templates/rust.template b/tools/aconfig/aconfig/templates/rust.template
index 4b1ad83..fe07ac5 100644
--- a/tools/aconfig/aconfig/templates/rust.template
+++ b/tools/aconfig/aconfig/templates/rust.template
@@ -7,7 +7,7 @@
static STORAGE_MIGRATION_MARKER_FILE: &str =
"/metadata/aconfig/storage_test_mission_1";
-static MIGRATION_LOG_TAG: &str = "AconfigStorageTestMission1";
+static MIGRATION_LOG_TAG: &str = "AconfigTestMission1";
/// flag provider
pub struct FlagProvider;
@@ -31,76 +31,11 @@
{{ for flag in template_flags }}
/// query flag {flag.name}
pub fn {flag.name}(&self) -> bool \{
- {{ if not allow_instrumentation }}
-
{{ -if flag.readwrite }}
*CACHED_{flag.name}
{{ -else }}
{flag.default_value}
{{ -endif }}
-
- {{ else }}
- let result = {{ -if flag.readwrite }} *CACHED_{flag.name}{{ else }} {flag.default_value} {{ -endif }};
-
- {{ if flag.readwrite }}
- result
- {{ else }}
-
- if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() \{
- return result;
- }
-
- // This will be called multiple times. Subsequent calls after the first
- // are noops.
- logger::init(
- logger::Config::default()
- .with_tag_on_device(MIGRATION_LOG_TAG)
- .with_max_level(LevelFilter::Info),
- );
-
- unsafe \{
- let package_map = match get_mapped_storage_file("system", StorageFileType::PackageMap) \{
- Ok(file) => file,
- Err(err) => \{
- error!("failed to read flag '{flag.name}': \{}", err);
- return result;
- }
- };
- let package_offset = match get_package_offset(&package_map, "{package}") \{
- Ok(Some(offset)) => offset,
- Ok(None) => \{
- error!("failed to read flag '{flag.name}', not found in package map");
- return result;
- },
- Err(err) => \{
- error!("failed to read flag '{flag.name}': \{}", err);
- return result;
- }
- };
- let flag_val_map = match get_mapped_storage_file("{flag.container}", StorageFileType::FlagVal) \{
- Ok(val_map) => val_map,
- Err(err) => \{
- error!("failed to read flag '{flag.name}': \{}", err);
- return result;
- }
- };
- let value = match get_boolean_flag_value(&flag_val_map, {flag.flag_offset} + package_offset.boolean_offset) \{
- Ok(val) => val,
- Err(err) => \{
- error!("failed to read flag '{flag.name}': \{}", err);
- return result;
- }
- };
-
- if {flag.default_value} != value \{
- let default_value = {flag.default_value};
- error!("flag mismatch for '{flag.name}'. Legacy storage was \{default_value}, new storage was \{value}")
- }
- }
-
- result
- {{ endif }}
- {{ endif }}
}
{{ endfor }}
@@ -117,7 +52,67 @@
PROVIDER.{flag.name}()
{{ -else }}
pub fn {flag.name}() -> bool \{
+ {{ if not allow_instrumentation }}
{flag.default_value}
+ {{ else }}
+
+ let result = {flag.default_value};
+ if !Path::new(STORAGE_MIGRATION_MARKER_FILE).exists() \{
+ return result;
+ }
+
+ // This will be called multiple times. Subsequent calls after the first
+ // are noops.
+ logger::init(
+ logger::Config::default()
+ .with_tag_on_device(MIGRATION_LOG_TAG)
+ .with_max_level(LevelFilter::Info),
+ );
+
+ unsafe \{
+ let package_map = match get_mapped_storage_file("{flag.container}", StorageFileType::PackageMap) \{
+ Ok(file) => file,
+ Err(err) => \{
+ error!("failed to read flag '{flag.name}': \{}", err);
+ return result;
+ }
+ };
+ let package_offset = match get_package_offset(&package_map, "{package}") \{
+ Ok(Some(offset)) => offset,
+ Ok(None) => \{
+ error!("failed to read flag '{flag.name}', not found in package map");
+ return result;
+ },
+ Err(err) => \{
+ error!("failed to read flag '{flag.name}': \{}", err);
+ return result;
+ }
+ };
+ let flag_val_map = match get_mapped_storage_file("{flag.container}", StorageFileType::FlagVal) \{
+ Ok(val_map) => val_map,
+ Err(err) => \{
+ error!("failed to read flag '{flag.name}': \{}", err);
+ return result;
+ }
+ };
+ let value = match get_boolean_flag_value(&flag_val_map, {flag.flag_offset} + package_offset.boolean_offset) \{
+ Ok(val) => val,
+ Err(err) => \{
+ error!("failed to read flag '{flag.name}': \{}", err);
+ return result;
+ }
+ };
+
+ if result != value \{
+ error!("error: flag mismatch for '{flag.name}'. Legacy storage was \{result}, new storage was \{value}")
+ } else \{
+ let default_value = {flag.default_value};
+ info!("success! flag '{flag.name}' contained correct value. Legacy storage was \{default_value}, new storage was \{value}")
+ }
+ }
+
+ result
+ {{ endif }}
{{ -endif }}
}
{{ endfor }}