pw_kvs: Fix return value for Get()
- Update KVS Get() to properly return the size of the value read when
verify_on_read is true. Previously only the status portion of the return was valid.
- Enable KVS test RepeatingValueWithOtherData.
- Add LogKeyDescriptor() helper and update LogSectors().
Change-Id: I5003fc58ed7d4342fd3b66155eda7ef8569e6aa6
diff --git a/pw_kvs/key_value_store.cc b/pw_kvs/key_value_store.cc
index 7ee058e..9949b88 100644
--- a/pw_kvs/key_value_store.cc
+++ b/pw_kvs/key_value_store.cc
@@ -261,9 +261,16 @@
StatusWithSize result = ReadEntryValue(*key_descriptor, header, value_buffer);
if (result.ok() && options_.verify_on_read) {
- return header.VerifyChecksum(entry_header_format_.checksum,
- key,
- value_buffer.subspan(0, result.size()));
+ Status verify_result =
+ header.VerifyChecksum(entry_header_format_.checksum,
+ key,
+ value_buffer.subspan(0, result.size()));
+ if (!verify_result.ok()) {
+ memset(value_buffer.subspan(0, result.size()).data(), 0, result.size());
+ return verify_result;
+ }
+
+ return StatusWithSize(verify_result, result.size());
}
return result;
}
@@ -846,7 +853,8 @@
DBG("////////////////////// KEY VALUE STORE DUMP END /////////////////////");
}
-void KeyValueStore::LogSectors(void) {
+void KeyValueStore::LogSectors() const {
+ DBG("Sector descriptors: count %zu", sectors_.size());
for (auto& sector : sectors_) {
DBG(" - Sector %zu: valid %hu, recoverable %zu, free %hu",
SectorIndex(§or),
@@ -856,6 +864,17 @@
}
}
+void KeyValueStore::LogKeyDescriptor() const {
+ DBG("Key descriptors: count %zu", key_descriptors_.size());
+ for (auto& key : key_descriptors_) {
+ DBG(" - Key: %s, hash %#zx, version %zu, address %#zx",
+ key.deleted() ? "Deleted" : "Valid",
+ static_cast<size_t>(key.key_hash),
+ static_cast<size_t>(key.key_version),
+ static_cast<size_t>(key.address));
+ }
+}
+
void KeyValueStore::SectorDescriptor::RemoveValidBytes(size_t size) {
// TODO: add safety check for valid_bytes > size.
if (size > valid_bytes) {