> (you don't have to strictly follow this form)

**Use case**

Support manually snapshot for Keeper.

**Describe the solution you'd like**

Throught 4lw commands, such as `csnp`.


{
    if (!request_for_session.request->isReadRequest())
        throw Exception(ErrorCodes::LOGICAL_ERROR, "Cannot process non-read request locally");
    state_machine->processReadRequest(request_for_session);
}
RaftAppendResult KeeperServer::putRequestBatch(const KeeperStorage::RequestsForSessions & requests_for_sessions)
{
    std::vector<nuraft::ptr<nuraft::buffer>> entries;
    for (const auto & request_for_session : requests_for_sessions)
    {
        entries.push_back(getZooKeeperRequestMessage(request_for_session));
    }
    std::lock_guard lock{server_write_mutex};
    if (is_recovering)
        return nullptr;
    return raft_instance->append_entries(entries);
}
bool KeeperServer::isLeader() const
{
    return raft_instance->is_leader();
}
bool KeeperServer::isObserver() const