| 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 {
|
|
|