// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

#include "cloud/config.h"

#include "common/status.h"

namespace doris::config {

DEFINE_String(deploy_mode, "");
DEFINE_mString(cloud_unique_id, "");
DEFINE_mString(meta_service_endpoint, "");
DEFINE_mBool(enable_meta_service_endpoint_consistency_check, "true");
DEFINE_Bool(meta_service_connection_pooled, "true");
DEFINE_mInt64(meta_service_connection_pool_size, "20");
DEFINE_mInt32(meta_service_connection_age_base_seconds, "30");
DEFINE_mInt32(meta_service_idle_connection_timeout_ms, "0");
DEFINE_mInt32(meta_service_rpc_retry_times, "20");
DEFINE_mInt32(meta_service_brpc_timeout_ms, "10000");
DEFINE_mInt32(meta_service_rpc_timeout_retry_times, "2");

DEFINE_Int64(tablet_cache_capacity, "100000");
DEFINE_Int64(tablet_cache_shards, "16");
DEFINE_mInt32(tablet_sync_interval_s, "1800");
DEFINE_mInt32(init_scanner_sync_rowsets_parallelism, "10");
DEFINE_mInt32(sync_rowsets_slow_threshold_ms, "1000");

DEFINE_mInt64(min_compaction_failure_interval_ms, "5000");
DEFINE_mInt64(base_compaction_freeze_interval_s, "1800");
DEFINE_mInt64(compaction_load_max_freeze_interval_s, "1200");
DEFINE_mInt64(cumu_compaction_interval_s, "1800");

DEFINE_mInt32(compaction_timeout_seconds, "86400");
DEFINE_mInt32(lease_compaction_interval_seconds, "20");
DEFINE_mBool(enable_parallel_cumu_compaction, "false");
DEFINE_mDouble(base_compaction_thread_num_factor, "0.25");
DEFINE_mDouble(cumu_compaction_thread_num_factor, "0.5");
DEFINE_mInt32(check_auto_compaction_interval_seconds, "5");
DEFINE_mInt32(max_base_compaction_task_num_per_disk, "2");
DEFINE_mBool(prioritize_query_perf_in_compaction, "false");
DEFINE_mInt32(compaction_max_rowset_count, "10000");
DEFINE_mInt64(compaction_txn_max_size_bytes, "7340032"); // 7MB

DEFINE_mInt32(refresh_s3_info_interval_s, "60");
DEFINE_mInt32(vacuum_stale_rowsets_interval_s, "300");
DEFINE_mInt32(schedule_sync_tablets_interval_s, "600");

DEFINE_mInt32(mow_stream_load_commit_retry_times, "5");

DEFINE_mBool(save_load_error_log_to_s3, "false");

DEFINE_mBool(use_public_endpoint_for_error_log, "true");

DEFINE_mInt32(sync_load_for_tablets_thread, "32");

DEFINE_Int32(warmup_cache_async_thread, "16");

DEFINE_mBool(enable_new_tablet_do_compaction, "true");

// Empty rowset compaction strategy configurations
DEFINE_mBool(enable_empty_rowset_compaction, "true");
DEFINE_mInt32(empty_rowset_compaction_min_count, "5");
DEFINE_mDouble(empty_rowset_compaction_min_ratio, "0.3");

DEFINE_mInt32(delete_bitmap_lock_expiration_seconds, "10");

DEFINE_mInt32(get_delete_bitmap_lock_max_retry_times, "100");

DEFINE_mBool(enable_sync_tablet_delete_bitmap_by_cache, "true");
DEFINE_mInt32(delete_bitmap_store_write_version, "1");
DEFINE_mInt32(delete_bitmap_store_read_version, "1");
DEFINE_mBool(enable_delete_bitmap_store_v2_check_correctness, "false");
DEFINE_mInt64(delete_bitmap_store_v2_max_bytes_in_fdb, "1024"); // TODO change default value
DEFINE_Int32(sync_delete_bitmap_task_max_thread, "32");
DEFINE_mBool(enable_agg_delta_delete_bitmap_for_store_v2, "true");

DEFINE_mBool(enable_batch_get_delete_bitmap, "false");
// used in get_delete_bitmap rpc
// The MS will return the current results to BE immediately when the size of delete bitmap
// in memory fetched from fdb reached this theshold the first time, and BE will make subsequent RPCs
// to get the remaining rowsets' results.
DEFINE_mInt64(get_delete_bitmap_bytes_threshold, "524288000"); // 500MB

DEFINE_Bool(enable_cloud_txn_lazy_commit, "true");

DEFINE_mInt32(remove_expired_tablet_txn_info_interval_seconds, "300");

DEFINE_mInt32(tablet_txn_info_min_expired_seconds, "1800");

DEFINE_mBool(enable_use_cloud_unique_id_from_fe, "true");

DEFINE_mBool(enable_cloud_tablet_report, "true");

DEFINE_mInt64(meta_service_rpc_reconnect_interval_ms, "100");

DEFINE_mInt32(meta_service_conflict_error_retry_times, "10");

DEFINE_Bool(enable_check_storage_vault, "true");

DEFINE_mBool(skip_writing_empty_rowset_metadata, "true");

DEFINE_mInt64(cloud_index_change_task_timeout_second, "3600");

DEFINE_mInt64(warmup_tablet_replica_info_cache_ttl_sec, "600");

DEFINE_mInt32(warm_up_manager_thread_pool_size, "4");

DEFINE_mInt64(warm_up_rowset_slow_log_ms, "1000");

DEFINE_mBool(enable_compaction_delay_commit_for_warm_up, "false");

DEFINE_mInt64(warm_up_rowset_sync_wait_min_timeout_ms, "500");

DEFINE_mInt64(warm_up_rowset_sync_wait_max_timeout_ms, "120000");

DEFINE_mBool(enable_warmup_immediately_on_new_rowset, "false");

// Packed file manager config
DEFINE_mBool(enable_packed_file, "true");
DEFINE_mInt64(packed_file_size_threshold_bytes, "5242880"); // 5MB
DEFINE_mInt64(packed_file_time_threshold_ms, "100");        // 100ms
DEFINE_mInt64(packed_file_try_lock_timeout_ms, "5");        // 5ms
DEFINE_mInt64(packed_file_small_file_count_threshold, "100");
DEFINE_mInt64(small_file_threshold_bytes, "1048576");      // 1MB
DEFINE_mInt64(uploaded_file_retention_seconds, "1800");    // 1 minute
DEFINE_mInt64(packed_file_cleanup_interval_seconds, "60"); // 1 minute

DEFINE_mBool(enable_standby_passive_compaction, "true");

DEFINE_mDouble(standby_compaction_version_ratio, "0.8");

// Compaction read-write separation: only the "last active" cluster (the one that most recently
// performed load) is allowed to compact a tablet
DEFINE_mBool(enable_compaction_rw_separation, "true");
// Timeout in ms for takeover when last active cluster becomes unavailable (default 5 min)
DEFINE_mInt64(compaction_cluster_takeover_timeout_ms, "300000");
// Interval in seconds to refresh cluster status cache (default 1 min)
DEFINE_mInt64(cluster_status_cache_refresh_interval_sec, "60");
// When version count exceeds this ratio of max_tablet_version_num, force compaction
// even on read-only clusters (safety valve)
DEFINE_mDouble(compaction_rw_separation_version_threshold_ratio, "0.8");

DEFINE_mBool(enable_cache_read_from_peer, "true");

// Rate limit for warmup download in bytes per second, default 100MB/s
// <= 0 means no limit
DEFINE_mInt64(file_cache_warmup_download_rate_limit_bytes_per_second, "104857600");

// Cache the expiration time of the peer address.
// This can be configured to be less than the `rehash_tablet_after_be_dead_seconds` setting in the `fe` configuration.
// If the value is -1, use the `rehash_tablet_after_be_dead_seconds` setting in the `fe` configuration as the expiration time.
DEFINE_mInt64(cache_read_from_peer_expired_seconds, "-1");

DEFINE_mBool(enable_file_cache_write_base_compaction_index_only, "false");
DEFINE_mBool(enable_file_cache_write_cumu_compaction_index_only, "false");

// MS RPC rate limiting config
DEFINE_mBool(enable_ms_rpc_host_level_rate_limit, "false");

// Per-RPC QPS limit configs (per CPU core)
// QPS limit = config_value * num_cores
// Set to 0 to disable rate limiting for a specific RPC
// Set to -1 to use ms_rpc_qps_default config value
DEFINE_mInt32(ms_rpc_qps_default, "100");
DEFINE_mInt32(ms_rpc_qps_get_tablet_meta, "-1");
DEFINE_mInt32(ms_rpc_qps_get_rowset, "-1");
DEFINE_mInt32(ms_rpc_qps_prepare_rowset, "-1");
DEFINE_mInt32(ms_rpc_qps_commit_rowset, "-1");
DEFINE_mInt32(ms_rpc_qps_update_tmp_rowset, "-1");
DEFINE_mInt32(ms_rpc_qps_commit_txn, "-1");
DEFINE_mInt32(ms_rpc_qps_abort_txn, "-1");
DEFINE_mInt32(ms_rpc_qps_precommit_txn, "-1");
DEFINE_mInt32(ms_rpc_qps_get_obj_store_info, "-1");
DEFINE_mInt32(ms_rpc_qps_start_tablet_job, "-1");
DEFINE_mInt32(ms_rpc_qps_finish_tablet_job, "-1");
DEFINE_mInt32(ms_rpc_qps_get_delete_bitmap, "-1");
DEFINE_mInt32(ms_rpc_qps_update_delete_bitmap, "-1");
DEFINE_mInt32(ms_rpc_qps_get_delete_bitmap_update_lock, "-1");
DEFINE_mInt32(ms_rpc_qps_remove_delete_bitmap_update_lock, "-1");
DEFINE_mInt32(ms_rpc_qps_get_instance, "-1");
DEFINE_mInt32(ms_rpc_qps_prepare_restore_job, "-1");
DEFINE_mInt32(ms_rpc_qps_commit_restore_job, "-1");
DEFINE_mInt32(ms_rpc_qps_finish_restore_job, "-1");
DEFINE_mInt32(ms_rpc_qps_list_snapshots, "-1");
DEFINE_mInt32(ms_rpc_qps_get_cluster_status, "-1");
DEFINE_mInt32(ms_rpc_qps_update_packed_file_info, "-1");

// Table-level backpressure handling config
DEFINE_mBool(enable_ms_backpressure_handling, "false");
DEFINE_Int32(ms_rpc_table_qps_window_sec, "3");

// Throttle upgrade config
DEFINE_mInt32(ms_backpressure_upgrade_interval_ms, "3000");
DEFINE_mInt32(ms_backpressure_upgrade_top_k, "1");
DEFINE_mDouble(ms_backpressure_throttle_ratio, "0.75");
DEFINE_mDouble(ms_rpc_table_qps_limit_floor, "1.0");

// Throttle downgrade config
DEFINE_mInt32(ms_backpressure_downgrade_interval_ms, "3000");

} // namespace doris::config
