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


const KeeperConfigurationAndSettingsPtr & configuration_and_settings_,
    const Poco::Util::AbstractConfiguration & config,
    ResponsesQueue & responses_queue_,
    SnapshotsQueue & snapshots_queue_,
    KeeperSnapshotManagerS3 & snapshot_manager_s3)
    : server_id(configuration_and_settings_->server_id)
    , coordination_settings(configuration_and_settings_->coordination_settings)
    , log(&Poco::Logger::get("KeeperServer"))
    , is_recovering(config.getBool("keeper_server.force_recovery", false))
    , keeper_context{std::make_shared<KeeperContext>()}
    , create_snapshot_on_exit(config.getBool("keeper_server.create_snapshot_on_exit", true))
{
    if (coordination_settings->quorum_reads)
        LOG_WARNING(log, "Quorum reads enabled, Keeper will work slower.");
    keeper_context->digest_enabled = config.getBool("keeper_server.digest_enabled", false);
    keeper_context->ignore_system_path_on_startup = config.getBool("keeper_server.ignore_system_path_on_startup", false);
    state_machine = nuraft::cs_new<KeeperStateMachine>(
        responses_queue_,
        snapshots_queue_,
        configuration_and_settings_->snapshot_storage_path,
        coordination_settings,
        keeper_context,
        config.getBool("keeper_server.upload_snapshot_on_exit", true) ? &snapshot_manager_s3 : nullptr,
        checkAndGetSuperdigest(configuration_and_settings_->super_digest));
    state_manager = nuraft::cs_new<KeeperStateManager>(
        server_id,