{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":122676777,"defaultBranch":"master","name":"raft","ownerLogin":"RedisLabs","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-02-23T21:55:28.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1991868?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1666984149.9651752","currentOid":""},"activityList":{"items":[{"before":"75926627b8f8211d46467c84f5958ae0882dd224","after":"a634de6f81e1d774ce95e3acd62aef349ce6e521","ref":"refs/heads/master","pushedAt":"2023-06-22T10:00:09.072Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Add sanitizer support and fix leaks in tests (#167)","shortMessageHtmlLink":"Add sanitizer support and fix leaks in tests (#167)"}},{"before":"b354273476a7b56327e885be4f8d09571c068cbd","after":"75926627b8f8211d46467c84f5958ae0882dd224","ref":"refs/heads/master","pushedAt":"2023-06-20T14:31:18.149Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Free memory on raft_destroy() and raft_log_free() (#166)\n\nFree memory on raft_destroy() and raft_log_free()","shortMessageHtmlLink":"Free memory on raft_destroy() and raft_log_free() (#166)"}},{"before":"9a0c6c0edf196946c0ad957b0da4fe47114fad3d","after":"b354273476a7b56327e885be4f8d09571c068cbd","ref":"refs/heads/master","pushedAt":"2023-05-23T15:44:38.962Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Return TRYAGAIN for cfg changes until log replay (#165)","shortMessageHtmlLink":"Return TRYAGAIN for cfg changes until log replay (#165)"}},{"before":"9ba34e871bc71dad7769f711a2274ab72312c8c1","after":"9a0c6c0edf196946c0ad957b0da4fe47114fad3d","ref":"refs/heads/master","pushedAt":"2023-05-10T15:17:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Fix load_snapshot() error handling bug (#162)\n\nConsider the snapshot delivery scenario:\r\n\r\n- Follower receives the last chunk, calls store_snapshot_chunk() \r\nsuccesfully and updates its snapshot_recv_offset. Later it calls\r\nload_snapshot() but it fails. \r\n\r\n- Follower returns failure response. In the response, \"offset\" will be\r\nzero. So, follower requests leader to start snapshot delivery from the\r\nbeginning.\r\n\r\n- Leader sends the first chunk. Follower rejects the message as its \r\nsnapshot_recv_offset is not zero (Actually, follower has stored all the\r\nbytes, snapshot_recv_offset is equal to snapshot size). Follower returns\r\nthis offset in the response.\r\n\r\n- Leader calls get_snapshot_chunk() callback for the received offset from\r\nthe follower. As there are no more bytes to send, get_snapshot_chunk()\r\nreturns RAFT_ERR_DONE and leader skips sending snapshot req.\r\n\r\nThis bug causes leader to stop sending appendreq/snapshotreq to the \r\nfollower until leader takes another snapshot. Follower starts an \r\nelection as it doesn't hear from the leader but other nodes won't vote\r\nfor it as the rest of the cluster operates fine.\r\n\r\nSolution is to consider store_snapshot_chunk() and load_snapshot() as \r\nan atomic unit. So, if load_snapshot() fails, we return the response as\r\nif like we didn't store the last chunk. Leader will send the same chunk\r\nagain and we can retry the operation.","shortMessageHtmlLink":"Fix load_snapshot() error handling bug (#162)"}},{"before":"2b7f9c7f2f05e8ac11d8b2c271c2698e80c4708d","after":"9ba34e871bc71dad7769f711a2274ab72312c8c1","ref":"refs/heads/master","pushedAt":"2023-05-10T08:47:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Add snapshot_index to raft_snapshot_resp_t struct (#163)\n\nNormally, receiver side has checks if the chunk is for the correct \r\nindex and offset. \r\n\r\nAdding snapshot_index to raft_snapshot_resp_t just to be sure we don't \r\nupdate snapshot offset for the node unnecessarily.\r\n\r\nAlso, it makes debugging easier as we know the snapshot index that \r\nresponse refers to.","shortMessageHtmlLink":"Add snapshot_index to raft_snapshot_resp_t struct (#163)"}},{"before":"3973759eacb6ed42f16e4e8cc9f0c45b5b5bdb49","after":"2b7f9c7f2f05e8ac11d8b2c271c2698e80c4708d","ref":"refs/heads/master","pushedAt":"2023-05-10T07:04:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sjpotter","name":"Shaya Potter","path":"/sjpotter","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1659735?s=80&v=4"},"commit":{"message":" RR-238 - Recording and Retrieving of RAFT RPC stats\n\nRecord counts for raft RPC stats, sending / retrieving / success / failure and the like.\r\n\r\ncover append entry, requestvote (including prevote) and snapshots\r\n\r\n---------\r\n\r\nCo-authored-by: Ozan Tezcan ","shortMessageHtmlLink":" RR-238 - Recording and Retrieving of RAFT RPC stats"}},{"before":"c5aee21b558aaf7be2d40b8296106bf03bc0a0a7","after":"3973759eacb6ed42f16e4e8cc9f0c45b5b5bdb49","ref":"refs/heads/master","pushedAt":"2023-05-09T09:59:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Fix compaction rate usage in virtraft (#161)","shortMessageHtmlLink":"Fix compaction rate usage in virtraft (#161)"}},{"before":"ef5d4ebb04a1793c6716faff32b93cd65f573faa","after":"c5aee21b558aaf7be2d40b8296106bf03bc0a0a7","ref":"refs/heads/master","pushedAt":"2023-05-04T08:28:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Use raft_size_t for entry len (#160)\n\nCurrently, entry len type is unsigned int which limits entry size to 4 gb.\r\nChanging it to raft_size_t (unsigned long long) to allow larger entries.","shortMessageHtmlLink":"Use raft_size_t for entry len (#160)"}},{"before":"59a177bf41e93ec079df9d01b9537fac1b6b3b78","after":"ef5d4ebb04a1793c6716faff32b93cd65f573faa","ref":"refs/heads/master","pushedAt":"2023-04-15T02:09:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Assign random id automatically to the entries (#158)\n\n`raft_entry_t` has `id` field which is used for debugging purposes. \r\nCurrently, it has the value of zero but we can assign a random value by default. \r\nUser might override it if required.","shortMessageHtmlLink":"Assign random id automatically to the entries (#158)"}},{"before":"f87034bd14d9d7ef21bd91a7757f5e05762b6ba5","after":"59a177bf41e93ec079df9d01b9537fac1b6b3b78","ref":"refs/heads/master","pushedAt":"2023-04-13T18:30:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tezc","name":"Ozan Tezcan","path":"/tezc","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17865367?s=80&v=4"},"commit":{"message":"Fix compile warning (#157)","shortMessageHtmlLink":"Fix compile warning (#157)"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADRsLLkgA","startCursor":null,"endCursor":null}},"title":"Activity ยท RedisLabs/raft"}