{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":156217550,"defaultBranch":"unstable","name":"redis","ownerLogin":"MeirShpilraien","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2018-11-05T12:52:33.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/28348822?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1721129201.0","currentOid":""},"activityList":{"items":[{"before":"c648798cd38af2625a9b4f505395466571413c1b","after":"1a8fe48a5cc5e694e4c0af397186c84f47fcfd57","ref":"refs/heads/test_used_memory_per_thread_array","pushedAt":"2024-07-16T12:10:16.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"WIP used memory array for threads","shortMessageHtmlLink":"WIP used memory array for threads"}},{"before":"1f364632e5f3e7076a43f4cd486a861792ab2a49","after":"c648798cd38af2625a9b4f505395466571413c1b","ref":"refs/heads/test_used_memory_per_thread_array","pushedAt":"2024-07-16T11:53:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"WIP used memory array for threads","shortMessageHtmlLink":"WIP used memory array for threads"}},{"before":"f119c7397ca822bd79575ee32fe68b78c4a97c90","after":"1f364632e5f3e7076a43f4cd486a861792ab2a49","ref":"refs/heads/test_used_memory_per_thread_array","pushedAt":"2024-07-16T11:27:07.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"WIP used memory array for threads","shortMessageHtmlLink":"WIP used memory array for threads"}},{"before":null,"after":"f119c7397ca822bd79575ee32fe68b78c4a97c90","ref":"refs/heads/test_used_memory_per_thread_array","pushedAt":"2024-07-16T11:26:41.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"WIP used memory array for threads","shortMessageHtmlLink":"WIP used memory array for threads"}},{"before":"1af3c7b212cdaf77fef0a4046ea726eee90e3800","after":"1f7518152c5a8e32bf50c73350ac28cde831e632","ref":"refs/heads/fix_atomicity_of_before_delete_events","pushedAt":"2023-11-07T13:53:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Comments fixes","shortMessageHtmlLink":"Comments fixes"}},{"before":"04ac2e80ddeab4fc92c4981c42986c109cd285fe","after":"1af3c7b212cdaf77fef0a4046ea726eee90e3800","ref":"refs/heads/fix_atomicity_of_before_delete_events","pushedAt":"2023-11-07T13:51:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Review fixes","shortMessageHtmlLink":"Review fixes"}},{"before":"d5ea320d0bb6fb986781fbbeb286fa1152000a9e","after":"04ac2e80ddeab4fc92c4981c42986c109cd285fe","ref":"refs/heads/fix_atomicity_of_before_delete_events","pushedAt":"2023-11-07T09:04:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Spellcheck fixes","shortMessageHtmlLink":"Spellcheck fixes"}},{"before":"cadd1d9031f023d39441ac43f79a2801b067e11c","after":"d5ea320d0bb6fb986781fbbeb286fa1152000a9e","ref":"refs/heads/fix_atomicity_of_before_delete_events","pushedAt":"2023-11-07T09:00:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Review fixes","shortMessageHtmlLink":"Review fixes"}},{"before":null,"after":"cadd1d9031f023d39441ac43f79a2801b067e11c","ref":"refs/heads/fix_atomicity_of_before_delete_events","pushedAt":"2023-11-06T14:34:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Before evicted and before expired server events are not executed inside an execution unit.\n\nThis [PR](https://github.com/redis/redis/pull/9406) introduces new server event, `RedisModuleEvent_Key`. This new event allows to read a key data just before it removed from the database (either deleted, expired, evicted, or overwritten).\n\nWhen the key is removed from the database, either by active expire or eviction. The new event was not called as part of an execution unit. This can cause an issue if the module registers a post notification job inside the event. This job will not be executed atomically with the expiration/eviction operation and will not replicated inside a Multi/Exec. Moreover, the post notification job will be executed right after the event where it is still not safe to perform any write operation, this will violate the promise that post notification job will be called atomically with the operation that triggered it and **only when it is safe to write**.\n\nThe PR fixes the issue by wrapping each expiration/eviction of a key with an execution unit. This make sure the entire operation will run atomically and all the post notification jobs will be executed at the end where it safe to write.\n\nTests were modified to verify the fix.","shortMessageHtmlLink":"Before evicted and before expired server events are not executed insi…"}},{"before":"4d7349b2f8e582db5b7ba36bc4c0d488ba98880c","after":"08bf93b96cfaf28d4ad1a873be0918b0ddb2a3ad","ref":"refs/heads/disable_function_load_timeout_on_loading_and_replication","pushedAt":"2023-07-31T10:17:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Spellcheck fixes","shortMessageHtmlLink":"Spellcheck fixes"}},{"before":null,"after":"4d7349b2f8e582db5b7ba36bc4c0d488ba98880c","ref":"refs/heads/disable_function_load_timeout_on_loading_and_replication","pushedAt":"2023-07-31T10:15:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Ensure that the function load timeout is disabled during loading from RDB/AOF and on replicas.\n\nWhen loading a function from either RDB/AOF or a replica, it is essential not to fail on timeout errors. The loading time may vary due to various factors, such as hardware specifications or the system's workload during the loading process. Once a function has been successfully loaded, it should be allowed to load from persistence or on replicas without encountering a timeout failure.\n\nTo maintain a clear separation between the engine and Redis internals, the implementation refrains from directly checking the state of Redis within the engine itself. Instead, the engine receives the desired timeout as part of the library creation and duly respects this timeout value. If Redis wishes to disable any timeout, it can simply send a value of 0.","shortMessageHtmlLink":"Ensure that the function load timeout is disabled during loading from…"}},{"before":"5d012c6c9d805bc7c16f69978c12a2894e96c14d","after":"2a459aff96a6b4d1ff1f840bf9ed436971830001","ref":"refs/heads/fix_used_after_free_on_async_rm_call","pushedAt":"2023-06-25T10:51:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Fix tests failure","shortMessageHtmlLink":"Fix tests failure"}},{"before":"6d5eea022712a2d9f952739898085867bfda910b","after":"5d012c6c9d805bc7c16f69978c12a2894e96c14d","ref":"refs/heads/fix_used_after_free_on_async_rm_call","pushedAt":"2023-06-25T09:40:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oranagra","name":"Oran Agra","path":"/oranagra","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7045099?s=80&v=4"},"commit":{"message":"adding missing $rd close","shortMessageHtmlLink":"adding missing $rd close"}},{"before":"132d65f51ccbcd04f619a23287937ff9f7d50966","after":"6d5eea022712a2d9f952739898085867bfda910b","ref":"refs/heads/fix_used_after_free_on_async_rm_call","pushedAt":"2023-06-25T08:49:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Apply suggestions from code review\n\nCo-authored-by: Oran Agra ","shortMessageHtmlLink":"Apply suggestions from code review"}},{"before":null,"after":"132d65f51ccbcd04f619a23287937ff9f7d50966","ref":"refs/heads/fix_used_after_free_on_async_rm_call","pushedAt":"2023-06-25T08:24:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Fix use after free on blocking RM_Call.\n\nblocking RM_Call was introduced on: https://github.com/redis/redis/pull/11568It allows a module to perform blocking commands and get the reply asynchronously.If the command gets block, a special promise CallReply is returned that allow to setthe unblock handler. The unblock hander will be called when the command invocation finishand it gets, as input, the command real reply.\n\nThe issue was that the real CallReply was created using a stack allocated RedisModuleCtxwhich is no longer available after the unblock handler finishes. So if the module keepsthe CallReply after the unblock handler finished, the CallReply holds a pointer to invalidmemory and will try to access it when the CallReply will be released.\n\nThe solution is to create the CallReply with a NULL context to make it totally detachedand can be freed freely when the module wants.\n\nTest was added to cover this case, running the test with valgrind before the fix shows the use after free error. With the fix, there are not valgrind errors.","shortMessageHtmlLink":"Fix use after free on blocking RM_Call."}},{"before":"eac68c911c59d54ebea0185136a60d002603883c","after":"5ea9d4c7253bd92c8a0053a06854e14f2f90212b","ref":"refs/heads/prevent_PEJ_on_loading","pushedAt":"2023-06-12T10:39:32.959Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"disallow PEJ on readonly replica.","shortMessageHtmlLink":"disallow PEJ on readonly replica."}},{"before":null,"after":"eac68c911c59d54ebea0185136a60d002603883c","ref":"refs/heads/prevent_PEJ_on_loading","pushedAt":"2023-06-12T10:27:12.751Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Prevent PEJ on loading.\n\nFixes #11643\n\nWhile Redis loading data from disk (AOF or RDB), modules will get key space notifications.\nIn such stage the module should not register any PEJ, the main reason this is forbiden\nis that PEJ purpose is to perform a write operation as a reaction to the key space notification.\nWrite operations should not be performed while loading data and so there is no reason to\nregister a PEJ. If a module need to perform some other task which is not involve writing, he\ncan do it on the key space notification callback itself.","shortMessageHtmlLink":"Prevent PEJ on loading."}},{"before":"c16feff53466c37184d57caed57402ab102a368c","after":"9d46d7a10faceed0c5f313d3e64ddc35d36f3c9a","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T11:12:33.777Z","pushType":"push","commitsCount":1,"pusher":{"login":"oranagra","name":"Oran Agra","path":"/oranagra","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7045099?s=80&v=4"},"commit":{"message":"rephrase comment","shortMessageHtmlLink":"rephrase comment"}},{"before":"b3785cae60c5bfe63ab4a33f91cab80d18069ac5","after":"c16feff53466c37184d57caed57402ab102a368c","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T10:42:40.616Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Spellcheck fixes.","shortMessageHtmlLink":"Spellcheck fixes."}},{"before":"2bc2d97b48205a15ebe05ed30cfe18a847c9eca5","after":"b3785cae60c5bfe63ab4a33f91cab80d18069ac5","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T10:34:23.856Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Update documentation, explain that fire and forget is dangerous in case of failover.","shortMessageHtmlLink":"Update documentation, explain that fire and forget is dangerous in ca…"}},{"before":"cc894d9903bd4364b9122272abcfa180d22c9813","after":"2bc2d97b48205a15ebe05ed30cfe18a847c9eca5","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T10:29:58.104Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Update src/module.c\n\nCo-authored-by: Oran Agra ","shortMessageHtmlLink":"Update src/module.c"}},{"before":"ddb5964ad09f068ad2ac40b18bd3bac1ada9fe99","after":"cc894d9903bd4364b9122272abcfa180d22c9813","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T09:32:50.941Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Document the module responsibility to abort the execution on failover.","shortMessageHtmlLink":"Document the module responsibility to abort the execution on failover."}},{"before":"a9bf2be07eb9532d6075262d7b9e86c888eadddf","after":"ddb5964ad09f068ad2ac40b18bd3bac1ada9fe99","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-16T07:11:08.801Z","pushType":"push","commitsCount":3,"pusher":{"login":"oranagra","name":"Oran Agra","path":"/oranagra","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7045099?s=80&v=4"},"commit":{"message":"Merge branch 'unstable' into blocking_rm_call","shortMessageHtmlLink":"Merge branch 'unstable' into blocking_rm_call"}},{"before":"b14722250339380cba9a5acef5a7454c219837e3","after":"a9bf2be07eb9532d6075262d7b9e86c888eadddf","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T18:44:37.289Z","pushType":"push","commitsCount":3,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Merge branch 'unstable' into blocking_rm_call","shortMessageHtmlLink":"Merge branch 'unstable' into blocking_rm_call"}},{"before":"a1d4325fe3b7bad50f418523180c4efbf4a2fcdd","after":"b14722250339380cba9a5acef5a7454c219837e3","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T18:37:11.934Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Avoid update block client stats on module client.","shortMessageHtmlLink":"Avoid update block client stats on module client."}},{"before":"695ada75b701f5320d80161a08de65f0d3628615","after":"a1d4325fe3b7bad50f418523180c4efbf4a2fcdd","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T11:49:46.069Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Review fixes.","shortMessageHtmlLink":"Review fixes."}},{"before":"d797938ed13ef8ef05fb5f894ac79811ffc0d85d","after":"695ada75b701f5320d80161a08de65f0d3628615","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T11:43:57.618Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Review fixes.","shortMessageHtmlLink":"Review fixes."}},{"before":"5b67f8c43135f8dfb724bd495c6b3b2f4d45a879","after":"d797938ed13ef8ef05fb5f894ac79811ffc0d85d","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T09:32:25.394Z","pushType":"push","commitsCount":3,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Merge branch 'unstable' into blocking_rm_call","shortMessageHtmlLink":"Merge branch 'unstable' into blocking_rm_call"}},{"before":"8ace912b1890f4540d04e3c0b3016aa7f28b6727","after":"5b67f8c43135f8dfb724bd495c6b3b2f4d45a879","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T09:20:48.522Z","pushType":"push","commitsCount":2,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Merge branch 'unstable' into blocking_rm_call","shortMessageHtmlLink":"Merge branch 'unstable' into blocking_rm_call"}},{"before":"c25dc0c3f1542c9dd665d8756a83b7db82c9778c","after":"8ace912b1890f4540d04e3c0b3016aa7f28b6727","ref":"refs/heads/blocking_rm_call","pushedAt":"2023-03-15T08:51:48.365Z","pushType":"push","commitsCount":1,"pusher":{"login":"MeirShpilraien","name":"Meir Shpilraien (Spielrein)","path":"/MeirShpilraien","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/28348822?s=80&v=4"},"commit":{"message":"Review fixes.","shortMessageHtmlLink":"Review fixes."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEgLr0NgA","startCursor":null,"endCursor":null}},"title":"Activity · MeirShpilraien/redis"}