pw_blob_store: Allow large deferred write buffers
Remove size restrictions on the internal buffer. These are no longer
needed since the addition of the flash_write_size_bytes parameter.
Remove flash_write_size_bytes argument default for BlobStoreBuffer
Change-Id: If47655ae19efc46942894e7b0f4727c84936849e
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/25100
Commit-Queue: David Rogers <davidrogers@google.com>
Reviewed-by: Ewout van Bekkum <ewout@google.com>
diff --git a/pw_blob_store/blob_store.cc b/pw_blob_store/blob_store.cc
index 27398cc..247886c 100644
--- a/pw_blob_store/blob_store.cc
+++ b/pw_blob_store/blob_store.cc
@@ -29,10 +29,8 @@
PW_LOG_INFO("Init BlobStore");
const size_t write_buffer_size_alignment =
- write_buffer_.size_bytes() % partition_.alignment_bytes();
+ flash_write_size_bytes_ % partition_.alignment_bytes();
PW_CHECK_UINT_EQ((write_buffer_size_alignment), 0);
- PW_CHECK_UINT_GE(write_buffer_.size_bytes(), partition_.alignment_bytes());
- PW_CHECK_UINT_LE(write_buffer_.size_bytes(), partition_.sector_size_bytes());
PW_CHECK_UINT_GE(write_buffer_.size_bytes(), flash_write_size_bytes_);
PW_CHECK_UINT_GE(flash_write_size_bytes_, partition_.alignment_bytes());
diff --git a/pw_blob_store/blob_store_chunk_write_test.cc b/pw_blob_store/blob_store_chunk_write_test.cc
index cf7219d..49e0016 100644
--- a/pw_blob_store/blob_store_chunk_write_test.cc
+++ b/pw_blob_store/blob_store_chunk_write_test.cc
@@ -59,7 +59,7 @@
snprintf(name, sizeof(name), "Blob%u", static_cast<unsigned>(chunk_size));
BlobStoreBuffer<kBufferSize> blob(
- name, partition_, &checksum, kvs::TestKvs());
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobWriter writer(blob);
diff --git a/pw_blob_store/blob_store_deferred_write_test.cc b/pw_blob_store/blob_store_deferred_write_test.cc
index 71996e1..bd15ae3 100644
--- a/pw_blob_store/blob_store_deferred_write_test.cc
+++ b/pw_blob_store/blob_store_deferred_write_test.cc
@@ -52,7 +52,6 @@
// Fill the source buffer with random pattern based on given seed, written to
// BlobStore in specified chunk size.
void ChunkWriteTest(size_t chunk_size, size_t flush_interval) {
- constexpr size_t kBufferSize = 256;
constexpr size_t kWriteSize = 64;
kvs::ChecksumCrc16 checksum;
@@ -112,8 +111,9 @@
}
static constexpr size_t kFlashAlignment = 16;
- static constexpr size_t kSectorSize = 2048;
- static constexpr size_t kSectorCount = 2;
+ static constexpr size_t kSectorSize = 1024;
+ static constexpr size_t kSectorCount = 4;
+ static constexpr size_t kBufferSize = 2 * kSectorSize;
kvs::FakeFlashMemoryBuffer<kSectorSize, kSectorCount> flash_;
kvs::FlashPartition partition_;
@@ -157,7 +157,7 @@
TEST_F(DeferredWriteTest, ChunkWrite64FullBufferFill) {
InitBufferToRandom(0x9);
- ChunkWriteTest(64, 256);
+ ChunkWriteTest(64, kBufferSize);
}
TEST_F(DeferredWriteTest, ChunkWrite256) {
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index 4c1fe3d..d2ea203 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -73,7 +73,7 @@
snprintf(name, sizeof(name), "TestBlobBlock");
BlobStoreBuffer<kBufferSize> blob(
- name, partition_, &checksum, kvs::TestKvs());
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobWriter writer(blob);
@@ -99,7 +99,9 @@
VerifyFlash(flash_.buffer());
char name[16] = "TestBlobBlock";
- BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+ constexpr size_t kBufferSize = 16;
+ BlobStoreBuffer<kBufferSize> blob(
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
// Use reader to check for valid data.
@@ -158,12 +160,16 @@
TEST_F(BlobStoreTest, Init_Ok) {
// TODO: Do init test with flash/kvs explicitly in the different possible
// entry states.
- BlobStoreBuffer<256> blob("Blob_OK", partition_, nullptr, kvs::TestKvs());
+ constexpr size_t kBufferSize = 256;
+ BlobStoreBuffer<kBufferSize> blob(
+ "Blob_OK", partition_, nullptr, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
}
TEST_F(BlobStoreTest, IsOpen) {
- BlobStoreBuffer<256> blob("Blob_open", partition_, nullptr, kvs::TestKvs());
+ constexpr size_t kBufferSize = 256;
+ BlobStoreBuffer<kBufferSize> blob(
+ "Blob_open", partition_, nullptr, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::DeferredWriter deferred_writer(blob);
@@ -203,7 +209,9 @@
// TODO: Do this test with flash/kvs in the different entry state
// combinations.
- BlobStoreBuffer<256> blob(blob_title, partition_, &checksum, kvs::TestKvs());
+ constexpr size_t kBufferSize = 256;
+ BlobStoreBuffer<kBufferSize> blob(
+ blob_title, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::OK, blob.Init());
BlobStore::BlobWriter writer(blob);
@@ -227,7 +235,9 @@
}
TEST_F(BlobStoreTest, MultipleErase) {
- BlobStoreBuffer<256> blob("Blob_OK", partition_, nullptr, kvs::TestKvs());
+ constexpr size_t kBufferSize = 256;
+ BlobStoreBuffer<kBufferSize> blob(
+ "Blob_OK", partition_, nullptr, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobWriter writer(blob);
@@ -248,7 +258,9 @@
kvs::ChecksumCrc16 checksum;
char name[16] = "TestBlobBlock";
- BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+ constexpr size_t kBufferSize = 16;
+ BlobStoreBuffer<kBufferSize> blob(
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobReader reader(blob);
ASSERT_EQ(Status::Ok(), reader.Open(kOffset));
@@ -272,7 +284,9 @@
kvs::ChecksumCrc16 checksum;
char name[16] = "TestBlobBlock";
- BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+ constexpr size_t kBufferSize = 16;
+ BlobStoreBuffer<kBufferSize> blob(
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobReader reader(blob);
ASSERT_EQ(Status::InvalidArgument(), reader.Open(kOffset));
@@ -288,7 +302,9 @@
kvs::ChecksumCrc16 checksum;
char name[16] = "TestBlobBlock";
- BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+ constexpr size_t kBufferSize = 16;
+ BlobStoreBuffer<kBufferSize> blob(
+ name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
EXPECT_EQ(Status::Ok(), blob.Init());
BlobStore::BlobReader reader(blob);
ASSERT_EQ(Status::Ok(), reader.Open());
diff --git a/pw_blob_store/public/pw_blob_store/blob_store.h b/pw_blob_store/public/pw_blob_store/blob_store.h
index 6603693..f8f7b80 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -536,7 +536,7 @@
kvs::FlashPartition& partition,
kvs::ChecksumAlgorithm* checksum_algo,
kvs::KeyValueStore& kvs,
- size_t flash_write_size_bytes = kBufferSizeBytes)
+ size_t flash_write_size_bytes)
: BlobStore(name,
partition,
checksum_algo,