blob: f515540d68bc1e712fe8302a2d1144343ee9ff2a [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.
#include "storage/common/database/leveldb_status_helper.h"
#include "base/metrics/histogram_functions.h"
#include "storage/common/database/db_status.h"
#include "third_party/leveldatabase/env_chromium.h"
#include "third_party/leveldatabase/src/include/leveldb/status.h"
namespace storage {
namespace {
int GetTypeForLegacyLogging(DbStatus status) {
if (status.ok()) {
return leveldb_env::LEVELDB_STATUS_OK;
} else if (status.IsNotFound()) {
return leveldb_env::LEVELDB_STATUS_NOT_FOUND;
} else if (status.IsCorruption()) {
return leveldb_env::LEVELDB_STATUS_CORRUPTION;
} else if (status.IsNotSupported()) {
return leveldb_env::LEVELDB_STATUS_NOT_SUPPORTED;
} else if (status.IsIOError()) {
return leveldb_env::LEVELDB_STATUS_IO_ERROR;
} else {
return leveldb_env::LEVELDB_STATUS_INVALID_ARGUMENT;
}
}
} // namespace
DbStatus FromLevelDBStatus(const leveldb::Status& status) {
if (status.ok()) {
return DbStatus::OK();
} else if (status.IsNotFound()) {
return DbStatus::NotFound(status.ToString());
} else if (status.IsCorruption()) {
return DbStatus::Corruption(status.ToString());
} else if (status.IsNotSupportedError()) {
return DbStatus::NotSupported(status.ToString());
} else if (status.IsIOError()) {
return DbStatus::IOError(status.ToString());
} else {
return DbStatus::InvalidArgument(status.ToString());
}
}
leveldb::Status ToLevelDBStatus(const DbStatus& status) {
if (status.ok()) {
return leveldb::Status::OK();
} else if (status.IsNotFound()) {
return leveldb::Status::NotFound(status.ToString());
} else if (status.IsCorruption()) {
return leveldb::Status::Corruption(status.ToString());
} else if (status.IsNotSupported()) {
return leveldb::Status::NotSupported(status.ToString());
} else if (status.IsIOError()) {
return leveldb::Status::IOError(status.ToString());
} else {
return leveldb::Status::InvalidArgument(status.ToString());
}
}
void LogLevelDBStatusHistogram(std::string_view histogram_name,
const DbStatus& status) {
base::UmaHistogramEnumeration(histogram_name,
static_cast<leveldb_env::LevelDBStatusValue>(
GetTypeForLegacyLogging(status)),
leveldb_env::LEVELDB_STATUS_MAX);
}
bool IndicatesDiskFull(const DbStatus& status) {
return leveldb_env::IndicatesDiskFull(ToLevelDBStatus(status));
}
} // namespace storage