> (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`.


{
    state_manager->flushAndShutDownLogStore();
    shutdownRaftServer();
    state_machine->shutdownStorage();
}
namespace
{
nuraft::ptr<nuraft::buffer> getZooKeeperRequestMessage(const KeeperStorage::RequestForSession & request_for_session)
{
    DB::WriteBufferFromNuraftBuffer write_buf;
    DB::writeIntBinary(request_for_session.session_id, write_buf);
    request_for_session.request->write(write_buf);
    DB::writeIntBinary(request_for_session.time, write_buf);
    return write_buf.getBuffer();
}
nuraft::ptr<nuraft::buffer> getZooKeeperLogEntry(const KeeperStorage::RequestForSession & request_for_session)
{
    DB::WriteBufferFromNuraftBuffer write_buf;
    DB::writeIntBinary(request_for_session.session_id, write_buf);
    request_for_session.request->write(write_buf);
    DB::writeIntBinary(request_for_session.time, write_buf);
    DB::writeIntBinary(request_for_session.zxid, write_buf);
    assert(request_for_session.digest);
    DB::writeIntBinary(request_for_session.digest->version, write_buf);
    if (request_for_session.digest->version != KeeperStorage::DigestVersion::NO_DIGEST)
        DB::writeIntBinary(request_for_session.digest->value, write_buf);
    return write_buf.getBuffer();
}
}
void KeeperServer::putLocalReadRequest(const KeeperStorage::RequestForSession & request_for_session)