code: func (r *raftFSM) Snapshot() (raft.FSMSnapshot, error) {
  	return &serverSnapshot{r.server}, nil
  }
docs: // Snapshot is used to support log compaction. This call should
  // return an FSMSnapshot which can be used to save a point-in-time
  // snapshot of the FSM. Apply and Snapshot are not called in multiple
  // threads, but Apply will be called concurrently with Persist. This means
  // the FSM should be implemented in a fashion that allows for concurrent
  // updates while a snapshot is happening.