OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/fileapi/file_system_directory_database.h" | 5 #include "webkit/fileapi/file_system_directory_database.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 const char kChildLookupPrefix[] = "CHILD_OF:"; | 67 const char kChildLookupPrefix[] = "CHILD_OF:"; |
68 const char kChildLookupSeparator[] = ":"; | 68 const char kChildLookupSeparator[] = ":"; |
69 const char kLastFileIdKey[] = "LAST_FILE_ID"; | 69 const char kLastFileIdKey[] = "LAST_FILE_ID"; |
70 const char kLastIntegerKey[] = "LAST_INTEGER"; | 70 const char kLastIntegerKey[] = "LAST_INTEGER"; |
71 const int64 kMinimumReportIntervalHours = 1; | 71 const int64 kMinimumReportIntervalHours = 1; |
72 const char kInitStatusHistogramLabel[] = "FileSystem.DirectoryDatabaseInit"; | 72 const char kInitStatusHistogramLabel[] = "FileSystem.DirectoryDatabaseInit"; |
73 | 73 |
74 enum InitStatus { | 74 enum InitStatus { |
75 INIT_STATUS_OK = 0, | 75 INIT_STATUS_OK = 0, |
76 INIT_STATUS_CORRUPTION, | 76 INIT_STATUS_CORRUPTION, |
| 77 INIT_STATUS_IO_ERROR, |
| 78 INIT_STATUS_UNKNOWN_ERROR, |
77 INIT_STATUS_MAX | 79 INIT_STATUS_MAX |
78 }; | 80 }; |
79 | 81 |
80 std::string GetChildLookupKey( | 82 std::string GetChildLookupKey( |
81 fileapi::FileSystemDirectoryDatabase::FileId parent_id, | 83 fileapi::FileSystemDirectoryDatabase::FileId parent_id, |
82 const FilePath::StringType& child_name) { | 84 const FilePath::StringType& child_name) { |
83 std::string name; | 85 std::string name; |
84 name = fileapi::FilePathToString(FilePath(child_name)); | 86 name = fileapi::FilePathToString(FilePath(child_name)); |
85 return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) + | 87 return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) + |
86 std::string(kChildLookupSeparator) + name; | 88 std::string(kChildLookupSeparator) + name; |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 base::Time now = base::Time::Now(); | 439 base::Time now = base::Time::Now(); |
438 const base::TimeDelta minimum_interval = | 440 const base::TimeDelta minimum_interval = |
439 base::TimeDelta::FromHours(kMinimumReportIntervalHours); | 441 base::TimeDelta::FromHours(kMinimumReportIntervalHours); |
440 if (last_reported_time_ + minimum_interval >= now) | 442 if (last_reported_time_ + minimum_interval >= now) |
441 return; | 443 return; |
442 last_reported_time_ = now; | 444 last_reported_time_ = now; |
443 | 445 |
444 if (status.ok()) { | 446 if (status.ok()) { |
445 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, | 447 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, |
446 INIT_STATUS_OK, INIT_STATUS_MAX); | 448 INIT_STATUS_OK, INIT_STATUS_MAX); |
| 449 } else if (status.IsCorruption()) { |
| 450 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, |
| 451 INIT_STATUS_CORRUPTION, INIT_STATUS_MAX); |
| 452 } else if (status.IsIOError()) { |
| 453 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, |
| 454 INIT_STATUS_IO_ERROR, INIT_STATUS_MAX); |
447 } else { | 455 } else { |
448 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, | 456 UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, |
449 INIT_STATUS_CORRUPTION, INIT_STATUS_MAX); | 457 INIT_STATUS_UNKNOWN_ERROR, INIT_STATUS_MAX); |
450 } | 458 } |
451 } | 459 } |
452 | 460 |
453 bool FileSystemDirectoryDatabase::StoreDefaultValues() { | 461 bool FileSystemDirectoryDatabase::StoreDefaultValues() { |
454 // Verify that this is a totally new database, and initialize it. | 462 // Verify that this is a totally new database, and initialize it. |
455 scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(leveldb::ReadOptions())); | 463 scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(leveldb::ReadOptions())); |
456 iter->SeekToFirst(); | 464 iter->SeekToFirst(); |
457 if (iter->Valid()) { // DB was not empty--we shouldn't have been called. | 465 if (iter->Valid()) { // DB was not empty--we shouldn't have been called. |
458 LOG(ERROR) << "File system origin database is corrupt!"; | 466 LOG(ERROR) << "File system origin database is corrupt!"; |
459 return false; | 467 return false; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 | 568 |
561 void FileSystemDirectoryDatabase::HandleError( | 569 void FileSystemDirectoryDatabase::HandleError( |
562 const tracked_objects::Location& from_here, | 570 const tracked_objects::Location& from_here, |
563 const leveldb::Status& status) { | 571 const leveldb::Status& status) { |
564 LOG(ERROR) << "FileSystemDirectoryDatabase failed at: " | 572 LOG(ERROR) << "FileSystemDirectoryDatabase failed at: " |
565 << from_here.ToString() << " with error: " << status.ToString(); | 573 << from_here.ToString() << " with error: " << status.ToString(); |
566 db_.reset(); | 574 db_.reset(); |
567 } | 575 } |
568 | 576 |
569 } // namespace fileapi | 577 } // namespace fileapi |
OLD | NEW |