OLD | NEW |
1 // Copyright (c) 2013 The LevelDB Authors. All rights reserved. | 1 // Copyright (c) 2013 The LevelDB 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. See the AUTHORS file for names of contributors. | 3 // found in the LICENSE file. See the AUTHORS file for names of contributors. |
4 | 4 |
5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
11 | 11 |
| 12 #include "base/files/file.h" |
12 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
13 #include "base/platform_file.h" | |
14 #include "leveldb/env.h" | 14 #include "leveldb/env.h" |
15 #include "port/port_chromium.h" | 15 #include "port/port_chromium.h" |
16 #include "util/mutexlock.h" | 16 #include "util/mutexlock.h" |
17 | 17 |
18 namespace leveldb_env { | 18 namespace leveldb_env { |
19 | 19 |
20 enum MethodID { | 20 enum MethodID { |
21 kSequentialFileRead, | 21 kSequentialFileRead, |
22 kSequentialFileSkip, | 22 kSequentialFileSkip, |
23 kRandomAccessFileRead, | 23 kRandomAccessFileRead, |
(...skipping 20 matching lines...) Expand all Loading... |
44 | 44 |
45 const char* MethodIDToString(MethodID method); | 45 const char* MethodIDToString(MethodID method); |
46 | 46 |
47 leveldb::Status MakeIOError(leveldb::Slice filename, | 47 leveldb::Status MakeIOError(leveldb::Slice filename, |
48 const char* message, | 48 const char* message, |
49 MethodID method, | 49 MethodID method, |
50 int saved_errno); | 50 int saved_errno); |
51 leveldb::Status MakeIOError(leveldb::Slice filename, | 51 leveldb::Status MakeIOError(leveldb::Slice filename, |
52 const char* message, | 52 const char* message, |
53 MethodID method, | 53 MethodID method, |
54 base::PlatformFileError error); | 54 base::File::Error error); |
55 leveldb::Status MakeIOError(leveldb::Slice filename, | 55 leveldb::Status MakeIOError(leveldb::Slice filename, |
56 const char* message, | 56 const char* message, |
57 MethodID method); | 57 MethodID method); |
58 | 58 |
59 enum ErrorParsingResult { | 59 enum ErrorParsingResult { |
60 METHOD_ONLY, | 60 METHOD_ONLY, |
61 METHOD_AND_PFE, | 61 METHOD_AND_PFE, |
62 METHOD_AND_ERRNO, | 62 METHOD_AND_ERRNO, |
63 NONE, | 63 NONE, |
64 }; | 64 }; |
65 | 65 |
66 ErrorParsingResult ParseMethodAndError(const char* string, | 66 ErrorParsingResult ParseMethodAndError(const char* string, |
67 MethodID* method, | 67 MethodID* method, |
68 int* error); | 68 int* error); |
69 int GetCorruptionCode(const leveldb::Status& status); | 69 int GetCorruptionCode(const leveldb::Status& status); |
70 int GetNumCorruptionCodes(); | 70 int GetNumCorruptionCodes(); |
71 std::string GetCorruptionMessage(const leveldb::Status& status); | 71 std::string GetCorruptionMessage(const leveldb::Status& status); |
72 bool IndicatesDiskFull(const leveldb::Status& status); | 72 bool IndicatesDiskFull(const leveldb::Status& status); |
73 bool IsIOError(const leveldb::Status& status); | 73 bool IsIOError(const leveldb::Status& status); |
74 bool IsCorruption(const leveldb::Status& status); | 74 bool IsCorruption(const leveldb::Status& status); |
75 std::string FilePathToString(const base::FilePath& file_path); | 75 std::string FilePathToString(const base::FilePath& file_path); |
76 | 76 |
77 class UMALogger { | 77 class UMALogger { |
78 public: | 78 public: |
79 virtual void RecordErrorAt(MethodID method) const = 0; | 79 virtual void RecordErrorAt(MethodID method) const = 0; |
80 virtual void RecordOSError(MethodID method, int saved_errno) const = 0; | 80 virtual void RecordOSError(MethodID method, int saved_errno) const = 0; |
81 virtual void RecordOSError(MethodID method, | 81 virtual void RecordOSError(MethodID method, |
82 base::PlatformFileError error) const = 0; | 82 base::File::Error error) const = 0; |
83 virtual void RecordBackupResult(bool success) const = 0; | 83 virtual void RecordBackupResult(bool success) const = 0; |
84 }; | 84 }; |
85 | 85 |
86 class RetrierProvider { | 86 class RetrierProvider { |
87 public: | 87 public: |
88 virtual int MaxRetryTimeMillis() const = 0; | 88 virtual int MaxRetryTimeMillis() const = 0; |
89 virtual base::HistogramBase* GetRetryTimeHistogram(MethodID method) const = 0; | 89 virtual base::HistogramBase* GetRetryTimeHistogram(MethodID method) const = 0; |
90 virtual base::HistogramBase* GetRecoveredFromErrorHistogram( | 90 virtual base::HistogramBase* GetRecoveredFromErrorHistogram( |
91 MethodID method) const = 0; | 91 MethodID method) const = 0; |
92 }; | 92 }; |
93 | 93 |
94 class WriteTracker { | 94 class WriteTracker { |
95 public: | 95 public: |
96 virtual void DidCreateNewFile(const std::string& fname) = 0; | 96 virtual void DidCreateNewFile(const std::string& fname) = 0; |
97 virtual bool DoesDirNeedSync(const std::string& fname) = 0; | 97 virtual bool DoesDirNeedSync(const std::string& fname) = 0; |
98 virtual void DidSyncDir(const std::string& fname) = 0; | 98 virtual void DidSyncDir(const std::string& fname) = 0; |
99 }; | 99 }; |
100 | 100 |
101 class ChromiumEnv : public leveldb::Env, | 101 class ChromiumEnv : public leveldb::Env, |
102 public UMALogger, | 102 public UMALogger, |
103 public RetrierProvider, | 103 public RetrierProvider, |
104 public WriteTracker { | 104 public WriteTracker { |
105 public: | 105 public: |
106 static bool MakeBackup(const std::string& fname); | 106 static bool MakeBackup(const std::string& fname); |
107 static base::FilePath CreateFilePath(const std::string& file_path); | 107 static base::FilePath CreateFilePath(const std::string& file_path); |
108 static const char* PlatformFileErrorString( | 108 static const char* FileErrorString(::base::File::Error error); |
109 const ::base::PlatformFileError& error); | |
110 static bool HasTableExtension(const base::FilePath& path); | 109 static bool HasTableExtension(const base::FilePath& path); |
111 virtual ~ChromiumEnv(); | 110 virtual ~ChromiumEnv(); |
112 | 111 |
113 virtual bool FileExists(const std::string& fname); | 112 virtual bool FileExists(const std::string& fname); |
114 virtual leveldb::Status GetChildren(const std::string& dir, | 113 virtual leveldb::Status GetChildren(const std::string& dir, |
115 std::vector<std::string>* result); | 114 std::vector<std::string>* result); |
116 virtual leveldb::Status DeleteFile(const std::string& fname); | 115 virtual leveldb::Status DeleteFile(const std::string& fname); |
117 virtual leveldb::Status CreateDir(const std::string& name); | 116 virtual leveldb::Status CreateDir(const std::string& name); |
118 virtual leveldb::Status DeleteDir(const std::string& name); | 117 virtual leveldb::Status DeleteDir(const std::string& name); |
119 virtual leveldb::Status GetFileSize(const std::string& fname, uint64_t* size); | 118 virtual leveldb::Status GetFileSize(const std::string& fname, uint64_t* size); |
120 virtual leveldb::Status RenameFile(const std::string& src, | 119 virtual leveldb::Status RenameFile(const std::string& src, |
121 const std::string& dst); | 120 const std::string& dst); |
122 virtual leveldb::Status LockFile(const std::string& fname, | 121 virtual leveldb::Status LockFile(const std::string& fname, |
123 leveldb::FileLock** lock); | 122 leveldb::FileLock** lock); |
124 virtual leveldb::Status UnlockFile(leveldb::FileLock* lock); | 123 virtual leveldb::Status UnlockFile(leveldb::FileLock* lock); |
125 virtual void Schedule(void (*function)(void*), void* arg); | 124 virtual void Schedule(void (*function)(void*), void* arg); |
126 virtual void StartThread(void (*function)(void* arg), void* arg); | 125 virtual void StartThread(void (*function)(void* arg), void* arg); |
127 virtual leveldb::Status GetTestDirectory(std::string* path); | 126 virtual leveldb::Status GetTestDirectory(std::string* path); |
128 virtual uint64_t NowMicros(); | 127 virtual uint64_t NowMicros(); |
129 virtual void SleepForMicroseconds(int micros); | 128 virtual void SleepForMicroseconds(int micros); |
130 | 129 |
131 protected: | 130 protected: |
132 ChromiumEnv(); | 131 ChromiumEnv(); |
133 | 132 |
134 virtual void DidCreateNewFile(const std::string& fname); | 133 virtual void DidCreateNewFile(const std::string& fname); |
135 virtual bool DoesDirNeedSync(const std::string& fname); | 134 virtual bool DoesDirNeedSync(const std::string& fname); |
136 virtual void DidSyncDir(const std::string& fname); | 135 virtual void DidSyncDir(const std::string& fname); |
137 virtual base::PlatformFileError GetDirectoryEntries( | 136 virtual base::File::Error GetDirectoryEntries( |
138 const base::FilePath& dir_param, | 137 const base::FilePath& dir_param, |
139 std::vector<base::FilePath>* result) const = 0; | 138 std::vector<base::FilePath>* result) const = 0; |
140 virtual void RecordErrorAt(MethodID method) const; | 139 virtual void RecordErrorAt(MethodID method) const; |
141 virtual void RecordOSError(MethodID method, int saved_errno) const; | 140 virtual void RecordOSError(MethodID method, int saved_errno) const; |
142 virtual void RecordOSError(MethodID method, | 141 virtual void RecordOSError(MethodID method, |
143 base::PlatformFileError error) const; | 142 base::File::Error error) const; |
144 base::HistogramBase* GetMaxFDHistogram(const std::string& type) const; | 143 base::HistogramBase* GetMaxFDHistogram(const std::string& type) const; |
145 base::HistogramBase* GetOSErrorHistogram(MethodID method, int limit) const; | 144 base::HistogramBase* GetOSErrorHistogram(MethodID method, int limit) const; |
146 | 145 |
147 std::string name_; | 146 std::string name_; |
148 bool make_backup_; | 147 bool make_backup_; |
149 | 148 |
150 private: | 149 private: |
151 // File locks may not be exclusive within a process (e.g. on POSIX). Track | 150 // File locks may not be exclusive within a process (e.g. on POSIX). Track |
152 // locks held by the ChromiumEnv to prevent access within the process. | 151 // locks held by the ChromiumEnv to prevent access within the process. |
153 class LockTable { | 152 class LockTable { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 void (*function)(void*); | 200 void (*function)(void*); |
202 }; | 201 }; |
203 typedef std::deque<BGItem> BGQueue; | 202 typedef std::deque<BGItem> BGQueue; |
204 BGQueue queue_; | 203 BGQueue queue_; |
205 LockTable locks_; | 204 LockTable locks_; |
206 }; | 205 }; |
207 | 206 |
208 } // namespace leveldb_env | 207 } // namespace leveldb_env |
209 | 208 |
210 #endif | 209 #endif |
OLD | NEW |