{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":775743011,"defaultBranch":"unstable","name":"valkey","ownerLogin":"valkey-io","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-03-22T00:42:17.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/164458127?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726433069.0","currentOid":""},"activityList":{"items":[{"before":"ba71c7e56e40daed2871975b3ff433383a20cd93","after":"4593dc2f059661e1c4eb43bba025f68948344228","ref":"refs/heads/unstable","pushedAt":"2024-09-18T11:35:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Fix memory allocation for server databases (#1046)\n\nFix a bug in the way we allocate memory for the server databases\r\nIntroduced in #156.\r\n\r\nSigned-off-by: Ran Shidlansik ","shortMessageHtmlLink":"Fix memory allocation for server databases (#1046)"}},{"before":"ff69b4be1db24ea4e3b111e8e865af0df601b907","after":"ba71c7e56e40daed2871975b3ff433383a20cd93","ref":"refs/heads/unstable","pushedAt":"2024-09-18T02:34:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Copy 'errno' and use copied value in the if check of retry in cluster migrate commands socket_err block. (#1042)\n\nerrno is global variable and shared with system calls, so there is\r\nchance it may be overwritten during io free or close socket in migrate\r\ncommand code. It would be better it is copied before the free or\r\nclosesocket and use copied value to check for retry in socket_err block.\r\nSo added new variable to take copy and used the copy variable for the\r\ncheck.\r\n\r\nSigned-off-by: Shivshankar-Reddy ","shortMessageHtmlLink":"Copy 'errno' and use copied value in the if check of retry in cluster…"}},{"before":"f89ff3137d437e7c43d910e4d28ed8fbed44decc","after":"ff69b4be1db24ea4e3b111e8e865af0df601b907","ref":"refs/heads/unstable","pushedAt":"2024-09-18T02:32:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Fix casing in README.md (#1043)\n\nTO -> To\r\n\r\nSigned-off-by: Josef Šimánek ","shortMessageHtmlLink":"Fix casing in README.md (#1043)"}},{"before":"9f8185f5c80bc98bdbc631b90ccf13929d6a0cbc","after":"f89ff3137d437e7c43d910e4d28ed8fbed44decc","ref":"refs/heads/unstable","pushedAt":"2024-09-17T11:50:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Add --moduleapi option to better use runtest-moduleapi (#1007)\n\nThis allows us to avoid error #1002 and enables us to actually\r\nuse `./runtest-moduleapi --single xxx`.\r\n\r\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Add --moduleapi option to better use runtest-moduleapi (#1007)"}},{"before":"7424b17dabfb5f4346661c21a969821894b6c984","after":"2b5c7a0dbd61fd4281ef6166b7d119ba7fe7368c","ref":"refs/heads/8.0","pushedAt":"2024-09-15T20:08:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Fix a typo in the 8.0 release notes (#1036)\n\nSigned-off-by: Ping Xie ","shortMessageHtmlLink":"Fix a typo in the 8.0 release notes (#1036)"}},{"before":"76ec25f90a4afefe2235b414aa49d0b198c864de","after":"7424b17dabfb5f4346661c21a969821894b6c984","ref":"refs/heads/8.0","pushedAt":"2024-09-15T19:53:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Add Valkey 8.0 GA Release Notes (#1034)\n\nBased on #1031\r\n\r\n---------\r\n\r\nSigned-off-by: Ping Xie \r\nSigned-off-by: Ping Xie \r\nCo-authored-by: Madelyn Olson ","shortMessageHtmlLink":"Add Valkey 8.0 GA Release Notes (#1034)"}},{"before":"85a58478df28c99f2b1054e72996ed1b8d6e4f7c","after":"76ec25f90a4afefe2235b414aa49d0b198c864de","ref":"refs/heads/8.0","pushedAt":"2024-09-15T18:49:49.000Z","pushType":"pr_merge","commitsCount":31,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Revert \"Update version number to 8.0\"\n\nThis reverts commit 3179f2528db86582fb7fbf26d6d0e59555cd6b18.\n\nSigned-off-by: Ping Xie ","shortMessageHtmlLink":"Revert \"Update version number to 8.0\""}},{"before":"17390383b58e7e894e9a754132509def2ce0d913","after":"9f8185f5c80bc98bdbc631b90ccf13929d6a0cbc","ref":"refs/heads/unstable","pushedAt":"2024-09-14T04:43:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Update valkey-benchmark log output to reference 'server' instead of 'Redis' (#1029)\n\nReplaced \"Could not connect to Redis\" with \"Could not connect to server\" in the log\r\noutput for connection errors in `getRedisContext` and `createClient`.\r\n\r\nSigned-off-by: Shivshankar-Reddy ","shortMessageHtmlLink":"Update valkey-benchmark log output to reference 'server' instead of '…"}},{"before":"09def3cf03b93586bd49f689753b7d749e3bea55","after":"17390383b58e7e894e9a754132509def2ce0d913","ref":"refs/heads/unstable","pushedAt":"2024-09-14T03:49:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Replica flush the old data after RDB file is ok in disk-based replication (#926)\n\nCall emptyData right before rdbLoad to prevent errors in the middle\r\nand we drop the replication stream and leaving an empty database.\r\nThe real changes is in disk-based part, the rest is just code movement.\r\n\r\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Replica flush the old data after RDB file is ok in disk-based replica…"}},{"before":"dcc7678fc4d4b7b26e79b76489d37a93064420c3","after":"09def3cf03b93586bd49f689753b7d749e3bea55","ref":"refs/heads/unstable","pushedAt":"2024-09-14T00:21:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Improve code readability in dict.c (#943)\n\nThis pull request improves code readability, as a follow up of #749.\r\n\r\n- Internal Naming Conventions: Removed the use of underscores (_) for\r\ninternal static structures/functions.\r\n\r\n- Descriptive Function Names: Updated function names to be more\r\ndescriptive, making their purpose clearer. For instance, `_dictExpand`\r\nis renamed to `dictExpandIfAutoResizeAllowed`.\r\n\r\n---------\r\n\r\nSigned-off-by: Ping Xie ","shortMessageHtmlLink":"Improve code readability in dict.c (#943)"}},{"before":"d090fbefded1c1f67a4450100fe42d0dbdbad564","after":"dcc7678fc4d4b7b26e79b76489d37a93064420c3","ref":"refs/heads/unstable","pushedAt":"2024-09-13T22:32:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Fix replica unable trigger migration when it received CLUSTER SETSLOT in advance (#981)\n\nFix timing issue in evaluating `cluster-allow-replica-migration` for replicas\r\n\r\nThere is a timing bug where the primary and replica have different \r\n`cluster-allow-replica-migration` settings. In issue #970, we found that if \r\nthe replica receives `CLUSTER SETSLOT` before the gossip update, it remains \r\nin the original shard. This happens because we only process the \r\n`cluster-allow-replica-migration` flag for primaries during `CLUSTER SETSLOT`.\r\n\r\nThis commit fixes the issue by also evaluating this flag for replicas in the \r\n`CLUSTER SETSLOT` path, ensuring correct replica migration behavior.\r\n\r\nCloses #970\r\n---------\r\n\r\nSigned-off-by: Binbin \r\nCo-authored-by: Ping Xie ","shortMessageHtmlLink":"Fix replica unable trigger migration when it received CLUSTER SETSLOT…"}},{"before":"3cc619f6378e46b005604e9e24c75f948a7322db","after":"d090fbefded1c1f67a4450100fe42d0dbdbad564","ref":"refs/heads/unstable","pushedAt":"2024-09-13T16:22:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"Add the missing help output for new command: client capa redirect (#1025)\n\nUpdate client help output message for new command: client capa redirect\r\n\r\n---------\r\n\r\nSigned-off-by: hwware \r\nSigned-off-by: Binbin \r\nCo-authored-by: Binbin \r\nCo-authored-by: Madelyn Olson ","shortMessageHtmlLink":"Add the missing help output for new command: client capa redirect (#1025"}},{"before":"f7c5b401830616652fa9a97c916f40a45166ade2","after":"3cc619f6378e46b005604e9e24c75f948a7322db","ref":"refs/heads/unstable","pushedAt":"2024-09-13T07:02:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Disable flaky empty shard slot migration tests (#1027)\n\nWill continue my investigation offline\r\n\r\nSigned-off-by: Ping Xie ","shortMessageHtmlLink":"Disable flaky empty shard slot migration tests (#1027)"}},{"before":"38457b73208d9edadbdeb64dda8b18f57099475a","after":"f7c5b401830616652fa9a97c916f40a45166ade2","ref":"refs/heads/unstable","pushedAt":"2024-09-13T06:53:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Avoid false positive in election tests (#984)\n\nThe node may not be able to initiate an election in time due to\r\nproblems with cluster communication. If an election is initiated,\r\nmake sure its offset is 0.\r\n\r\nCloses #967.\r\n\r\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Avoid false positive in election tests (#984)"}},{"before":"76a59788e6b99deb33f3df7fa9946c063eb981f6","after":"38457b73208d9edadbdeb64dda8b18f57099475a","ref":"refs/heads/unstable","pushedAt":"2024-09-12T07:43:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Trigger a save of the cluster configuration file before shutting down (#822)\n\nThe cluster configuration file is the metadata \"database\" for the\r\ncluster. It is best to trigger a save when shutdown the server, to\r\navoid inconsistent content that is not refreshed.\r\n\r\nWe save the nodes.conf whenever something that affects the nodes.conf\r\nhas changed. But we are saving nodes.conf in clusterBeforeSleep, and\r\nsome events may save it without a fsync, there is a time gap.\r\n\r\nAnd shutdown has its own save seems good to me, it doesn't need to\r\ncare about the others.\r\n\r\nAt the same time, a comment is added in unlock nodes.conf to explain\r\nwhy we actively unlock when shutdown.\r\n\r\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Trigger a save of the cluster configuration file before shutting down ("}},{"before":"3513f220276c1905aeaadc362b59a7ed10cad168","after":"76a59788e6b99deb33f3df7fa9946c063eb981f6","ref":"refs/heads/unstable","pushedAt":"2024-09-12T06:19:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Re-enable empty-shard slot migration tests (#1024)\n\nRelated to #734 and #858\r\n\r\nSigned-off-by: Ping Xie ","shortMessageHtmlLink":"Re-enable empty-shard slot migration tests (#1024)"}},{"before":"8cca11ac541012e6bfbe995fb0367e6a058719b6","after":"3513f220276c1905aeaadc362b59a7ed10cad168","ref":"refs/heads/unstable","pushedAt":"2024-09-12T05:33:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Make clang-format insert a newline at end of file if missing (#1023)\n\nclang generates warning if there is no newline at the end of the source\r\nfile.\r\n\r\nUpdate .clang-format to handle the missing newline at eof.\r\n\r\nSigned-off-by: haoqixu ","shortMessageHtmlLink":"Make clang-format insert a newline at end of file if missing (#1023)"}},{"before":"fa348e2e59700244e60df2edeb1219f2989e0284","after":"8cca11ac541012e6bfbe995fb0367e6a058719b6","ref":"refs/heads/unstable","pushedAt":"2024-09-12T02:36:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Fix wrong count for replica's tot-net-out (#1013)\n\nFix duplicate calculation of replica's `net_output_bytes`\r\n\r\n- Remove redundant calculation leftover from previous refactor\r\n- Add test to prevent regression\r\n\r\nSigned-off-by: Uri Yagelnik \r\nSigned-off-by: Binbin \r\nCo-authored-by: Binbin ","shortMessageHtmlLink":"Fix wrong count for replica's tot-net-out (#1013)"}},{"before":"74e7c37fa1fb7134ee0855115212c1b81b06f89f","after":"69773b1386ebbcc839259f28ba87f5a0af486e28","ref":"refs/heads/hashtab","pushedAt":"2024-09-11T21:12:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zuiderkwast","name":"Viktor Söderqvist","path":"/zuiderkwast","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/273886?s=80&v=4"},"commit":{"message":"clang-format .h file\n\nSigned-off-by: Viktor Söderqvist ","shortMessageHtmlLink":"clang-format .h file"}},{"before":"2b207ee1b3808c5eb5de6879651104044ca162b2","after":"fa348e2e59700244e60df2edeb1219f2989e0284","ref":"refs/heads/unstable","pushedAt":"2024-09-11T16:53:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"Optimize the per slot dictionary by checking for cluster mode earlier (#995)\n\nWhile doing some profiling, I noticed that getKeySlot() was a fairly\r\nlarge part (~0.7%) of samples doing perf with high pipeline during\r\nstandalone. I think this is because we do a very late check for\r\nserver.cluster_mode, we first call getKeySlot() and then call\r\ncalculateKeySlot(). (calculateKeySlot was surprisingly not automatically\r\ninlined, we were doing a jump into it and then immediately returning\r\nzero). We then also do useless work in the form of caching zero in\r\nclient->slot, which will further mess with cache lines.\r\n\r\nSo, this PR tries to accomplish a few things things.\r\n1) The usage of the `slot` name made a lot more sense before the\r\nintroduction of the kvstore. Now with kvstore, we call this the database\r\nindex, so all the references to slot in standalone are no longer really\r\naccurate.\r\n2) Pull the cluster mode check all the way out of getKeySlot(), so\r\nhopefully a bit more performant.\r\n3) Remove calculateKeySlot() as independent from getKeySlot().\r\ncalculateKeySlot used to have 3 call sites outside of db.c, which\r\nwarranted it's own function. It's now only called in two places,\r\npubsub.c and networking.c.\r\n\r\nI ran some profiling, and saw about ~0.3% improvement, but don't really\r\ntrust it because you'll see a much higher (~2%) variance in test runs\r\njust by how the branch predictions will get changed with a new memory\r\nlayout. Running perf again showed no samples in getKeySlot() and a\r\nreduction in samples in lookupKey(), so maybe this will help a little\r\nbit.\r\n\r\n---------\r\n\r\nSigned-off-by: Madelyn Olson ","shortMessageHtmlLink":"Optimize the per slot dictionary by checking for cluster mode earlier ("}},{"before":"c77e8f223ce18b51749fb7d1191ed305a64eda79","after":"2b207ee1b3808c5eb5de6879651104044ca162b2","ref":"refs/heads/unstable","pushedAt":"2024-09-11T16:52:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"Improve stability of hostnames test (#1016)\n\nMaybe partially resolves https://github.com/valkey-io/valkey/issues/952.\r\n\r\nThe hostnames test relies on an assumption that node zero and node six\r\ndon't communicate with each other to test a bunch of behavior in the\r\nhandshake stake. This was done by previously dropping all meet packets,\r\nhowever it seems like there was some case where node zero was sending a\r\nsingle pong message to node 6, which was partially initializing the\r\nstate.\r\n\r\nI couldn't track down why this happened, but I adjusted the test to\r\nsimply pause node zero which also correctly emulates the state we want\r\nto be in since we're just testing state on node 6, and removes the\r\nchance of errant messages. The test was failing about 5% of the time\r\nlocally, and I wasn't able to reproduce a failure with this new\r\nconfiguration.\r\n\r\n---------\r\n\r\nSigned-off-by: Madelyn Olson ","shortMessageHtmlLink":"Improve stability of hostnames test (#1016)"}},{"before":"de69e055a5ef4033cc7d754132d9cb99aadba3dc","after":"74e7c37fa1fb7134ee0855115212c1b81b06f89f","ref":"refs/heads/hashtab","pushedAt":"2024-09-11T16:01:39.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zuiderkwast","name":"Viktor Söderqvist","path":"/zuiderkwast","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/273886?s=80&v=4"},"commit":{"message":"Clang-format\n\nSigned-off-by: Viktor Söderqvist ","shortMessageHtmlLink":"Clang-format"}},{"before":"4033c99ef522cd66150878dee8a97dc057b05a25","after":"c77e8f223ce18b51749fb7d1191ed305a64eda79","ref":"refs/heads/unstable","pushedAt":"2024-09-11T05:50:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"Added .git-blame-ignore-revs (#1010)\n\nThis file enables developers to ignore the certain revisions in\r\ngit-blame. This is quite handy considering there was a commit that\r\nreformatted the large amount of code in valkey.\r\n\r\nAs a downside, one has to do a manual step for each clone of valkey to\r\nenable this feature. The instructions are available in the file itself.\r\n\r\n---------\r\n\r\nSigned-off-by: Mikhail Koviazin ","shortMessageHtmlLink":"Added .git-blame-ignore-revs (#1010)"}},{"before":"1b241684508bd6fd63c083c25a9a4195a8e242d9","after":"4033c99ef522cd66150878dee8a97dc057b05a25","ref":"refs/heads/unstable","pushedAt":"2024-09-11T04:00:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Fix module RdbLoad wrongly disable the AOF (#1001)\n\nIn RdbLoad, we disable AOF before emptyData and rdbLoad to prevent copy-on-write issues. After rdbLoad completes, AOF should be re-enabled, but the code incorrectly checks server.aof_state, which has been reset to AOF_OFF in stopAppendOnly. This leads to AOF not being re-enabled after being disabled.\r\n---------\r\n\r\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Fix module RdbLoad wrongly disable the AOF (#1001)"}},{"before":"58fe9c0138af8a45dfcb906a3d5c631a6d6e9a30","after":"1b241684508bd6fd63c083c25a9a4195a8e242d9","ref":"refs/heads/unstable","pushedAt":"2024-09-11T00:26:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PingXie","name":"Ping Xie","path":"/PingXie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11568491?s=80&v=4"},"commit":{"message":"Dual Channel Replication - Verify Replica Local Buffer Limit Configuration (#989)\n\nPrior to comparing the replica buffer against the configured limit, we\r\nneed to ensure that the limit configuration is enabled. If the limit is\r\nset to zero, it indicates that there is no limit, and we should skip the\r\nbuffer limit check.\r\n\r\n---------\r\n\r\nSigned-off-by: naglera ","shortMessageHtmlLink":"Dual Channel Replication - Verify Replica Local Buffer Limit Configur…"}},{"before":"9f0c80187e55517a8ee23f4ad31a65622e45fb84","after":"58fe9c0138af8a45dfcb906a3d5c631a6d6e9a30","ref":"refs/heads/unstable","pushedAt":"2024-09-10T20:09:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"zuiderkwast","name":"Viktor Söderqvist","path":"/zuiderkwast","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/273886?s=80&v=4"},"commit":{"message":"Use hashtable as the default type of temp set object during sunion/sdiff (#996)\n\nThis patch try to set the temp set object as default hash table type.\r\nAnd did a simple predication of the temp set object encoding when\r\ninitialize `dstset` to reduce the unnecessary conversation.\r\n\r\n## Issue Description\r\n\r\nAccording to existing code logic, when did operation like `sunion` and\r\n`sdiff` , the temp set object could be `intset`, `listpack` and\r\n`hashtable`, for the `listpack`, the efficiency is low when did\r\noperation like `find` and `compare` , need to traverse all elements.\r\nWhen we exploring the hotspots, found the `lpFind` and `memcmp` has been\r\nthe bottleneck when running workloads like below:\r\n\r\n-\r\n[memtier_benchmark-2keys-set-10-100-elements-sunion.yml](https://github.com/redis/redis-benchmarks-specification/blob/main/redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sunion.yml)\r\n-\r\n[memtier_benchmark-2keys-set-10-100-elements-sdiff.yml](https://github.com/redis/redis-benchmarks-specification/blob/main/redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sdiff.yml)\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/71dfc70b-2ad5-4832-a338-712deefca20e)\r\n\r\n## Optimization \r\n\r\nThis patch try to set the temp set object as default hash table type.\r\nAnd did a simple predication of the temp set object encoding when\r\ninitialize `dstset` to reduce the unnecessary conversation.\r\n\r\n### Test Environment\r\n\r\n- OPERATING SYSTEM: Ubuntu 22.04.4 LTS\r\n- Kernel: 5.15.0-116-generic\r\n- PROCESSOR: Intel Xeon Platinum 8380\r\n- Server and Client in same socket.\r\n\r\n#### Server Configuration\r\n```\r\ntaskset -c 0-3 ~/valkey/src/valkey-server /tmp/valkey.conf\r\n\r\nport 9001\r\nbind * -::*\r\ndaemonize no\r\nprotected-mode no\r\nsave \"\"\r\n```\r\n\r\n#### Performance Boost \r\n\r\n| Test Name| Perf Boost|\r\n|-|-|\r\n\r\n|[memtier_benchmark-2keys-set-10-100-elements-sunion.yml](https://github.com/redis/redis-benchmarks-specification/blob/main/redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sunion.yml)\r\n|41%|\r\n\r\n|[memtier_benchmark-2keys-set-10-100-elements-sdiff.yml](https://github.com/redis/redis-benchmarks-specification/blob/main/redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sdiff.yml)\r\n|27%|\r\n\r\n\r\n### More Tests\r\nWith above test set which have total 110 elements in the 2 given sets.\r\nWe also did some benchmarking by adjusting the total number of elements\r\nin all given sets. We can still observe the performance boost.\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/b2ab420c-43e5-45de-9715-7d943df229cb)\r\n\r\n---------\r\n\r\nSigned-off-by: Lipeng Zhu \r\nCo-authored-by: Wangyang Guo ","shortMessageHtmlLink":"Use hashtable as the default type of temp set object during sunion/sd…"}},{"before":"affbea5dc1ae1a0d80019c4f313d2bf1c3fcb7f9","after":"9f0c80187e55517a8ee23f4ad31a65622e45fb84","ref":"refs/heads/unstable","pushedAt":"2024-09-10T18:20:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"Fix crash in async IO threads with TLS (#1011)\n\nFix for https://github.com/valkey-io/valkey/issues/997\r\n\r\nRoot Cause Analysis:\r\n1. Two different jobs (READ and WRITE) may be sent to the same IO\r\nthread.\r\n2. When processing the read job in `processIOThreadsReadDone`, the IO\r\nthread may find that the write job has also been completed.\r\n3. In this case, the IO thread calls `processClientIOWriteDone` to first\r\nprocess the completed write job and free the COBs\r\nhttps://github.com/valkey-io/valkey/blob/affbea5dc1ae1a0d80019c4f313d2bf1c3fcb7f9/src/networking.c#L4666\r\n4. If there are pending writes (resulting from pipeline commands), a new\r\nasync IO write job is sent before processing the completed read job\r\nhttps://github.com/valkey-io/valkey/blob/affbea5dc1ae1a0d80019c4f313d2bf1c3fcb7f9/src/networking.c#L2417\r\nWhen sending the write job, the `TLS_CONN_FLAG_POSTPONE_UPDATE_STATE`\r\nflag is set to prevent the IO thread from updating the event loop, which\r\nis not thread-safe.\r\n5. Upon resuming the read job processing, the flag is cleared,\r\nhttps://github.com/valkey-io/valkey/blob/affbea5dc1ae1a0d80019c4f313d2bf1c3fcb7f9/src/networking.c#L4685\r\ncausing the IO thread to update the event loop.\r\n\r\nFix:\r\nPrevent sending async write job for pending writes when a read job is\r\nabout to be processed.\r\n\r\nTesting:\r\nThe issue could not be reproduced due to its rare occurrence, which\r\nrequires multiple specific conditions to align simultaneously.\r\n\r\nSigned-off-by: Uri Yagelnik ","shortMessageHtmlLink":"Fix crash in async IO threads with TLS (#1011)"}},{"before":"50c1fe59f7634b9b4658d4fdf9ce52d3468ed8ce","after":"affbea5dc1ae1a0d80019c4f313d2bf1c3fcb7f9","ref":"refs/heads/unstable","pushedAt":"2024-09-10T03:46:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"madolson","name":"Madelyn Olson","path":"/madolson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/34459052?s=80&v=4"},"commit":{"message":"For MEETs, save the extensions support flag immediately during MEET processing (#778)\n\nFor backwards compatibility reasons, a node will wait until it receives\r\na cluster message with the extensions flag before sending its own\r\nextensions. This leads to a delay in shard ID propagation that can\r\ncorrupt nodes.conf with inaccurate shard IDs if a node is restarted\r\nbefore this can stabilize.\r\n\r\nThis fixes much of that delay by immediately triggering the\r\nextensions-supported flag during the MEET processing and attaching the\r\nnode to the link, allowing the PONG reply to contain OSS extensions.\r\n\r\nPartially fixes #774\r\n\r\n---------\r\n\r\nSigned-off-by: Ben Totten \r\nCo-authored-by: Ben Totten ","shortMessageHtmlLink":"For MEETs, save the extensions support flag immediately during MEET p…"}},{"before":"f504cf233bd08d56b1aa4af6c1ef3a2b4aa0ac60","after":"50c1fe59f7634b9b4658d4fdf9ce52d3468ed8ce","ref":"refs/heads/unstable","pushedAt":"2024-09-10T02:13:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"enjoy-binbin","name":"Binbin","path":"/enjoy-binbin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22811481?s=80&v=4"},"commit":{"message":"Add missing moduleapi getchannels test and fix tests (#1002)\n\nSigned-off-by: Binbin ","shortMessageHtmlLink":"Add missing moduleapi getchannels test and fix tests (#1002)"}},{"before":null,"after":"de69e055a5ef4033cc7d754132d9cb99aadba3dc","ref":"refs/heads/hashtab","pushedAt":"2024-09-09T21:50:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"zuiderkwast","name":"Viktor Söderqvist","path":"/zuiderkwast","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/273886?s=80&v=4"},"commit":{"message":"Add 'instant_rehashing' type flag (non-incremental)\n\nSigned-off-by: Viktor Söderqvist ","shortMessageHtmlLink":"Add 'instant_rehashing' type flag (non-incremental)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQxMTozNTozNi4wMDAwMDBazwAAAAS5mfpx","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQxMTozNTozNi4wMDAwMDBazwAAAAS5mfpx","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wOVQyMTo1MDoyNy4wMDAwMDBazwAAAASxZIZ6"}},"title":"Activity · valkey-io/valkey"}