MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / processChangesAsync

Method processChangesAsync

src/db.cpp:2983–3014  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2981}
2982
2983void redisDbPersistentData::processChangesAsync(std::atomic<int> &pendingJobs)
2984{
2985 ++pendingJobs;
2986 serverAssert(!m_fAllChanged);
2987 dictEmpty(m_dictChanged, nullptr);
2988 dict *dictNew = dictCreate(&dbDictType, nullptr);
2989 std::swap(dictNew, m_pdict);
2990 m_cnewKeysPending = 0;
2991 g_pserver->asyncworkqueue->AddWorkFunction([dictNew, this, &pendingJobs]{
2992 dictIterator *di = dictGetIterator(dictNew);
2993 dictEntry *de;
2994 std::vector<sds> veckeys;
2995 std::vector<size_t> veccbkeys;
2996 std::vector<sds> vecvals;
2997 std::vector<size_t> veccbvals;
2998 while ((de = dictNext(di)) != nullptr)
2999 {
3000 robj *o = (robj*)dictGetVal(de);
3001 sds temp = serializeStoredObjectAndExpire(o);
3002 veckeys.push_back((sds)dictGetKey(de));
3003 veccbkeys.push_back(sdslen((sds)dictGetKey(de)));
3004 vecvals.push_back(temp);
3005 veccbvals.push_back(sdslen(temp));
3006 }
3007 m_spstorage->bulkInsert(veckeys.data(), veccbkeys.data(), vecvals.data(), veccbvals.data(), veckeys.size());
3008 for (auto val : vecvals)
3009 sdsfree(val);
3010 dictReleaseIterator(di);
3011 dictRelease(dictNew);
3012 --pendingJobs;
3013 });
3014}
3015
3016/* This function is to bulk insert directly to storage provider bypassing in memory, assumes rgKeys and rgVals are not sds strings */
3017void redisDbPersistentData::bulkDirectStorageInsert(char **rgKeys, size_t *rgcbKeys, char **rgVals, size_t *rgcbVals, size_t celem)

Callers 2

processJobMethod · 0.80
loadWorkerThreadMainMethod · 0.80

Calls 14

dictEmptyFunction · 0.85
sdslenFunction · 0.85
sdsfreeFunction · 0.85
AddWorkFunctionMethod · 0.80
dataMethod · 0.80
dictCreateFunction · 0.70
dictGetIteratorFunction · 0.70
dictNextFunction · 0.70
dictReleaseIteratorFunction · 0.70
dictReleaseFunction · 0.70
swapFunction · 0.50

Tested by

no test coverage detected