MCPcopy Create free account
hub / github.com/e2wugui/zeze / Raft

Class Raft

ZezeJava/ZezeJavaTest/src/SimpleRaft/Raft.java:8–488  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6import org.jetbrains.annotations.Nullable;
7
8public class Raft {
9 public static class Log {
10 final long key; // log的唯一key. 防止重复. 由客户端填写
11 long index; // 每条log的索引. 在log序列中顺序排列. 由leader填写
12 long term; // 每条log的term值. 由leader填写
13
14 public Log(long key) {
15 this.key = key;
16 }
17
18 public long getKey() {
19 return key;
20 }
21
22 public final long getIndex() {
23 return index;
24 }
25
26 protected void execute() {
27 }
28
29 @Override
30 public @NotNull String toString() {
31 return "Log{" + "index=" + index + ", term=" + term + '}';
32 }
33 }
34
35 public interface Env {
36 long getCurTime();
37
38 int random(int max); // return [0, max)
39
40 @Nullable Object recvEvent(); // return null if no event
41
42 void sendEvent(int id, @NotNull Object obj);
43
44 void sendClientEvent(@NotNull Object obj);
45
46 long getLogCount();
47
48 Log getLog(long index); // return null if not exist
49
50 @NotNull Log @NotNull [] getLogs(long indexBegin, long indexEnd); // [indexBegin, indexEnd)
51
52 @Nullable Log getLogByKey(long key); // return null if not exist
53
54 boolean appendLog(@NotNull Log log); // return false if this log(key) is already appended
55
56 void appendLogs(@NotNull Log @NotNull [] logs); // ignore already appended log(key)s
57
58 void truncateLogs(long logCount);
59
60 void traceInfo(@NotNull String format);
61 }
62
63 private static final class RequestVote {
64 final long term;
65 final int candidateId;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected