ladybird/Libraries/LibHTTP/Cache/CacheIndex.h
Timothy Flynn 9c8322d1b3 LibHTTP: Use correct cache key type in disk cache index entry storage
We also don't need to store the cache key itself in the entry struct.
2025-12-21 09:24:51 -06:00

66 lines
2 KiB
C++

/*
* Copyright (c) 2025, Tim Flynn <trflynn89@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Error.h>
#include <AK/HashMap.h>
#include <AK/NonnullRawPtr.h>
#include <AK/Time.h>
#include <AK/Types.h>
#include <LibDatabase/Database.h>
#include <LibHTTP/HeaderList.h>
#include <LibRequests/CacheSizes.h>
namespace HTTP {
// The cache index is a SQL database containing metadata about each cache entry. An entry in the index is created once
// the entire cache entry has been successfully written to disk.
class CacheIndex {
struct Entry {
String url;
NonnullRefPtr<HeaderList> response_headers;
u64 data_size { 0 };
UnixDateTime request_time;
UnixDateTime response_time;
UnixDateTime last_access_time;
};
public:
static ErrorOr<CacheIndex> create(Database::Database&);
void create_entry(u64 cache_key, String url, NonnullRefPtr<HeaderList>, u64 data_size, UnixDateTime request_time, UnixDateTime response_time);
void remove_entry(u64 cache_key);
void remove_entries_accessed_since(UnixDateTime, Function<void(u64 cache_key)> on_entry_removed);
Optional<Entry&> find_entry(u64 cache_key);
void update_response_headers(u64 cache_key, NonnullRefPtr<HeaderList>);
void update_last_access_time(u64 cache_key);
Requests::CacheSizes estimate_cache_size_accessed_since(UnixDateTime since);
private:
struct Statements {
Database::StatementID insert_entry { 0 };
Database::StatementID remove_entry { 0 };
Database::StatementID remove_entries_accessed_since { 0 };
Database::StatementID select_entry { 0 };
Database::StatementID update_response_headers { 0 };
Database::StatementID update_last_access_time { 0 };
Database::StatementID estimate_cache_size_accessed_since { 0 };
};
CacheIndex(Database::Database&, Statements);
NonnullRawPtr<Database::Database> m_database;
Statements m_statements;
HashMap<u64, Entry> m_entries;
};
}