// Copyright (c) 2013 The LevelDB Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of contributors. #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ #include <memory> #include <string> #include <string_view> #include <vector> #include "base/containers/linked_list.h" #include "base/containers/span.h" #include "base/files/file.h" #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/gtest_prod_util.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" #include "leveldb/cache.h" #include "leveldb/db.h" #include "leveldb/env.h" #include "leveldb/export.h" #include "port/port_chromium.h" namespace base { namespace trace_event { class MemoryAllocatorDump; class ProcessMemoryDump; } // namespace trace_event } // namespace base namespace storage { class FilesystemProxy; } namespace leveldb_env { // These entries map to values in tools/metrics/histograms/histograms.xml. New // values should be appended at the end. enum MethodID { … }; // leveldb::Status::Code values are mapped to these values for UMA logging. // Do not change/delete these values as you will break reporting for older // copies of Chrome. Only add new values to the end. enum LevelDBStatusValue { … }; LEVELDB_EXPORT LevelDBStatusValue GetLevelDBStatusUMAValue(const leveldb::Status& s); DatabaseErrorReportingCallback; // Create the default leveldb options object suitable for leveldb operations. struct LEVELDB_EXPORT Options : public leveldb::Options { … }; LEVELDB_EXPORT const char* MethodIDToString(MethodID method); leveldb::Status LEVELDB_EXPORT MakeIOError(leveldb::Slice filename, const std::string& message, MethodID method, base::File::Error error = base::File::FILE_OK); enum ErrorParsingResult { … }; ErrorParsingResult LEVELDB_EXPORT ParseMethodAndError(const leveldb::Status& status, MethodID* method, base::File::Error* error); LEVELDB_EXPORT int GetCorruptionCode(const leveldb::Status& status); LEVELDB_EXPORT int GetNumCorruptionCodes(); LEVELDB_EXPORT std::string GetCorruptionMessage(const leveldb::Status& status); LEVELDB_EXPORT bool IndicatesDiskFull(const leveldb::Status& status); // Returns the name for a temporary database copy during RewriteDB(). LEVELDB_EXPORT std::string DatabaseNameForRewriteDB( const std::string& original_name); // Determine the appropriate leveldb write buffer size to use. The default size // (4MB) may result in a log file too large to be compacted given the available // storage space. This function will return smaller values for smaller disks, // and the default leveldb value for larger disks. // // |disk_space| is the logical partition size (in bytes), and *not* available // space. A value of -1 will return leveldb's default write buffer size. LEVELDB_EXPORT extern size_t WriteBufferSize(int64_t disk_space); // Thread safety: `ChromiumEnv` is safe to use from multiple threads as long as // it's created and destroyed safely. In Chromium, ChromiumEnv is created via a // NoDestructor singleton, so as a function-local static, construction is // thread-safe as of C++11. The NoDestructor-wrapped instance is never // destroyed. class LEVELDB_EXPORT ChromiumEnv : public leveldb::Env { … }; // Tracks databases open via OpenDatabase() method and exposes them to // memory-infra. The class is thread safe. class LEVELDB_EXPORT DBTracker { … }; // Opens a database with the specified "name" and "options" (see note) and // exposes it to Chrome's tracing (see DBTracker for details). The function // guarantees that: // 1. |dbptr| is not touched on failure // 2. |dbptr| is not NULL on success // // Note that some `options` may not be honored, for example in the case of // in-memory databases, the block cache is disabled and a minimum write buffer // size is used to conserve memory. LEVELDB_EXPORT leveldb::Status OpenDB(const leveldb_env::Options& options, const std::string& name, std::unique_ptr<leveldb::DB>* dbptr); // Overrides OpenDB with the given closure. DBFactoryMethod; LEVELDB_EXPORT void SetDBFactoryForTesting(DBFactoryMethod factory); // Copies the content of |dbptr| into a fresh database to remove traces of // deleted data. |options| and |name| of the old database are required to create // an identical copy. |dbptr| will be replaced with the new database on success. // If the rewrite fails e.g. because we can't write to the temporary location, // the old db is returned if possible, otherwise |*dbptr| can become NULL. LEVELDB_EXPORT leveldb::Status RewriteDB(const leveldb_env::Options& options, const std::string& name, std::unique_ptr<leveldb::DB>* dbptr); LEVELDB_EXPORT std::string_view MakeStringView(const leveldb::Slice& s); LEVELDB_EXPORT leveldb::Slice MakeSlice(std::string_view s); LEVELDB_EXPORT leveldb::Slice MakeSlice(base::span<const uint8_t> s); } // namespace leveldb_env #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_