package com.chicm.cmraft.log;
import java.util.Collection;
import java.util.List;
import com.chicm.cmraft.common.ServerInfo;
import com.chicm.cmraft.core.State;
import com.chicm.cmraft.protobuf.generated.RaftProtos.KeyValuePair;
import com.chicm.cmraft.protobuf.generated.RaftProtos.RaftLogEntry;
public interface RaftLog {
void stateChange(State oldState, State newState);
long getLogTerm(long index);
long getCommitIndex();
long getLastApplied();
long getLastLogTerm();
long getFlushedIndex();
List<RaftLogEntry> getLogEntries(long startIndex, long endIndex);
long getFollowerMatchIndex(ServerInfo follower);
boolean appendEntries(long term, ServerInfo leaderId, long leaderCommit,
long prevLogIndex, long prevLogTerm, List<RaftLogEntry> leaderEntries);
void onAppendEntriesResponse(ServerInfo follower, long followerTerm, boolean success,
long followerLastApplied);
boolean set(KeyValuePair kv);
byte[] get(byte[] key);
boolean delete(byte[] key);
Collection<KeyValuePair> list(byte[] pattern);
}