├── .gitignore ├── LICENSE ├── README.md ├── part1 ├── dochecks.sh ├── dotest.sh ├── go.mod ├── go.sum ├── raft.go ├── raft_test.go ├── server.go ├── testResult │ ├── TestDisconnectAllThenRestore.html │ ├── TestElectionBasic.html │ ├── TestElectionDisconnectLoop.html │ ├── TestElectionFollowerComesBack.html │ ├── TestElectionLeaderAndAnotherDisconnect.html │ ├── TestElectionLeaderDisconnect.html │ ├── TestElectionLeaderDisconnectThenReconnect.html │ └── TestElectionLeaderDisconnectThenReconnect5.html └── testharness.go ├── part2 ├── dochecks.sh ├── dotest.sh ├── go.mod ├── go.sum ├── raft.go ├── raft_test.go ├── server.go ├── testResult │ ├── TestCommitMultipleCommands.html │ ├── TestCommitOneCommand.html │ ├── TestCommitWithDisconnectionAndRecover.html │ ├── TestCommitsWithLeaderDisconnects.html │ ├── TestNoCommitWithNoQuorum.html │ └── TestSubmitNonLeaderFails.html └── testharness.go ├── part3 ├── dochecks.sh ├── dotest.sh ├── go.mod ├── go.sum ├── raft.go ├── raft_test.go ├── server.go ├── storage.go ├── testResult │ ├── TestCrashAfterSubmit.html │ ├── TestCrashFollower.html │ ├── TestCrashThenRestartAll.html │ ├── TestCrashThenRestartFollower.html │ ├── TestCrashThenRestartLeader.html │ ├── TestDisconnectLeaderBriefly.html │ └── TestReplaceMultipleLogEntries.html └── testharness.go ├── raftlog-screenshot.png └── tools └── raft-testlog-viz └── main.go /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/README.md -------------------------------------------------------------------------------- /part1/dochecks.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/dochecks.sh -------------------------------------------------------------------------------- /part1/dotest.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/dotest.sh -------------------------------------------------------------------------------- /part1/go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/go.mod -------------------------------------------------------------------------------- /part1/go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/go.sum -------------------------------------------------------------------------------- /part1/raft.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/raft.go -------------------------------------------------------------------------------- /part1/raft_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/raft_test.go -------------------------------------------------------------------------------- /part1/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/server.go -------------------------------------------------------------------------------- /part1/testResult/TestDisconnectAllThenRestore.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestDisconnectAllThenRestore.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionBasic.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionBasic.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionDisconnectLoop.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionDisconnectLoop.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionFollowerComesBack.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionFollowerComesBack.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionLeaderAndAnotherDisconnect.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionLeaderAndAnotherDisconnect.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionLeaderDisconnect.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionLeaderDisconnect.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionLeaderDisconnectThenReconnect.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionLeaderDisconnectThenReconnect.html -------------------------------------------------------------------------------- /part1/testResult/TestElectionLeaderDisconnectThenReconnect5.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testResult/TestElectionLeaderDisconnectThenReconnect5.html -------------------------------------------------------------------------------- /part1/testharness.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part1/testharness.go -------------------------------------------------------------------------------- /part2/dochecks.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/dochecks.sh -------------------------------------------------------------------------------- /part2/dotest.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/dotest.sh -------------------------------------------------------------------------------- /part2/go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/go.mod -------------------------------------------------------------------------------- /part2/go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/go.sum -------------------------------------------------------------------------------- /part2/raft.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/raft.go -------------------------------------------------------------------------------- /part2/raft_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/raft_test.go -------------------------------------------------------------------------------- /part2/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/server.go -------------------------------------------------------------------------------- /part2/testResult/TestCommitMultipleCommands.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestCommitMultipleCommands.html -------------------------------------------------------------------------------- /part2/testResult/TestCommitOneCommand.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestCommitOneCommand.html -------------------------------------------------------------------------------- /part2/testResult/TestCommitWithDisconnectionAndRecover.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestCommitWithDisconnectionAndRecover.html -------------------------------------------------------------------------------- /part2/testResult/TestCommitsWithLeaderDisconnects.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestCommitsWithLeaderDisconnects.html -------------------------------------------------------------------------------- /part2/testResult/TestNoCommitWithNoQuorum.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestNoCommitWithNoQuorum.html -------------------------------------------------------------------------------- /part2/testResult/TestSubmitNonLeaderFails.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testResult/TestSubmitNonLeaderFails.html -------------------------------------------------------------------------------- /part2/testharness.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part2/testharness.go -------------------------------------------------------------------------------- /part3/dochecks.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/dochecks.sh -------------------------------------------------------------------------------- /part3/dotest.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/dotest.sh -------------------------------------------------------------------------------- /part3/go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/go.mod -------------------------------------------------------------------------------- /part3/go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/go.sum -------------------------------------------------------------------------------- /part3/raft.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/raft.go -------------------------------------------------------------------------------- /part3/raft_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/raft_test.go -------------------------------------------------------------------------------- /part3/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/server.go -------------------------------------------------------------------------------- /part3/storage.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/storage.go -------------------------------------------------------------------------------- /part3/testResult/TestCrashAfterSubmit.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestCrashAfterSubmit.html -------------------------------------------------------------------------------- /part3/testResult/TestCrashFollower.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestCrashFollower.html -------------------------------------------------------------------------------- /part3/testResult/TestCrashThenRestartAll.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestCrashThenRestartAll.html -------------------------------------------------------------------------------- /part3/testResult/TestCrashThenRestartFollower.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestCrashThenRestartFollower.html -------------------------------------------------------------------------------- /part3/testResult/TestCrashThenRestartLeader.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestCrashThenRestartLeader.html -------------------------------------------------------------------------------- /part3/testResult/TestDisconnectLeaderBriefly.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestDisconnectLeaderBriefly.html -------------------------------------------------------------------------------- /part3/testResult/TestReplaceMultipleLogEntries.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testResult/TestReplaceMultipleLogEntries.html -------------------------------------------------------------------------------- /part3/testharness.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/part3/testharness.go -------------------------------------------------------------------------------- /raftlog-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/raftlog-screenshot.png -------------------------------------------------------------------------------- /tools/raft-testlog-viz/main.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuoYaxiang/raft/HEAD/tools/raft-testlog-viz/main.go --------------------------------------------------------------------------------