blob: bfbcec974ff4421f79ba29dfc5a6d6f4c9a119a6 [file] [log] [blame]
// 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";
inline constexpr base::FilePath::CharType kSqlBackendDatabaseFileName[] =
FILE_PATH_LITERAL("sqldb");
// 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 magic number for the fake index file. This is "SQLCache" in
// little-endian.
inline constexpr uint64_t kSqlBackendFakeIndexMagicNumber =
UINT64_C(0x65686361434c5153);
// 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 = 1;
// The current version of the database schema. This should be incremented for
// any schema change.
inline constexpr int kSqlBackendCurrentDatabaseVersion = 1;
// 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 = 1;
// 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;
// Divisor used to calculate the high and low watermarks for cache eviction.
// The high watermark is `max_size - (max_size / divisor)`, and the low
// watermark is `max_size - 2 * (max_size / divisor)`. Eviction is triggered
// when the cache size exceeds the high watermark and continues until it is
// below the low watermark.
inline constexpr int kSqlBackendEvictionMarginDivisor = 20;
// The delay after backend initialization before running a one-time cleanup task
// to delete doomed entries. This task removes entries that were doomed in a
// previous session but not fully deleted (e.g., due to a crash), ensuring
// that their disk space is reclaimed.
// Note: This value is set assuming use with HTTP Cache, but if the SQL backend
// is used with Cache Storage, it should be a shorter value.
inline constexpr base::TimeDelta kSqlBackendDeleteDoomedEntriesDelay =
base::Minutes(10);
} // namespace disk_cache
#endif // NET_DISK_CACHE_SQL_SQL_BACKEND_CONSTANTS_H_