public InstallSnapshotResponse InstalledSnapshotInvoke(InstallSnapshotReqeust reqeust) { lock (this) { _node.EnsureExistGreaterTermAndChangeRole(reqeust.Term); return(((Follower)_node.CurrentRole).InstalledSnapshot(reqeust)); } }
public InstallSnapshotResponse InstalledSnapshot(InstallSnapshotReqeust request) { InstallSnapshotResponse response = new InstallSnapshotResponse(); if (request.Term < _stateController.PersistentState.CurrentTerm) { response.Term = _stateController.PersistentState.CurrentTerm; return(response); } if (request.Offset == 0) { // todo create a new snapshot } //在指定偏移量写入数据 //如果 done 是 false,则继续等待更多的数据 //保存快照文件,丢弃具有较小索引的任何现有或部分快照 //如果现存的日志条目与快照中最后包含的日志条目具有相同的索引值和任期号,则保留其后的日志条目并进行回复 //丢弃整个日志 //使用快照重置状态机(并加载快照的集群配置) return(response); }