{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":367261349,"defaultBranch":"main","name":"openraft","ownerLogin":"datafuselabs","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:1716199450.0","currentOid":""},"activityList":{"items":[{"before":"a9f696a91beea34c5110234dbd79bab864a859c6","after":"d1643fe0256f420d578f98185fd51976f739fd44","ref":"refs/heads/main","pushedAt":"2024-05-22T01:23: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: Use `CommittedLeaderId` in place of `LeaderId` for `LogIOId`\n\nIn this commit, `LeaderId` has been replaced with `CommittedLeaderId`\nfor identifying log IO requests. This change is made because\n`CommittedLeaderId` is shorter and sufficiently identifies the necessary\nattributes since only an established leader (a committed leader) can\nwrite or replicate logs. Thus, using `CommittedLeaderId` streamlines the\nidentification process for log IO requests.","shortMessageHtmlLink":"Refactor: Use CommittedLeaderId in place of LeaderId for LogIOId"}},{"before":"30cdf5fbc9275ce6213ca8f70cf37bc0c6fe957a","after":"37d1da381db7682ea2335e704b31929f911c7492","ref":"refs/heads/release-0.9","pushedAt":"2024-05-20T06:33:47.000Z","pushType":"push","commitsCount":1,"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.11","shortMessageHtmlLink":"Doc: add change-log 0.9.11"}},{"before":null,"after":"a9f696a91beea34c5110234dbd79bab864a859c6","ref":"refs/heads/drmingdrmer/relax-nodeid-default","pushedAt":"2024-05-19T06:17:55.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: New leader must flush blank log\n\nThis commit addresses a critical issue where if a new leader does not\nflush the blank log to disk upon becoming established and then restarts\nimmediately, there is a possibility that previously committed data\nbecomes invisible to readers.\n\nBefore the blank log is flushed, the leader (identified by vote `v3`)\nassumes it will be flushed and commits this log once (|quorum|-1)\nreplication responses are received. If the blank log is lost and the\nserver is restarted, data committed by a new leader (vote `v2`) may\nnot be visible.\n\nThis issue is addressed by utilizing `LeaderHandler::leader_append_entries()`\ninstead of `ReplicationHandler::append_blank_log()`, where the former\ndoes not wait for the blank log to flush.\n\nChanges:\n\n- When assigning log IDs to log entries, the `Leading.last_log_id`,\n which represents the state of the log proposer (equivalent term in\n Paxos is Proposer), should be used instead of `RaftState.last_log_id`,\n which represents the state of the log receiver (equivalent term in\n Paxos is Acceptor).\n\n- Consequently, the method `assign_log_ids()` has been moved from\n `RaftState` to `Leading`.\n\n- Avoid manual implementation of duplicated logic:\n\n - During `initialize()`, reuse `FollowingHandler::do_append_entries()`\n to submit the very first log to storage.\n\n - In `establish_leader()`, reuse\n `LeaderHandler::leader_append_entries()` to submit log to storage\n and remove `ReplicationHandler::append_blank_log()`.\n\n - Remove `Command::AppendEntry`.","shortMessageHtmlLink":"Fix: New leader must flush blank log"}},{"before":"96e0fb581b05824e6eda70858da5d49070c993bd","after":"30cdf5fbc9275ce6213ca8f70cf37bc0c6fe957a","ref":"refs/heads/release-0.9","pushedAt":"2024-05-16T07:01:12.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: New leader must flush blank log\n\nThis commit addresses a critical issue where if a new leader does not\nflush the blank log to disk upon becoming established and then restarts\nimmediately, there is a possibility that previously committed data\nbecomes invisible to readers.\n\nBefore the blank log is flushed, the leader (identified by vote `v3`)\nassumes it will be flushed and commits this log once (|quorum|-1)\nreplication responses are received. If the blank log is lost and the\nserver is restarted, data committed by a new leader (vote `v2`) may\nnot be visible.\n\nThis issue is addressed by utilizing `LeaderHandler::leader_append_entries()`\ninstead of `ReplicationHandler::append_blank_log()`, where the former\ndoes not wait for the blank log to flush.\n\nChanges:\n\n- When assigning log IDs to log entries, the `Leading.last_log_id`,\n which represents the state of the log proposer (equivalent term in\n Paxos is Proposer), should be used instead of `RaftState.last_log_id`,\n which represents the state of the log receiver (equivalent term in\n Paxos is Acceptor).\n\n- Consequently, the method `assign_log_ids()` has been moved from\n `RaftState` to `Leading`.\n\n- Avoid manual implementation of duplicated logic:\n\n - During `initialize()`, reuse `FollowingHandler::do_append_entries()`\n to submit the very first log to storage.\n\n - In `establish_leader()`, reuse\n `LeaderHandler::leader_append_entries()` to submit log to storage\n and remove `ReplicationHandler::append_blank_log()`.\n\n - Remove `Command::AppendEntry`.","shortMessageHtmlLink":"Fix: New leader must flush blank log"}},{"before":"cc59bcfbd3b2d6eef32e840b5c4a7ee259276a40","after":"a9f696a91beea34c5110234dbd79bab864a859c6","ref":"refs/heads/main","pushedAt":"2024-05-15T08:55: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":"Fix: New leader must flush blank log\n\nThis commit addresses a critical issue where if a new leader does not\nflush the blank log to disk upon becoming established and then restarts\nimmediately, there is a possibility that previously committed data\nbecomes invisible to readers.\n\nBefore the blank log is flushed, the leader (identified by vote `v3`)\nassumes it will be flushed and commits this log once (|quorum|-1)\nreplication responses are received. If the blank log is lost and the\nserver is restarted, data committed by a new leader (vote `v2`) may\nnot be visible.\n\nThis issue is addressed by utilizing `LeaderHandler::leader_append_entries()`\ninstead of `ReplicationHandler::append_blank_log()`, where the former\ndoes not wait for the blank log to flush.\n\nChanges:\n\n- When assigning log IDs to log entries, the `Leading.last_log_id`,\n which represents the state of the log proposer (equivalent term in\n Paxos is Proposer), should be used instead of `RaftState.last_log_id`,\n which represents the state of the log receiver (equivalent term in\n Paxos is Acceptor).\n\n- Consequently, the method `assign_log_ids()` has been moved from\n `RaftState` to `Leading`.\n\n- Avoid manual implementation of duplicated logic:\n\n - During `initialize()`, reuse `FollowingHandler::do_append_entries()`\n to submit the very first log to storage.\n\n - In `establish_leader()`, reuse\n `LeaderHandler::leader_append_entries()` to submit log to storage\n and remove `ReplicationHandler::append_blank_log()`.\n\n - Remove `Command::AppendEntry`.","shortMessageHtmlLink":"Fix: New leader must flush blank log"}},{"before":"94600eb601b3d98b209f1f6ad1f88eced533cf44","after":"cc59bcfbd3b2d6eef32e840b5c4a7ee259276a40","ref":"refs/heads/main","pushedAt":"2024-05-10T11:55:32.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: Monotonic increasing `LogIOId`\n\n`LogIOId` is utilized to uniquely identify an append-entries IO\nglobally. It plays a crucial role in the log IO callback, informing\n`RaftCore` about the latest log that has been successfully flushed to\ndisk.\n\nIn this commit, `LogIOId` is defined as a tuple comprising `leader_id`,\nwhich submits the log IO, and `last_log_id`, which represents the final\nlog ID in the append-entries IO operation.\n\nGiven that the `leader_id` is monotonically increasing and a leader\nconsistently submits log entries in a sequential order, this design\nensures that `LogIOId` is also monotonically increasing. This feature\nallows for effective tracking of IO progress.","shortMessageHtmlLink":"Refactor: Monotonic increasing LogIOId"}},{"before":"6e178c42bd655275c30c3527e27307e90b1ee77b","after":"94600eb601b3d98b209f1f6ad1f88eced533cf44","ref":"refs/heads/main","pushedAt":"2024-05-09T03:37: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":"Doc: Add docs::components::state_machine","shortMessageHtmlLink":"Doc: Add docs::components::state_machine"}},{"before":"9cd23906f6756a7bcda75da3f653b18606681627","after":"96e0fb581b05824e6eda70858da5d49070c993bd","ref":"refs/heads/release-0.9","pushedAt":"2024-05-09T01:09:16.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Test: Add snapshotting test to Suite; Avoid race conditions in `raft-kv-memstore` example (#1121)\n\n- Avoid race conditions in `raft-kv-memstore` example\r\n\r\n- Add Storage tests for `raft-kv-memstore`\r\n\r\n- Test: add snapshotting test to Suite","shortMessageHtmlLink":"Test: Add snapshotting test to Suite; Avoid race conditions in `raft-…"}},{"before":"9e786de0e4a02cdd75031775aacead7a048c7ce4","after":"6e178c42bd655275c30c3527e27307e90b1ee77b","ref":"refs/heads/main","pushedAt":"2024-05-08T11:48:15.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":"Improve: `cancel` passed to `full_snapshot()` should be `static` (#1120)","shortMessageHtmlLink":"Improve: cancel passed to full_snapshot() should be static (#1120)"}},{"before":"8245f8407602fee257e0c4ca71c982d4b7514616","after":"9e786de0e4a02cdd75031775aacead7a048c7ce4","ref":"refs/heads/main","pushedAt":"2024-05-08T11:18:39.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 link to `Raft::trigger()` for doc of `Trigger`, disable appearence order in doc page (#1122)","shortMessageHtmlLink":"Doc: Add link to Raft::trigger() for doc of Trigger, disable appe…"}},{"before":"4d0d103541a3e2eb4a4b345805551af2a90e6a6b","after":"8245f8407602fee257e0c4ca71c982d4b7514616","ref":"refs/heads/main","pushedAt":"2024-05-08T10:54: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":"Test: Add snapshotting test to Suite; Avoid race conditions in `raft-kv-memstore` example (#1121)\n\n- Avoid race conditions in `raft-kv-memstore` example\r\n\r\n- Add Storage tests for `raft-kv-memstore`\r\n\r\n- Test: add snapshotting test to Suite","shortMessageHtmlLink":"Test: Add snapshotting test to Suite; Avoid race conditions in `raft-…"}},{"before":"d2970feee82658a65361dedb51656d79ea2ef386","after":"9cd23906f6756a7bcda75da3f653b18606681627","ref":"refs/heads/release-0.9","pushedAt":"2024-05-07T13:40:37.000Z","pushType":"push","commitsCount":3,"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.10","shortMessageHtmlLink":"Doc: add change-log 0.9.10"}},{"before":"5c83e1670269c61baf230da71c6c947512100748","after":"4d0d103541a3e2eb4a4b345805551af2a90e6a6b","ref":"refs/heads/main","pushedAt":"2024-05-06T00:21:18.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":"Change: Add `RaftNetworkV2`, remove feature flag `generic-snapshot-data`\n\n- Remove `generic-snapshot-data`. The snapshot data trait is now\n consistently bound to `OptionalSend + 'static`.\n\n- Introduction of `RaftNetworkV2::full_snapshot()` for transmitting\n snapshots in one piece.\n\n- Retention of the original chunk-based snapshot transmission API in\n `RaftNetwork::install_snapshot()`.\n\nFrom this commit onwards:\n\n- To use the one-piece snapshot transmission, implement `RaftNetworkV2`\n when creating a `Raft` instance.\n\n- To continue using the chunk-based transmission, implement\n `RaftNetwork`.\n\nCompatibility:\n\n- `RaftNetworkV2` is automatically implemented for any `RaftNetwork` if\n `RaftTypeConfig::SnapshotData` implements `tokio::io::AsyncRead`,\n `tokio::io::AsyncWrite`, `tokio::io::AsyncSeek`, and `Unpin`.\n\nUpgrade tip:\n\n- Remove the `generic-snapshot-data` feature flag.\n\n- If you prefer using the original chunk-based method, no further action\n is required.\n\n Otherwise, to adopt the new one-piece snapshot transmission:\n\n - Replace `RaftNetwork` and `RaftNetworkFactory` with `RaftNetworkV2`\n and `RaftNetworkFactoryV2`.","shortMessageHtmlLink":"Change: Add RaftNetworkV2, remove feature flag generic-snapshot-data"}},{"before":"81240b8524a0aa89140f7a2ae8f6485e58725970","after":"d2970feee82658a65361dedb51656d79ea2ef386","ref":"refs/heads/release-0.9","pushedAt":"2024-05-05T08:37:51.000Z","pushType":"push","commitsCount":3,"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.9","shortMessageHtmlLink":"Doc: add change-log 0.9.9"}},{"before":"946dc3f910126b4a58172ffbc480bb657461dbfc","after":"5c83e1670269c61baf230da71c6c947512100748","ref":"refs/heads/main","pushedAt":"2024-05-05T08:13:41.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: Immediate response when snapshot installation is unnecessary\n\nWhen `Engine::handle_install_full_snapshot()` is called and the provided\nsnapshot is not up-to-date, the snapshot should not be installed, and\nthe response should be sent back immediately. Previously, the method\nmight delay the response unnecessarily, waiting for an installation\nprocess that would not proceed.\n\nThis commit adjusts the logic so that if the snapshot is recognized as\noutdated, it immediately returns a `None` `Condition`, ensuring the\ncaller is informed straightaway that no installation will occur.","shortMessageHtmlLink":"Fix: Immediate response when snapshot installation is unnecessary"}},{"before":"55cd84cfc2b2c6a1e71726851471248cb4d63437","after":"946dc3f910126b4a58172ffbc480bb657461dbfc","ref":"refs/heads/main","pushedAt":"2024-05-03T04:42: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":"Fix: `Chunked` should reset offset 0 when a `SnapshotMismatch` error is received\n\nWhen a `SnapshotMismatch` is received, the sending end should re-send\nall snapshot data from the beginning.","shortMessageHtmlLink":"Fix: Chunked should reset offset 0 when a SnapshotMismatch error …"}},{"before":"fd5c657f2d08844b7917e599badb4d75875a9611","after":"81240b8524a0aa89140f7a2ae8f6485e58725970","ref":"refs/heads/release-0.9","pushedAt":"2024-05-03T04:32:23.000Z","pushType":"push","commitsCount":1,"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.8","shortMessageHtmlLink":"Doc: add change-log 0.9.8"}},{"before":"a1278d97e5852114e19342ec8fa55fc56dce274b","after":"fd5c657f2d08844b7917e599badb4d75875a9611","ref":"refs/heads/release-0.9","pushedAt":"2024-05-03T04:16:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Fix: `Chunked` should reset offset 0 when a `SnapshotMismatch` error is received\n\nWhen a `SnapshotMismatch` is received, the sending end should re-send\nall snapshot data from the beginning.","shortMessageHtmlLink":"Fix: Chunked should reset offset 0 when a SnapshotMismatch error …"}},{"before":"9a593b5094a28e8ca425aacdf65b087576ef845b","after":"a1278d97e5852114e19342ec8fa55fc56dce274b","ref":"refs/heads/release-0.9","pushedAt":"2024-05-01T02:21:28.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: fix typos","shortMessageHtmlLink":"Chore: fix typos"}},{"before":"3023a018b044b454944c74883902895795a9e6f5","after":"55cd84cfc2b2c6a1e71726851471248cb4d63437","ref":"refs/heads/main","pushedAt":"2024-05-01T02:20:41.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: fix typos","shortMessageHtmlLink":"Chore: fix typos"}},{"before":"41f6bd2a42eb0f3257f5d00a43193e1d1b390f81","after":"3023a018b044b454944c74883902895795a9e6f5","ref":"refs/heads/release-0.10","pushedAt":"2024-04-30T06:53:43.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: adjust log level for snapshot trigger","shortMessageHtmlLink":"Chore: adjust log level for snapshot trigger"}},{"before":"b43650d21dc7725af2ed11f748320deb7baf144a","after":"9a593b5094a28e8ca425aacdf65b087576ef845b","ref":"refs/heads/release-0.9","pushedAt":"2024-04-30T06:53:08.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: adjust log level for snapshot trigger","shortMessageHtmlLink":"Chore: adjust log level for snapshot trigger"}},{"before":"41f6bd2a42eb0f3257f5d00a43193e1d1b390f81","after":"3023a018b044b454944c74883902895795a9e6f5","ref":"refs/heads/main","pushedAt":"2024-04-29T03:17:47.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: adjust log level for snapshot trigger","shortMessageHtmlLink":"Chore: adjust log level for snapshot trigger"}},{"before":"554546b08991edad4d3008e4c2e9c6cb24c5204b","after":"b43650d21dc7725af2ed11f748320deb7baf144a","ref":"refs/heads/release-0.9","pushedAt":"2024-04-26T02:37:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"BumpVer: 0.9.8","shortMessageHtmlLink":"BumpVer: 0.9.8"}},{"before":"b7842556f5b991e543f6a40ea0b7311afa24a5f7","after":"41f6bd2a42eb0f3257f5d00a43193e1d1b390f81","ref":"refs/heads/release-0.10","pushedAt":"2024-04-26T02:20:48.000Z","pushType":"push","commitsCount":43,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Dep: relax proc-macros2 version requirement","shortMessageHtmlLink":"Dep: relax proc-macros2 version requirement"}},{"before":"849b2d071d63db507244981cefd3cc633c2782d0","after":"41f6bd2a42eb0f3257f5d00a43193e1d1b390f81","ref":"refs/heads/main","pushedAt":"2024-04-26T02:20:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Dep: relax proc-macros2 version requirement","shortMessageHtmlLink":"Dep: relax proc-macros2 version requirement"}},{"before":"68ad72cee2479828183c07330b384f587cc20eab","after":"554546b08991edad4d3008e4c2e9c6cb24c5204b","ref":"refs/heads/release-0.9","pushedAt":"2024-04-26T02:19:47.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"drmingdrmer","name":"张炎泼","path":"/drmingdrmer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44069?s=80&v=4"},"commit":{"message":"Doc: get_snapshot_builder() is a method of RaftStateMachine","shortMessageHtmlLink":"Doc: get_snapshot_builder() is a method of RaftStateMachine"}},{"before":"061218a12ee11c40e88b0b7a6ced658ad2a66df8","after":"68ad72cee2479828183c07330b384f587cc20eab","ref":"refs/heads/release-0.9","pushedAt":"2024-04-25T13:28:49.000Z","pushType":"push","commitsCount":4,"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.7","shortMessageHtmlLink":"Doc: add change-log 0.9.7"}},{"before":"be0e6fa94f0ae6c342c090e8bdd38bad1040f4e1","after":"849b2d071d63db507244981cefd3cc633c2782d0","ref":"refs/heads/main","pushedAt":"2024-04-25T11:23:07.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: Load mebmership since `last_applied`, not `last_membership.index` on startup\n\nModify `StorageHelper::last_membership_in_log()` to scan the log\nstarting from the last applied index rather than the index of the last\napplied membership log. This change reduces unnecessary I/O operations\nduring startup, previously caused by scanning from an incorrect starting\npoint.","shortMessageHtmlLink":"Fix: Load mebmership since last_applied, not `last_membership.index…"}},{"before":"45d5a94b8eac37567d19c3f883bdbfdb30fc634d","after":"061218a12ee11c40e88b0b7a6ced658ad2a66df8","ref":"refs/heads/release-0.9","pushedAt":"2024-04-25T10:01:43.000Z","pushType":"push","commitsCount":3,"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.6","shortMessageHtmlLink":"Doc: add change-log 0.9.6"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEUGrsIAA","startCursor":null,"endCursor":null}},"title":"Activity · datafuselabs/openraft"}