86 if (s_pending_save.empty())
89 ESP_LOGV(TAG,
"Saving %zu items...", s_pending_save.size());
90 int cached = 0,
written = 0, failed = 0;
91 fdb_err_t last_err = FDB_NO_ERR;
94 for (
const auto &save : s_pending_save) {
95 char key_str[KEY_BUFFER_SIZE];
96 snprintf(key_str,
sizeof(key_str),
"%" PRIu32, save.key);
97 ESP_LOGVV(TAG,
"Checking if FDB data %s has changed", key_str);
99 ESP_LOGV(TAG,
"sync: key: %s, len: %zu", key_str, save.data.size());
100 fdb_blob_make(&this->
blob, save.data.data(), save.data.size());
101 fdb_err_t err = fdb_kv_set_blob(&this->
db, key_str, &this->
blob);
102 if (err != FDB_NO_ERR) {
103 ESP_LOGV(TAG,
"fdb_kv_set_blob('%s', len=%zu) failed: %d", key_str, save.data.size(), err);
111 ESP_LOGV(TAG,
"FDB data not changed; skipping %" PRIu32
" len=%zu", save.key, save.data.size());
115 s_pending_save.clear();
118 ESP_LOGE(TAG,
"Writing %d items: %d cached, %d written, %d failed. Last error=%d for key=%" PRIu32,
119 cached +
written + failed, cached,
written, failed, last_err, last_key);
121 ESP_LOGD(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
124 ESP_LOGV(TAG,
"Writing %d items: %d cached, %d written, %d failed", cached +
written + failed, cached,
written,
133 fdb_kv_t kvp = fdb_kv_get_obj(
db, key_str, &kv);
134 if (kvp ==
nullptr) {
135 ESP_LOGV(TAG,
"fdb_kv_get_obj('%s'): nullptr - the key might not be set yet", key_str);
140 if (kv.value_len != to_save.data.size()) {
146 fdb_blob_make(&this->
blob, stored_data.
get(), kv.value_len);
147 size_t actual_len = fdb_kv_get_blob(
db, key_str, &this->
blob);
148 if (actual_len != kv.value_len) {
149 ESP_LOGV(TAG,
"fdb_kv_get_blob('%s') len mismatch: %zu != %zu", key_str, actual_len, (
size_t) kv.value_len);
154 return memcmp(to_save.data.data(), stored_data.
get(), kv.value_len) != 0;