Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2656)

Unified Diff: content/browser/indexed_db/leveldb/leveldb_database.cc

Issue 16409006: Don't delete leveldb directory if disk was full. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move to else if block Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/indexed_db/leveldb/leveldb_database.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/indexed_db/leveldb/leveldb_database.cc
diff --git a/content/browser/indexed_db/leveldb/leveldb_database.cc b/content/browser/indexed_db/leveldb/leveldb_database.cc
index add72c16422c6f1789ee0e23b60bfcd12da308f2..316e961294888c5cf2bd4d4286eb488c7677cdcc 100644
--- a/content/browser/indexed_db/leveldb/leveldb_database.cc
+++ b/content/browser/indexed_db/leveldb/leveldb_database.cc
@@ -109,8 +109,8 @@ bool LevelDBDatabase::Destroy(const base::FilePath& file_name) {
return s.ok();
}
-static void HistogramFreeSpace(const char* type,
- const base::FilePath& file_name) {
+static int CheckFreeSpace(const char* type, const base::FilePath& file_name) {
+ // TODO(dgrogan): Change string16 -> std::string.
string16 name = ASCIIToUTF16("WebCore.IndexedDB.LevelDB.Open") +
ASCIIToUTF16(type) + ASCIIToUTF16("FreeDiskSpace");
int64 free_disk_space_in_k_bytes =
@@ -122,7 +122,7 @@ static void HistogramFreeSpace(const char* type,
2 /*boundary*/,
2 /*boundary*/ + 1,
base::HistogramBase::kUmaTargetedHistogramFlag)->Add(1 /*sample*/);
- return;
+ return -1;
}
int clamped_disk_space_k_bytes =
free_disk_space_in_k_bytes > INT_MAX ? INT_MAX
@@ -135,6 +135,7 @@ static void HistogramFreeSpace(const char* type,
11 /*buckets*/,
base::HistogramBase::kUmaTargetedHistogramFlag)
->Add(clamped_disk_space_k_bytes);
+ return clamped_disk_space_k_bytes;
}
static void HistogramLevelDBError(const char* histogram_name,
@@ -164,7 +165,8 @@ static void HistogramLevelDBError(const char* histogram_name,
scoped_ptr<LevelDBDatabase> LevelDBDatabase::Open(
const base::FilePath& file_name,
- const LevelDBComparator* comparator) {
+ const LevelDBComparator* comparator,
+ bool* is_disk_full) {
scoped_ptr<ComparatorAdapter> comparator_adapter(
new ComparatorAdapter(comparator));
@@ -174,14 +176,18 @@ scoped_ptr<LevelDBDatabase> LevelDBDatabase::Open(
if (!s.ok()) {
HistogramLevelDBError("WebCore.IndexedDB.LevelDBOpenErrors", s);
- HistogramFreeSpace("Failure", file_name);
+ int free_space_k_bytes = CheckFreeSpace("Failure", file_name);
+ // Disks with <100k of free space almost never succeed in opening a
+ // leveldb database.
+ if (is_disk_full)
+ *is_disk_full = free_space_k_bytes >= 0 && free_space_k_bytes < 100;
LOG(ERROR) << "Failed to open LevelDB database from "
<< file_name.AsUTF8Unsafe() << "," << s.ToString();
return scoped_ptr<LevelDBDatabase>();
}
- HistogramFreeSpace("Success", file_name);
+ CheckFreeSpace("Success", file_name);
scoped_ptr<LevelDBDatabase> result(new LevelDBDatabase);
result->db_ = make_scoped_ptr(db);
« no previous file with comments | « content/browser/indexed_db/leveldb/leveldb_database.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698