// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_DISK_CACHE_SQL_SQL_BACKEND_CONSTANTS_H_
#define NET_DISK_CACHE_SQL_SQL_BACKEND_CONSTANTS_H_

#include <cstdint>
#include <string_view>

#include "base/files/file_path.h"
#include "base/time/time.h"

namespace disk_cache {

// This constant defines the denominator for the maximum fraction of the cache
// that a single entry can consume. For example, if this value is 8, a single
// entry can consume at most 1/8th of the total cache size.
// Maximum fraction of the cache that one entry can consume.
inline constexpr int kSqlBackendMaxFileRatioDenominator = 8;

// A maximum file size when the overall cache size is very small, meaning there
// is very little free disk space.
inline constexpr int64_t kSqlBackendMinFileSizeLimit = 5 * 1024 * 1024;

// Keys for the key-value pairs stored in the `meta` table.
inline constexpr std::string_view kSqlBackendMetaTableKeyEntryCount =
    "EntryCount";
inline constexpr std::string_view kSqlBackendMetaTableKeyTotalSize =
    "TotalSize";

// The file name prefix of the SQL backend database shards.
inline constexpr std::string_view kSqlBackendDatabaseFileNamePrefix = "sqldb";

// The file name of the first shard of the SQL backend database.
inline constexpr base::FilePath::CharType kSqlBackendDatabaseShard0FileName[] =
    FILE_PATH_LITERAL("sqldb0");

// The name of the fake index file. This file is created to signal the presence
// of the SQL backend and to prevent other backends from trying to use the same
// directory.
inline constexpr base::FilePath::CharType kSqlBackendFakeIndexFileName[] =
    FILE_PATH_LITERAL("index");

// The prefix of the fake index file.
// The full content is the prefix followed by the number of shards.
inline constexpr std::string_view kSqlBackendFakeIndexPrefix = "SQLCache";

// ----------------------------------------------------------------------------
// Database Scheme Version history:
// Version 1: Initial schema. The first field trial experiment started on
//            Dev/Canary with this version.
// Version 2: https://crrev.com/c/6917159 added `cache_key_hash` column and an
//            index on `(cache_key_hash, doomed)` to the `resources` table.
// Version 3: https://crrev.com/c/6940353 replaced `(token_high, token_low)`
//            with `res_id` in `resources` and `blobs` tables.
// Version 4: https://crrev.com/c/7005549 changed the eviction logic to use
//            `res_id` instead of `cache_key` and added a covering index on
//            `(last_used, bytes_usage)` to the `resources` table.
// Version 5: https://crrev.com/c/7005917 changed how doomed entries are
//            cleaned up. Instead of a delayed task, cleanup is now triggered
//            during browser idle periods. Also, the index on `res_id` for
//            doomed entries was removed as it's no longer needed.
// Version 6: https://crrev.com/c/7006231 changed the hash function for cache
//            keys to base::PersistentHash, which uses a 32-bit hash. This is a
//            breaking change as the previous version used a 64-bit hash.
// Version 7: https://crrev.com/c/7023771 added `check_sum` column in both of
//            the `resources` table and the `blobs` table.
// ----------------------------------------------------------------------------

// The oldest database schema version that the current code can read.
// A database with a version older than this will be razed as it's considered
// obsolete and the code no longer supports migrating from it.
inline constexpr int kSqlBackendLowestSupportedDatabaseVersion = 7;

// The current version of the database schema. This should be incremented for
// any schema change.
inline constexpr int kSqlBackendCurrentDatabaseVersion = 7;

// The oldest application version that can use a database with the current
// schema. If a schema change is not backward-compatible, this must be set to
// the same value as `kSqlBackendCurrentDatabaseVersion`.
inline constexpr int kSqlBackendCompatibleDatabaseVersion = 7;

// Estimated static size overhead for a resource entry in the database,
// excluding the key and any blob data. This is a conservative estimate based on
// empirical testing and is intended to account for the overhead of the row in
// the `resources` table, SQLite's B-tree overhead per entry, and other
// miscellaneous metadata. The
// `SqlPersistentStoreTest.StaticResourceSizeEstimation` test provides a basic
// validation of this constant against the actual file size.
inline constexpr int kSqlBackendStaticResourceSize = 300;

// Defines the number of streams supported by the SQL backend.
// The SQL backend only supports stream 0 and stream 1.
static const int kSqlBackendStreamCount = 2;

// High watermark for cache eviction, in thousandths (permille) of the max size.
// Eviction is triggered when the cache size exceeds this.
inline constexpr int kSqlBackendEvictionHighWaterMarkPermille = 950;

// High watermark for cache eviction during idle time, in thousandths (permille)
// of the max size. This is lower than the regular high watermark to allow for
// more proactive eviction when the browser is not busy.
inline constexpr int kSqlBackendIdleTimeEvictionHighWaterMarkPermille = 925;

// Low watermark for cache eviction, in thousandths (permille) of the max size.
// Eviction continues until the cache size is below this.
inline constexpr int kSqlBackendEvictionLowWaterMarkPermille = 900;

// The delay after backend initialization before running post-initialization
// tasks. These tasks, such as cleaning up doomed entries from previous
// sessions and loading the in-memory index, are deferred to avoid impacting
// startup performance.
inline constexpr base::TimeDelta kSqlBackendPostInitializationTasksDelay =
    base::Minutes(1);

// The prefix for histograms related to the SQL disk cache backend.
inline constexpr std::string_view kSqlDiskCacheBackendHistogramPrefix =
    "Net.SqlDiskCache.Backend.";

}  // namespace disk_cache

#endif  // NET_DISK_CACHE_SQL_SQL_BACKEND_CONSTANTS_H_
