Merge "Secretkeeper: require SECRETKEEPER_ENABLED=true" into main
diff --git a/fs_mgr/libsnapshot/android/snapshot/snapshot.proto b/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
index 7e97dc0..f2f7fc1 100644
--- a/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
+++ b/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
@@ -103,7 +103,7 @@
// The old partition size (if none existed, this will be zero).
uint64 old_partition_size = 10;
- // Compression algorithm (none, gz, or brotli).
+ // Compression algorithm (none, gz, lz4, zstd, or brotli).
string compression_algorithm = 11;
// Estimated COW size from OTA manifest.
@@ -117,6 +117,9 @@
// Size of v3 operation buffer. Needs to be determined during writer initialization
uint64 estimated_ops_buffer_size = 15;
+
+ // Max bytes to be compressed at once (4k, 8k, 16k, 32k, 64k, 128k)
+ uint64 compression_factor = 16;
}
// Next: 8
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/cow_writer.h b/fs_mgr/libsnapshot/include/libsnapshot/cow_writer.h
index 7df976d..0194ffd 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/cow_writer.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/cow_writer.h
@@ -53,13 +53,16 @@
uint64_t num_merge_ops = 0;
// Number of threads for compression
- int num_compress_threads = 0;
+ uint16_t num_compress_threads = 0;
// Batch write cluster ops
bool batch_write = false;
// Size of the cow operation buffer; used in v3 only.
uint64_t op_count_max = 0;
+
+ // Compression factor
+ uint64_t compression_factor = 4096;
};
// Interface for writing to a snapuserd COW. All operations are ordered; merges
diff --git a/fs_mgr/libsnapshot/libsnapshot_cow/test_v3.cpp b/fs_mgr/libsnapshot/libsnapshot_cow/test_v3.cpp
index 8cf46f4..de60213 100644
--- a/fs_mgr/libsnapshot/libsnapshot_cow/test_v3.cpp
+++ b/fs_mgr/libsnapshot/libsnapshot_cow/test_v3.cpp
@@ -72,6 +72,7 @@
TEST_F(CowTestV3, Header) {
CowOptions options;
+ options.op_count_max = 15;
auto writer = CreateCowWriter(3, options, GetCowFd());
ASSERT_TRUE(writer->Finalize());
diff --git a/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.cpp b/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.cpp
index 0e13197..61124df 100644
--- a/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.cpp
+++ b/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.cpp
@@ -114,7 +114,7 @@
}
bool CowWriterV3::ParseOptions() {
- num_compress_threads_ = std::max(options_.num_compress_threads, 1);
+ num_compress_threads_ = std::max(int(options_.num_compress_threads), 1);
auto parts = android::base::Split(options_.compression, ",");
if (parts.size() > 2) {
LOG(ERROR) << "failed to parse compression parameters: invalid argument count: "
@@ -129,6 +129,18 @@
header_.compression_algorithm = *algorithm;
header_.op_count_max = options_.op_count_max;
+ if (!IsEstimating() && header_.op_count_max == 0) {
+ if (!options_.max_blocks.has_value()) {
+ LOG(ERROR) << "can't size op buffer size since op_count_max is 0 and max_blocks is not "
+ "set.";
+ return false;
+ }
+ LOG(INFO) << "op count max is read in as 0. Setting to "
+ "num blocks in partition "
+ << options_.max_blocks.value();
+ header_.op_count_max = options_.max_blocks.value();
+ }
+
if (parts.size() > 1) {
if (!android::base::ParseUint(parts[1], &compression_.compression_level)) {
LOG(ERROR) << "failed to parse compression level invalid type: " << parts[1];
diff --git a/fs_mgr/libsnapshot/partition_cow_creator.h b/fs_mgr/libsnapshot/partition_cow_creator.h
index bd5c8cb..cbd664f 100644
--- a/fs_mgr/libsnapshot/partition_cow_creator.h
+++ b/fs_mgr/libsnapshot/partition_cow_creator.h
@@ -59,6 +59,7 @@
// True if snapuserd COWs are enabled.
bool using_snapuserd = false;
std::string compression_algorithm;
+ uint64_t compression_factor;
// True if multi-threaded compression should be enabled
bool enable_threading;
diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp
index 9eb41b2..ba5fb88 100644
--- a/fs_mgr/libsnapshot/snapshot.cpp
+++ b/fs_mgr/libsnapshot/snapshot.cpp
@@ -420,6 +420,7 @@
status->set_metadata_sectors(0);
status->set_using_snapuserd(cow_creator->using_snapuserd);
status->set_compression_algorithm(cow_creator->compression_algorithm);
+ status->set_compression_factor(cow_creator->compression_factor);
if (cow_creator->enable_threading) {
status->set_enable_threading(cow_creator->enable_threading);
}
@@ -3233,8 +3234,10 @@
}
std::string compression_algorithm;
+ uint64_t compression_factor{};
if (using_snapuserd) {
compression_algorithm = dap_metadata.vabc_compression_param();
+ compression_factor = dap_metadata.compression_factor();
if (compression_algorithm.empty()) {
// Older OTAs don't set an explicit compression type, so default to gz.
compression_algorithm = "gz";
@@ -3251,7 +3254,9 @@
.extra_extents = {},
.using_snapuserd = using_snapuserd,
.compression_algorithm = compression_algorithm,
+ .compression_factor = compression_factor,
};
+
if (dap_metadata.vabc_feature_set().has_threaded()) {
cow_creator.enable_threading = dap_metadata.vabc_feature_set().threaded();
}
@@ -3553,6 +3558,7 @@
options.compression = it->second.compression_algorithm();
if (cow_version >= 3) {
options.op_count_max = it->second.estimated_ops_buffer_size();
+ options.max_blocks = {it->second.device_size() / options.block_size};
}
auto writer = CreateCowWriter(cow_version, options, std::move(fd));
@@ -3666,6 +3672,7 @@
cow_options.batch_write = status.batched_writes();
cow_options.num_compress_threads = status.enable_threading() ? 2 : 1;
cow_options.op_count_max = status.estimated_ops_buffer_size();
+ cow_options.compression_factor = status.compression_factor();
// Disable scratch space for vts tests
if (device()->IsTestDevice()) {
cow_options.scratch_space = false;
@@ -3793,6 +3800,7 @@
ss << " allocated sectors: " << status.sectors_allocated() << std::endl;
ss << " metadata sectors: " << status.metadata_sectors() << std::endl;
ss << " compression: " << status.compression_algorithm() << std::endl;
+ ss << " compression factor: " << status.compression_factor() << std::endl;
ss << " merge phase: " << DecideMergePhase(status) << std::endl;
}
os << ss.rdbuf();
diff --git a/init/Android.bp b/init/Android.bp
index a7278d6..181de2e 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -475,6 +475,7 @@
// ------------------------------------------------------------------------------
cc_test {
+ // Note: This is NOT a CTS test. See b/320800872
name: "CtsInitTestCases",
defaults: ["init_defaults"],
require_root: true,
@@ -507,7 +508,6 @@
],
test_suites: [
- "cts",
"device-tests",
],
}