MCPcopy Create free account
hub / github.com/RedisGears/RedisGears / TimeEvent_RDBLoad

Function TimeEvent_RDBLoad

plugins/python/redisgears_python.c:4400–4458  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4398}
4399
4400static void *TimeEvent_RDBLoad(RedisModuleIO *rdb, int encver){
4401 TimerData* td = RG_ALLOC(sizeof(*td));
4402 td->status = TE_STATUS_RUNNING;
4403 td->period = RedisModule_LoadUnsigned(rdb);
4404
4405 int version = 0;
4406 if(encver >= TIME_EVENT_ENCVER_WITH_VERSIONED_SESSION_PYCALLBACK){
4407 version = RedisModule_LoadUnsigned(rdb);
4408 }
4409
4410 size_t serializedSessionLen;
4411 char *serializedSession = RedisModule_LoadStringBuffer(rdb, &serializedSessionLen);
4412 Gears_Buffer sessionBuff = {
4413 .buff = serializedSession,
4414 .size = serializedSessionLen,
4415 .cap = serializedSessionLen,
4416 };
4417 Gears_BufferReader br;
4418 Gears_BufferReaderInit(&br, &sessionBuff);
4419 char* err = NULL;
4420 td->session = PythonSessionCtx_Deserialize(&br, version, &err, true);
4421 if(!td->session){
4422 RedisModule_Log(staticCtx, "warning", "Could not deserialize TimeEven Session, error='%s'", err);
4423 }
4424 RedisModule_Free(serializedSession);
4425
4426 version = 0;
4427 if(encver >= TIME_EVENT_ENCVER_WITH_VERSIONED_SESSION_PYCALLBACK){
4428 version = RedisModule_LoadUnsigned(rdb);
4429 }
4430
4431 size_t len;
4432 char* buff = RedisModule_LoadStringBuffer(rdb, &len);
4433 Gears_Buffer b = {
4434 .cap = len,
4435 .size = len,
4436 .buff = buff,
4437 };
4438 Gears_BufferReader reader;
4439 Gears_BufferReaderInit(&reader, &b);
4440 td->callback = RedisGearsPy_PyCallbackDeserialize(NULL, &reader, version, NULL);
4441 RedisModule_Assert(td->callback);
4442
4443 // change callback global
4444 PythonExecutionCtx pectx = PythonExecutionCtx_New(td->session, NULL);
4445 RedisGearsPy_Lock(&pectx);
4446 PyFunctionObject* callback_func = (PyFunctionObject*)td->callback;
4447 PyDict_Merge(td->session->globalsDict, callback_func->func_globals, 0);
4448 GearsPyDecRef(callback_func->func_globals);
4449 callback_func->func_globals = td->session->globalsDict;
4450 Py_INCREF(callback_func->func_globals);
4451 RedisGearsPy_Unlock(&pectx);
4452
4453 RedisModule_Free(buff);
4454 RedisModuleCtx* ctx = RedisModule_GetThreadSafeContext(NULL);
4455 td->id = RedisModule_CreateTimer(ctx, td->period * 1000, TimeEvent_Callback, td);
4456 RedisModule_FreeThreadSafeContext(ctx);
4457 return td;

Callers

nothing calls this directly

Calls 6

Gears_BufferReaderInitFunction · 0.85
RedisGearsPy_LockFunction · 0.85
GearsPyDecRefFunction · 0.85
RedisGearsPy_UnlockFunction · 0.85

Tested by

no test coverage detected