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

Unified Diff: third_party/leveldatabase/env_chromium.cc

Issue 1022983004: leveldb: Env no longer implicitly syncs dir for all newly created files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unnecessary "else". Created 5 years, 9 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 | « third_party/leveldatabase/env_chromium.h ('k') | third_party/leveldatabase/env_chromium_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/leveldatabase/env_chromium.cc
diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc
index 65d179ac498d2d7ee668af595f1cb8bf16d5824b..7febd75dc4f8f7f1f9811e948bc7881e6758718e 100644
--- a/third_party/leveldatabase/env_chromium.cc
+++ b/third_party/leveldatabase/env_chromium.cc
@@ -216,7 +216,6 @@ class ChromiumWritableFile : public leveldb::WritableFile {
ChromiumWritableFile(const std::string& fname,
base::File* f,
const UMALogger* uma_logger,
- WriteTracker* tracker,
bool make_backup);
virtual ~ChromiumWritableFile() {}
leveldb::Status Append(const leveldb::Slice& data) override;
@@ -231,7 +230,6 @@ class ChromiumWritableFile : public leveldb::WritableFile {
std::string filename_;
scoped_ptr<base::File> file_;
const UMALogger* uma_logger_;
- WriteTracker* tracker_;
Type file_type_;
std::string parent_dir_;
bool make_backup_;
@@ -240,12 +238,10 @@ class ChromiumWritableFile : public leveldb::WritableFile {
ChromiumWritableFile::ChromiumWritableFile(const std::string& fname,
base::File* f,
const UMALogger* uma_logger,
- WriteTracker* tracker,
bool make_backup)
: filename_(fname),
file_(f),
uma_logger_(uma_logger),
- tracker_(tracker),
file_type_(kOther),
make_backup_(make_backup) {
FilePath path = FilePath::FromUTF8Unsafe(fname);
@@ -253,8 +249,6 @@ ChromiumWritableFile::ChromiumWritableFile(const std::string& fname,
file_type_ = kManifest;
else if (path.MatchesExtension(table_extension))
file_type_ = kTable;
- if (file_type_ != kManifest)
- tracker_->DidCreateNewFile(filename_);
parent_dir_ = FilePath::FromUTF8Unsafe(fname).DirName().AsUTF8Unsafe();
}
@@ -277,13 +271,6 @@ Status ChromiumWritableFile::SyncParent() {
}
Status ChromiumWritableFile::Append(const Slice& data) {
- if (file_type_ == kManifest && tracker_->DoesDirNeedSync(filename_)) {
- Status s = SyncParent();
- if (!s.ok())
- return s;
- tracker_->DidSyncDir(filename_);
- }
-
int bytes_written = file_->WriteAtCurrentPos(data.data(), data.size());
if (bytes_written != data.size()) {
base::File::Error error = LastFileError();
@@ -319,6 +306,12 @@ Status ChromiumWritableFile::Sync() {
if (make_backup_ && file_type_ == kTable)
uma_logger_->RecordBackupResult(ChromiumEnv::MakeBackup(filename_));
+ // leveldb's implicit contract for Sync() is that if this instance is for a
+ // manifest file then the directory is also sync'ed. See leveldb's
+ // env_posix.cc.
+ if (file_type_ == kManifest)
+ return SyncParent();
+
return Status::OK();
}
@@ -888,8 +881,7 @@ Status ChromiumEnv::NewWritableFile(const std::string& fname,
return MakeIOError(fname, "Unable to create writable file",
kNewWritableFile, f->error_details());
} else {
- *result =
- new ChromiumWritableFile(fname, f.release(), this, this, make_backup_);
+ *result = new ChromiumWritableFile(fname, f.release(), this, make_backup_);
return Status::OK();
}
}
@@ -905,8 +897,7 @@ Status ChromiumEnv::NewAppendableFile(const std::string& fname,
return MakeIOError(fname, "Unable to create appendable file",
kNewAppendableFile, f->error_details());
}
- *result =
- new ChromiumWritableFile(fname, f.release(), this, this, make_backup_);
+ *result = new ChromiumWritableFile(fname, f.release(), this, make_backup_);
return Status::OK();
}
@@ -1071,25 +1062,6 @@ void ChromiumEnv::StartThread(void (*function)(void* arg), void* arg) {
new Thread(function, arg); // Will self-delete.
}
-static std::string GetDirName(const std::string& filename) {
- return FilePath::FromUTF8Unsafe(filename).DirName().AsUTF8Unsafe();
-}
-
-void ChromiumEnv::DidCreateNewFile(const std::string& filename) {
- base::AutoLock auto_lock(directory_sync_lock_);
- directories_needing_sync_.insert(GetDirName(filename));
-}
-
-bool ChromiumEnv::DoesDirNeedSync(const std::string& filename) {
- base::AutoLock auto_lock(directory_sync_lock_);
- return ContainsKey(directories_needing_sync_, GetDirName(filename));
-}
-
-void ChromiumEnv::DidSyncDir(const std::string& filename) {
- base::AutoLock auto_lock(directory_sync_lock_);
- directories_needing_sync_.erase(GetDirName(filename));
-}
-
} // namespace leveldb_env
namespace leveldb {
« no previous file with comments | « third_party/leveldatabase/env_chromium.h ('k') | third_party/leveldatabase/env_chromium_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698