{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":367261349,"defaultBranch":"main","name":"openraft","ownerLogin":"databendlabs","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-05-14T05:45:16.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/80994548?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1725553643.0","currentOid":""},"activityList":{"items":[{"before":"f0b0aa558608ac3aab713675580018b819d30f93","after":"73c53c56835335062a9520e43631a18671006962","ref":"refs/heads/release-0.9","pushedAt":"2024-09-15T03:25:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"CI: Upgrade actions/upload-artifact from v2 to v4","shortMessageHtmlLink":"CI: Upgrade actions/upload-artifact from v2 to v4"}},{"before":"25bed35e640d49466d6f6cc47593cddd402a01ac","after":"f0b0aa558608ac3aab713675580018b819d30f93","ref":"refs/heads/release-0.9","pushedAt":"2024-09-14T14:47:12.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Chunk read log entry and check range on startup\n\n- Implement chunk-based reading of committed log entries when\n re-applying to state machine upon startup.\n\n- Add validation for log entry indexes, to avoid applying wrong entries\n to state machine.","shortMessageHtmlLink":"Refactor: Chunk read log entry and check range on startup"}},{"before":"681d04dac6a99ae8d0a6307756e839ff0a21291f","after":"5d75cf21f71b083b2b8acd8ffdd8993c1bfce36f","ref":"refs/heads/main","pushedAt":"2024-09-14T14:43:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Chunk read log entry and check range on startup\n\n- Implement chunk-based reading of committed log entries when\n re-applying to state machine upon startup.\n\n- Add validation for log entry indexes, to avoid applying wrong entries\n to state machine.","shortMessageHtmlLink":"Refactor: Chunk read log entry and check range on startup"}},{"before":"c28ad9bcbfe4b0e5981b42d5e45933c71162f2c3","after":"681d04dac6a99ae8d0a6307756e839ff0a21291f","ref":"refs/heads/main","pushedAt":"2024-09-13T05:34:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: When a Leader starts up, it should re-apply all logs\n\nWhen a node starts up as the Leader, it now re-applies all logs at once.\n\nPreviously:\n- New Leader only updated IO progress\n- Committed log ID remained unchanged\n\nNow:\n- New Leader updates IO progress\n- Triggers update of committed log ID\n\n- Fix: #1246","shortMessageHtmlLink":"Fix: When a Leader starts up, it should re-apply all logs"}},{"before":"bcc9ac2cbe9f85af69ba00a85597b21f756d61ad","after":"c28ad9bcbfe4b0e5981b42d5e45933c71162f2c3","ref":"refs/heads/main","pushedAt":"2024-09-11T14:47:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Doc: Example description in README","shortMessageHtmlLink":"Doc: Example description in README"}},{"before":"2d6441a1a5dbfad0261df1794d2ebbe0eea0f715","after":"25bed35e640d49466d6f6cc47593cddd402a01ac","ref":"refs/heads/release-0.9","pushedAt":"2024-09-05T16:27:23.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Doc: add change-log 0.9.16","shortMessageHtmlLink":"Doc: add change-log 0.9.16"}},{"before":"0063194c7f1e3d3c15402ada1f3ecdcbe5e9ebe4","after":"bcc9ac2cbe9f85af69ba00a85597b21f756d61ad","ref":"refs/heads/main","pushedAt":"2024-09-05T16:24:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: Prevent panic when calling `Raft::change_membership()` on uninitialized node\n\nPreviously, `change_membership()` assumed the current membership config was\nalways non-empty and used the last config entry. However, uninitialized\nnodes lack a membership config, leading to panics.\n\nThis commit adds checks to prevent `change_membership()` from panicking","shortMessageHtmlLink":"Fix: Prevent panic when calling Raft::change_membership() on uninit…"}},{"before":"d5a4ce0c7850a794eca311e97e3f1304eebca53b","after":"2d6441a1a5dbfad0261df1794d2ebbe0eea0f715","ref":"refs/heads/release-0.9","pushedAt":"2024-09-05T16:02:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: Prevent panic when calling `Raft::change_membership()` on uninitialized node\n\nPreviously, `change_membership()` assumed the current membership config was\nalways non-empty and used the last config entry. However, uninitialized\nnodes lack a membership config, leading to panics.\n\nThis commit adds checks to prevent `change_membership()` from panicking","shortMessageHtmlLink":"Fix: Prevent panic when calling Raft::change_membership() on uninit…"}},{"before":"8cde48f7c2d1ac3d4339effed7f9b378ed7a9620","after":"0063194c7f1e3d3c15402ada1f3ecdcbe5e9ebe4","ref":"refs/heads/main","pushedAt":"2024-09-01T14:40:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Doc: update doc of heartbeat metric","shortMessageHtmlLink":"Doc: update doc of heartbeat metric"}},{"before":"fbfa01871b9243b7ed37facbfc9943a461f09349","after":"8cde48f7c2d1ac3d4339effed7f9b378ed7a9620","ref":"refs/heads/main","pushedAt":"2024-09-01T08:52:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Doc: Add documentation for `AsyncRuntime::Watch` traits\n\nAdd comprehensive documentation for the `Watch` trait and its associated traits\nin the `AsyncRuntime` module. This improves code clarity and helps developers\nunderstand the purpose and usage and behavior of these traits.\n\n- Fix: #1238","shortMessageHtmlLink":"Doc: Add documentation for AsyncRuntime::Watch traits"}},{"before":"c279fb86021f9d5f62f87941cb7abb1d004f4a52","after":"fbfa01871b9243b7ed37facbfc9943a461f09349","ref":"refs/heads/main","pushedAt":"2024-08-31T13:24:17.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: fix lint warnings","shortMessageHtmlLink":"Chore: fix lint warnings"}},{"before":"49d522f45d68597a97ffadbd6b1b44ebf91b9004","after":"d5a4ce0c7850a794eca311e97e3f1304eebca53b","ref":"refs/heads/release-0.9","pushedAt":"2024-08-28T05:15:04.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: fix latest clippy issues","shortMessageHtmlLink":"Chore: fix latest clippy issues"}},{"before":"5f5d7e9f60ff2e86af078d2c20401636de2c19f7","after":"49d522f45d68597a97ffadbd6b1b44ebf91b9004","ref":"refs/heads/release-0.9","pushedAt":"2024-08-23T06:28:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: bump deps to new version","shortMessageHtmlLink":"Chore: bump deps to new version"}},{"before":"e54a1fd4b981eec389af2a0dfb4541206d6190cc","after":"c279fb86021f9d5f62f87941cb7abb1d004f4a52","ref":"refs/heads/main","pushedAt":"2024-08-18T06:59:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Feature: Add MPSC channel to AsyncRuntime\n\n`AsyncRuntime` trait defines the async-runtime such as tokio to run\nOpenraft. This commit add MPSC abstraction to `AsyncRuntime` and\nMPSC implementations to tokio based runtime and monoio based runtime.","shortMessageHtmlLink":"Feature: Add MPSC channel to AsyncRuntime"}},{"before":"2ae45507fe334f7ec8887972ad23e601da5c6e57","after":"e54a1fd4b981eec389af2a0dfb4541206d6190cc","ref":"refs/heads/main","pushedAt":"2024-08-15T10:34:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Move storage struct into separate files","shortMessageHtmlLink":"Refactor: Move storage struct into separate files"}},{"before":"6197f054a5e0e8df89a1666df96cb0f738bb807d","after":"2ae45507fe334f7ec8887972ad23e601da5c6e57","ref":"refs/heads/main","pushedAt":"2024-08-13T07:17:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Remove `request_id` from replication\n\nThe `request_id` was used to track request/response pairs between\n`RaftCore` and `ReplicationCore` in a one-request, one-response mode. To\nsupport streaming replication, which requires a one-request,\nmany-response mode, `request_id` has been removed in this\ncommit.","shortMessageHtmlLink":"Refactor: Remove request_id from replication"}},{"before":"b72ea560c11c125a842d1acd3bf2614ee947b57d","after":"6197f054a5e0e8df89a1666df96cb0f738bb807d","ref":"refs/heads/main","pushedAt":"2024-08-12T17:28:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: bump deps to new version","shortMessageHtmlLink":"Chore: bump deps to new version"}},{"before":"94248ad9822ea01143c2aa409cdf5afe6cc5598f","after":"b72ea560c11c125a842d1acd3bf2614ee947b57d","ref":"refs/heads/main","pushedAt":"2024-08-07T02:52:59.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Feature: monoio runtime support\n\n- Add monoio runtime in a separate crate.\n\n- Test: test MonoioRuntime with `Suite::test_all()`\n\n- Add CI: run monoio unit tests with a separate job, because it does\n belong to the workspace","shortMessageHtmlLink":"Feature: monoio runtime support"}},{"before":"c6f4a779e0bb563788c4187381065162e76ea996","after":"94248ad9822ea01143c2aa409cdf5afe6cc5598f","ref":"refs/heads/main","pushedAt":"2024-08-06T16:24:35.000Z","pushType":"pr_merge","commitsCount":6,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: disable Openraft default features","shortMessageHtmlLink":"Chore: disable Openraft default features"}},{"before":"dad80320fc87cd7d1b8f1805b5bebaac085a5ea5","after":"c6f4a779e0bb563788c4187381065162e76ea996","ref":"refs/heads/main","pushedAt":"2024-08-06T13:46:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Snapshot with same last log id can be installed","shortMessageHtmlLink":"Refactor: Snapshot with same last log id can be installed"}},{"before":"77caec96bf2d873db36b89bf84afe271f833b9ef","after":"dad80320fc87cd7d1b8f1805b5bebaac085a5ea5","ref":"refs/heads/main","pushedAt":"2024-08-06T12:17:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: Send heartbeat with dedicated workers\n\nHeavy AppendEntries traffic can block heartbeat messages. For example,\nfuture AppendEntries in stream RPC may not receive a response indicating\na follower is alive. In such cases, the leader might time out to extend\nits lease, and be considered partitioned from the cluster.\n\nThis commit moves heartbeat broadcasting to separate tasks that won't be\nblocked by AppendEntries. This ensures the leader can always be\nacknowledged with the liveness of followers.\n\nSeparate log progress notification and clock progress notification:\nWhen ReplicationCore successfully finished one RPC to Follower/Learner,\nit informs the RaftCore to update log progress and clock(heartbeat) progress.\nThis commit split these two informations into two `Notification`\nvariants, in order to make progress handling more clear.\n\nAnother improvement is to ignore a heartbeat progress if it is sent with\nan older cluster membership config. Because a follower can be removed\nand re-added, the obsolete heartbeat progress is invalid. This check is\ndone by remembering the membership log id in the `HeartbeatEvent`.\n\n`HigherVote` can be sent directly to Notification channel.\nreplication::Response does not need `HigherVote` variant any more.\nAnd `Response` is renamed to `Progress`","shortMessageHtmlLink":"Refactor: Send heartbeat with dedicated workers"}},{"before":"30ec503756629994f6bed22bcdada7f70b19a53c","after":"77caec96bf2d873db36b89bf84afe271f833b9ef","ref":"refs/heads/main","pushedAt":"2024-08-06T08:04:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Chore: don't gate mod testing with feat tokio-rt","shortMessageHtmlLink":"Chore: don't gate mod testing with feat tokio-rt"}},{"before":"801ca4d68753911a90061485622b846a898ee89b","after":"30ec503756629994f6bed22bcdada7f70b19a53c","ref":"refs/heads/main","pushedAt":"2024-08-06T03:11:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Test: add an AsyncRuntime test suite","shortMessageHtmlLink":"Test: add an AsyncRuntime test suite"}},{"before":"4a33b5f0b6236098121a44e736152eef25ec1cfa","after":"801ca4d68753911a90061485622b846a898ee89b","ref":"refs/heads/main","pushedAt":"2024-08-06T01:56:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Test: make store/state machine tests rt-agnostic","shortMessageHtmlLink":"Test: make store/state machine tests rt-agnostic"}},{"before":"662d888327cb4b25d2da195e6069b44f35c43a62","after":"4a33b5f0b6236098121a44e736152eef25ec1cfa","ref":"refs/heads/main","pushedAt":"2024-08-05T05:00:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: refine method names for `TransferLeaderRequest`","shortMessageHtmlLink":"Refactor: refine method names for TransferLeaderRequest"}},{"before":"4a6128f184c45528d297be12c7d2e5e93bc1c1e8","after":"662d888327cb4b25d2da195e6069b44f35c43a62","ref":"refs/heads/main","pushedAt":"2024-08-03T05:15:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: ignore notification for Leader/Candidate when node is in such state","shortMessageHtmlLink":"Refactor: ignore notification for Leader/Candidate when node is in su…"}},{"before":"eeeff6f3ef85b17fd486fc3a235a7ff04f54ac04","after":"4a6128f184c45528d297be12c7d2e5e93bc1c1e8","ref":"refs/heads/main","pushedAt":"2024-08-02T17:08:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Refactor: gate tokio rt with feature tokio-rt","shortMessageHtmlLink":"Refactor: gate tokio rt with feature tokio-rt"}},{"before":"94c820c3047aa07da41bb6bd1524f9dc00eeed02","after":"eeeff6f3ef85b17fd486fc3a235a7ff04f54ac04","ref":"refs/heads/main","pushedAt":"2024-08-02T16:51:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Feature: Transfer Leader\n\nCall `Raft.trigger().transfer_leader(to)` to inform the raft node to\ntransfer its leadership to Node `to`.\n\nThis feature is enabled only when: the application uses `RaftNetworkV2`\nand implements the `RaftNetworkV2::transfer_leader()` methods. This method\nprovides a default implementation that returns an `Unreachable`, and\nsuch an error will be just ignored.\n\nApplication upgrading Openraft from older version does not need to modify any\ncodes, unless TransferLeader is required.\n\nUpgrade tip:\n\nImplement `RaftNetworkV2::transfer_leader()` to send the\n`TransferLeaderRequest` to the target node.\nThe target node that receives this request should then pass it to\n`Raft::transfer_leader()`.","shortMessageHtmlLink":"Feature: Transfer Leader"}},{"before":"fdbf0eb22c9db7c58883dca91a2627cc26a5ca7f","after":"94c820c3047aa07da41bb6bd1524f9dc00eeed02","ref":"refs/heads/main","pushedAt":"2024-08-02T06:51:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: (0.10) Clarify that receiving an equal vote does not grant leadership.\n\nA node's `vote` may be updated when a leader observes a higher vote.\nIn such cases, the leader updates its local vote and steps down.\nHowever, this vote update does not imply that the node accepts the\nhigher vote as valid for leadership, as it has not yet compared their\nlogs.\n\nIn this commit, re-enable `VoteResponse.vote_granted` to indicate a vote\nis granted.","shortMessageHtmlLink":"Fix: (0.10) Clarify that receiving an equal vote does not grant leade…"}},{"before":"7fa0f9b77b37c4bf2e63c8601160a3e10c3e17e3","after":"fdbf0eb22c9db7c58883dca91a2627cc26a5ca7f","ref":"refs/heads/main","pushedAt":"2024-08-01T16:50:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Feature: Add `Raft::transfer_leader()`\n\nThis methods force a node to invalidate current Leader's lease and start\nto elect for the next new Leader.\nIt wont do anything if the current Leader has changed.","shortMessageHtmlLink":"Feature: Add Raft::transfer_leader()"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xNVQwMzoyNTowOS4wMDAwMDBazwAAAAS2gdX8","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0wMVQxNjo1MDoyOS4wMDAwMDBazwAAAASPYAR0"}},"title":"Activity · databendlabs/openraft"}