refs #715 When loading data cache, prune revision file to remove keys that weren't found.

This commit is contained in:
Mathew Sutcliffe
2016-07-28 17:53:15 +01:00
parent b449487a71
commit 9339991644
2 changed files with 6 additions and 2 deletions

View File

@@ -293,6 +293,9 @@ namespace BlackMisc
auto msg = m_cache->loadFromFiles(persistentStore(), m_cache->m_revision.keysWithNewerTimestamps(), baseline.toVariantMap(), newValues, m_cache->m_revision.timestampsAsString());
newValues.setTimestamps(m_cache->m_revision.newerTimestamps());
auto missingKeys = m_cache->m_revision.keysWithNewerTimestamps().subtract(newValues.keys());
if (! missingKeys.isEmpty()) { m_cache->m_revision.writeNewRevision({}, missingKeys); }
msg.setCategories(this);
CLogMessage::preformatted(msg);
m_deferredChanges.insert(newValues);
@@ -412,7 +415,7 @@ namespace BlackMisc
return guard;
}
void CDataCacheRevision::writeNewRevision(const QMap<QString, qint64> &i_timestamps)
void CDataCacheRevision::writeNewRevision(const QMap<QString, qint64> &i_timestamps, const QSet<QString> &excludeKeys)
{
QMutexLocker lock(&m_mutex);
@@ -433,6 +436,7 @@ namespace BlackMisc
{
if (it.value()) { timestamps.insert(it.key(), it.value()); }
}
for (const auto &key : excludeKeys) { timestamps.remove(key); }
QJsonObject json;
json.insert("uuid", m_uuid.toString());

View File

@@ -104,7 +104,7 @@ namespace BlackMisc
LockGuard beginUpdate(const QMap<QString, qint64> &timestamps, bool updateUuid = true, bool pinsOnly = false);
//! During update, writes a new revision file with new timestamps.
void writeNewRevision(const QMap<QString, qint64> &timestamps);
void writeNewRevision(const QMap<QString, qint64> &timestamps, const QSet<QString> &excludeKeys = {});
//! Release the revision file lock and mark everything up-to-date (called by LockGuard destructor).
//! \param keepPromises Don't break pending promises.