82 if (s_pending_save.empty())
85 ESP_LOGV(TAG,
"Saving %zu items...", s_pending_save.size());
86 int cached = 0,
written = 0, failed = 0;
87 fdb_err_t last_err = FDB_NO_ERR;
90 for (
const auto &save : s_pending_save) {
91 char key_str[UINT32_MAX_STR_SIZE];
93 ESP_LOGVV(TAG,
"Checking if FDB data %s has changed", key_str);
95 ESP_LOGV(TAG,
"sync: key: %s, len: %zu", key_str, save.data.size());
96 fdb_blob_make(&this->
blob, save.data.data(), save.data.size());
97 fdb_err_t err = fdb_kv_set_blob(&this->
db, key_str, &this->
blob);
98 if (err != FDB_NO_ERR) {
99 ESP_LOGV(TAG,
"fdb_kv_set_blob('%s', len=%zu) failed: %d", key_str, save.data.size(), err);
107 ESP_LOGV(TAG,
"FDB data not changed; skipping %" PRIu32
" len=%zu", save.key, save.data.size());
111 s_pending_save.clear();
114 ESP_LOGE(TAG,
"Writing %d items: %d cached, %d written, %d failed. Last error=%d for key=%" PRIu32,
115 cached +
written + failed, cached,
written, failed, last_err, last_key);
117 ESP_LOGD(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
120 ESP_LOGV(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
129 fdb_kv_t kvp = fdb_kv_get_obj(
db, key_str, &kv);
130 if (kvp ==
nullptr) {
131 ESP_LOGV(TAG,
"fdb_kv_get_obj('%s'): nullptr - the key might not be set yet", key_str);
136 if (kv.value_len != to_save.data.size()) {
142 fdb_blob_make(&this->
blob, stored_data.
get(), kv.value_len);
143 size_t actual_len = fdb_kv_get_blob(
db, key_str, &this->
blob);
144 if (actual_len != kv.value_len) {
145 ESP_LOGV(TAG,
"fdb_kv_get_blob('%s') len mismatch: %zu != %zu", key_str, actual_len, (
size_t) kv.value_len);
150 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.