91 if (s_pending_save.empty())
94 ESP_LOGV(TAG,
"Saving %zu items...", s_pending_save.size());
95 int cached = 0,
written = 0, failed = 0;
96 fdb_err_t last_err = FDB_NO_ERR;
99 for (
const auto &save : s_pending_save) {
100 char key_str[UINT32_MAX_STR_SIZE];
102 ESP_LOGVV(TAG,
"Checking if FDB data %s has changed", key_str);
104 ESP_LOGV(TAG,
"sync: key: %s, len: %zu", key_str, save.data.size());
105 fdb_blob_make(&this->
blob, save.data.data(), save.data.size());
106 fdb_err_t err = fdb_kv_set_blob(&this->
db, key_str, &this->
blob);
107 if (err != FDB_NO_ERR) {
108 ESP_LOGV(TAG,
"fdb_kv_set_blob('%s', len=%zu) failed: %d", key_str, save.data.size(), err);
116 ESP_LOGV(TAG,
"FDB data not changed; skipping %" PRIu32
" len=%zu", save.key, save.data.size());
120 s_pending_save.clear();
123 ESP_LOGE(TAG,
"Writing %d items: %d cached, %d written, %d failed. Last error=%d for key=%" PRIu32,
124 cached +
written + failed, cached,
written, failed, last_err, last_key);
126 ESP_LOGD(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
129 ESP_LOGV(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
138 fdb_kv_t kvp = fdb_kv_get_obj(
db, key_str, &kv);
139 if (kvp ==
nullptr) {
140 ESP_LOGV(TAG,
"fdb_kv_get_obj('%s'): nullptr - the key might not be set yet", key_str);
145 if (kv.value_len != to_save.data.size()) {
151 fdb_blob_make(&this->
blob, stored_data.
get(), kv.value_len);
152 size_t actual_len = fdb_kv_get_blob(
db, key_str, &this->
blob);
153 if (actual_len != kv.value_len) {
154 ESP_LOGV(TAG,
"fdb_kv_get_blob('%s') len mismatch: %zu != %zu", key_str, actual_len, (
size_t) kv.value_len);
159 return memcmp(to_save.data.data(), stored_data.
get(), kv.value_len) != 0;
size_t uint32_to_str(std::span< char, UINT32_MAX_STR_SIZE > buf, uint32_t val)
Write unsigned 32-bit integer to buffer with compile-time size check.