Consolidate snapshots should not consider keys in bulk storage
Former-commit-id: e02a8f503d45daf63150c60a8a8c3751b9b8581e
This commit is contained in:
parent
e7586ddca1
commit
cb4bb9d7eb
@ -1392,7 +1392,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
bool FWillFreeChildDebug() const { return m_spdbSnapshotHOLDER != nullptr; }
|
bool FWillFreeChildDebug() const { return m_spdbSnapshotHOLDER != nullptr; }
|
||||||
|
|
||||||
bool iterate_threadsafe(std::function<bool(const char*, robj_roptr o)> fn, bool fKeyOnly = false) const;
|
bool iterate_threadsafe(std::function<bool(const char*, robj_roptr o)> fn, bool fKeyOnly = false, bool fCacheOnly = false) const;
|
||||||
using redisDbPersistentData::createSnapshot;
|
using redisDbPersistentData::createSnapshot;
|
||||||
using redisDbPersistentData::endSnapshot;
|
using redisDbPersistentData::endSnapshot;
|
||||||
using redisDbPersistentData::endSnapshotAsync;
|
using redisDbPersistentData::endSnapshotAsync;
|
||||||
|
@ -374,7 +374,7 @@ dict_iter redisDbPersistentDataSnapshot::find_cached_threadsafe(const char *key)
|
|||||||
return dict_iter(de);
|
return dict_iter(de);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool redisDbPersistentDataSnapshot::iterate_threadsafe(std::function<bool(const char*, robj_roptr o)> fn, bool fKeyOnly) const
|
bool redisDbPersistentDataSnapshot::iterate_threadsafe(std::function<bool(const char*, robj_roptr o)> fn, bool fKeyOnly, bool fCacheOnly) const
|
||||||
{
|
{
|
||||||
// Take the size so we can ensure we visited every element exactly once
|
// Take the size so we can ensure we visited every element exactly once
|
||||||
// use volatile to ensure it's not checked too late. This makes it more
|
// use volatile to ensure it's not checked too late. This makes it more
|
||||||
@ -395,7 +395,7 @@ bool redisDbPersistentDataSnapshot::iterate_threadsafe(std::function<bool(const
|
|||||||
dictReleaseIterator(di);
|
dictReleaseIterator(di);
|
||||||
|
|
||||||
|
|
||||||
if (m_spstorage != nullptr)
|
if (m_spstorage != nullptr && !fCacheOnly)
|
||||||
{
|
{
|
||||||
bool fSawAll = fResult && m_spstorage->enumerate([&](const char *key, size_t cchKey, const void *data, size_t cbData){
|
bool fSawAll = fResult && m_spstorage->enumerate([&](const char *key, size_t cchKey, const void *data, size_t cbData){
|
||||||
sds sdsKey = sdsnewlen(key, cchKey);
|
sds sdsKey = sdsnewlen(key, cchKey);
|
||||||
@ -433,10 +433,11 @@ bool redisDbPersistentDataSnapshot::iterate_threadsafe(std::function<bool(const
|
|||||||
// Alright it's a key in the use keyspace, lets ensure it and then pass it off
|
// Alright it's a key in the use keyspace, lets ensure it and then pass it off
|
||||||
--celem;
|
--celem;
|
||||||
return fn(key, o);
|
return fn(key, o);
|
||||||
}, fKeyOnly);
|
}, fKeyOnly, fCacheOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverAssert(!fResult || celem == 0);
|
// we should have hit all keys or had a good reason not to
|
||||||
|
serverAssert(!fResult || celem == 0 || (m_spstorage && fCacheOnly));
|
||||||
return fResult;
|
return fResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,7 +488,7 @@ void redisDbPersistentDataSnapshot::consolidate_children(redisDbPersistentData *
|
|||||||
incrRefCount(o);
|
incrRefCount(o);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}, true /*fKeyOnly*/);
|
}, true /*fKeyOnly*/, true /*fCacheOnly*/);
|
||||||
spdb->m_spstorage = m_pdbSnapshot->m_spstorage;
|
spdb->m_spstorage = m_pdbSnapshot->m_spstorage;
|
||||||
|
|
||||||
spdb->m_pdict->iterators++;
|
spdb->m_pdict->iterators++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user