Commit 83146ab0 authored by cmumford@chromium.org's avatar cmumford@chromium.org

Revert of Created new Windows LevelDB environment. (https://codereview.chromium.org/113373002/)

Reason for revert:
The indexeddb_perf tests on all Windows testers regressed in performance significantly. Don't yet know the exact cause, but because the performance drop is significant will revert this change first, and then proceed with the investigation.

Original issue's description:
> Created new Win32 LevelDB environment.
>     
> This change splits ChromiumEnv into two classes: ChromiumEnv/ChromiumEnvPosix.
> ChromiumEnvWin32 was also added which uses the Win32 API - except for logging.
> 
> The default is to create POSIX environments for all platforms for non-IDB
> LevelDB users. For IDB we create a Windows environment on Windows, else a
> POSIX environment like before.
> 
> BUG=222623
> 
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=245135

TBR=dgrogan@chromium.org,alecflett@chromium.org,jsbell@chromium.org,iannucci@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=222623

Review URL: https://codereview.chromium.org/140923005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245270 0039d316-1c4b-4281-b951-d872f2087c98
parent ec673cae
This diff is collapsed.
......@@ -11,7 +11,10 @@
#include "base/metrics/histogram.h"
#include "base/platform_file.h"
#include "base/synchronization/condition_variable.h"
#include "leveldb/env.h"
#include "leveldb/slice.h"
#include "leveldb/status.h"
#include "port/port_chromium.h"
#include "util/mutexlock.h"
......@@ -98,18 +101,51 @@ class WriteTracker {
virtual void DidSyncDir(const std::string& fname) = 0;
};
class ChromiumWritableFile : public leveldb::WritableFile {
public:
ChromiumWritableFile(const std::string& fname,
FILE* f,
const UMALogger* uma_logger,
WriteTracker* tracker,
bool make_backup);
virtual ~ChromiumWritableFile();
virtual leveldb::Status Append(const leveldb::Slice& data);
virtual leveldb::Status Close();
virtual leveldb::Status Flush();
virtual leveldb::Status Sync();
private:
enum Type {
kManifest,
kTable,
kOther
};
leveldb::Status SyncParent();
std::string filename_;
FILE* file_;
const UMALogger* uma_logger_;
WriteTracker* tracker_;
Type file_type_;
std::string parent_dir_;
bool make_backup_;
};
class ChromiumEnv : public leveldb::Env,
public UMALogger,
public RetrierProvider,
public WriteTracker {
public:
static bool MakeBackup(const std::string& fname);
static base::FilePath CreateFilePath(const std::string& file_path);
static const char* PlatformFileErrorString(
const ::base::PlatformFileError& error);
static bool HasTableExtension(const base::FilePath& path);
ChromiumEnv();
virtual ~ChromiumEnv();
virtual leveldb::Status NewSequentialFile(const std::string& fname,
leveldb::SequentialFile** result);
virtual leveldb::Status NewRandomAccessFile(
const std::string& fname,
leveldb::RandomAccessFile** result);
virtual leveldb::Status NewWritableFile(const std::string& fname,
leveldb::WritableFile** result);
virtual bool FileExists(const std::string& fname);
virtual leveldb::Status GetChildren(const std::string& dir,
std::vector<std::string>* result);
......@@ -125,24 +161,15 @@ class ChromiumEnv : public leveldb::Env,
virtual void Schedule(void (*function)(void*), void* arg);
virtual void StartThread(void (*function)(void* arg), void* arg);
virtual leveldb::Status GetTestDirectory(std::string* path);
virtual leveldb::Status NewLogger(const std::string& fname,
leveldb::Logger** result);
virtual uint64_t NowMicros();
virtual void SleepForMicroseconds(int micros);
protected:
ChromiumEnv();
virtual void DidCreateNewFile(const std::string& fname);
virtual bool DoesDirNeedSync(const std::string& fname);
virtual void DidSyncDir(const std::string& fname);
virtual base::PlatformFileError GetDirectoryEntries(
const base::FilePath& dir_param,
std::vector<base::FilePath>* result) const = 0;
virtual void RecordErrorAt(MethodID method) const;
virtual void RecordOSError(MethodID method, int saved_errno) const;
virtual void RecordOSError(MethodID method,
base::PlatformFileError error) const;
base::HistogramBase* GetMaxFDHistogram(const std::string& type) const;
base::HistogramBase* GetOSErrorHistogram(MethodID method, int limit) const;
std::string name_;
bool make_backup_;
......@@ -175,12 +202,19 @@ class ChromiumEnv : public leveldb::Env,
reinterpret_cast<ChromiumEnv*>(arg)->BGThread();
}
virtual void RecordErrorAt(MethodID method) const;
virtual void RecordOSError(MethodID method, int saved_errno) const;
virtual void RecordOSError(MethodID method,
base::PlatformFileError error) const;
virtual void RecordBackupResult(bool result) const;
void RestoreIfNecessary(const std::string& dir,
std::vector<std::string>* children);
base::FilePath RestoreFromBackup(const base::FilePath& base_name);
void RecordOpenFilesLimit(const std::string& type);
void RecordLockFileAncestors(int num_missing_ancestors) const;
base::HistogramBase* GetOSErrorHistogram(MethodID method, int limit) const;
base::HistogramBase* GetMethodIOErrorHistogram() const;
base::HistogramBase* GetMaxFDHistogram(const std::string& type) const;
base::HistogramBase* GetLockFileAncestorHistogram() const;
// RetrierProvider implementation.
......
This diff is collapsed.
// Copyright (c) 2013 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
#ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_STDIO_H_
#define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_STDIO_H_
#include "env_chromium.h"
namespace leveldb_env {
class ChromiumWritableFile : public leveldb::WritableFile {
public:
ChromiumWritableFile(const std::string& fname,
FILE* f,
const UMALogger* uma_logger,
WriteTracker* tracker,
bool make_backup);
virtual ~ChromiumWritableFile();
virtual leveldb::Status Append(const leveldb::Slice& data);
virtual leveldb::Status Close();
virtual leveldb::Status Flush();
virtual leveldb::Status Sync();
private:
enum Type {
kManifest,
kTable,
kOther
};
leveldb::Status SyncParent();
std::string filename_;
FILE* file_;
const UMALogger* uma_logger_;
WriteTracker* tracker_;
Type file_type_;
std::string parent_dir_;
bool make_backup_;
};
class ChromiumEnvStdio : public ChromiumEnv {
public:
ChromiumEnvStdio();
virtual ~ChromiumEnvStdio();
virtual leveldb::Status NewSequentialFile(const std::string& fname,
leveldb::SequentialFile** result);
virtual leveldb::Status NewRandomAccessFile(
const std::string& fname,
leveldb::RandomAccessFile** result);
virtual leveldb::Status NewWritableFile(const std::string& fname,
leveldb::WritableFile** result);
virtual leveldb::Status NewLogger(const std::string& fname,
leveldb::Logger** result);
protected:
virtual base::PlatformFileError GetDirectoryEntries(
const base::FilePath& dir_param,
std::vector<base::FilePath>* result) const;
private:
// BGThread() is the body of the background thread
void BGThread();
static void BGThreadWrapper(void* arg) {
reinterpret_cast<ChromiumEnvStdio*>(arg)->BGThread();
}
void RecordOpenFilesLimit(const std::string& type);
};
} // namespace leveldb_env
#endif
......@@ -7,10 +7,7 @@
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/test/test_suite.h"
#include "env_chromium_stdio.h"
#if defined(OS_WIN)
#include "env_chromium_win.h"
#endif
#include "env_chromium.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/leveldatabase/env_idb.h"
#include "third_party/leveldatabase/src/include/leveldb/db.h"
......@@ -57,21 +54,6 @@ TEST(ErrorEncoding, Errno) {
EXPECT_EQ(some_errno, error);
}
#if defined(OS_WIN)
TEST(ErrorEncoding, ErrnoWin32) {
const MethodID in_method = kWritableFileFlush;
const DWORD some_errno = ERROR_FILE_NOT_FOUND;
const Status s =
MakeIOErrorWin("Somefile.txt", "message", in_method, some_errno);
MethodID method;
int error;
EXPECT_EQ(METHOD_AND_ERRNO,
ParseMethodAndError(s.ToString().c_str(), &method, &error));
EXPECT_EQ(in_method, method);
EXPECT_EQ(some_errno, error);
}
#endif
TEST(ErrorEncoding, NoEncodedMessage) {
Status s = Status::IOError("Some message", "from leveldb itself");
MethodID method = kRandomAccessFileRead;
......@@ -81,8 +63,7 @@ TEST(ErrorEncoding, NoEncodedMessage) {
EXPECT_EQ(4, error);
}
template <typename T>
class MyEnv : public T {
class MyEnv : public ChromiumEnv {
public:
MyEnv() : directory_syncs_(0) {}
int directory_syncs() { return directory_syncs_; }
......@@ -97,21 +78,8 @@ class MyEnv : public T {
int directory_syncs_;
};
template <typename T>
class ChromiumEnvMultiPlatformTests : public ::testing::Test {
public:
};
#if defined(OS_WIN)
typedef ::testing::Types<ChromiumEnvStdio, ChromiumEnvWin> ChromiumEnvMultiPlatformTestsTypes;
#else
typedef ::testing::Types<ChromiumEnvStdio> ChromiumEnvMultiPlatformTestsTypes;
#endif
TYPED_TEST_CASE(ChromiumEnvMultiPlatformTests, ChromiumEnvMultiPlatformTestsTypes);
TYPED_TEST(ChromiumEnvMultiPlatformTests, DirectorySyncing) {
MyEnv<TypeParam> env;
TEST(ChromiumEnv, DirectorySyncing) {
MyEnv env;
base::ScopedTempDir dir;
dir.CreateUniqueTempDir();
base::FilePath dir_path = dir.path();
......
This diff is collapsed.
// Copyright (c) 2013 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
#ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_
#define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_WIN_H_
#include "env_chromium.h"
namespace leveldb_env {
leveldb::Status MakeIOErrorWin(leveldb::Slice filename,
const std::string& message,
MethodID method,
DWORD err);
class ChromiumWritableFileWin : public leveldb::WritableFile {
public:
ChromiumWritableFileWin(const std::string& fname,
HANDLE f,
const UMALogger* uma_logger,
WriteTracker* tracker,
bool make_backup);
virtual ~ChromiumWritableFileWin();
virtual leveldb::Status Append(const leveldb::Slice& data);
virtual leveldb::Status Close();
virtual leveldb::Status Flush();
virtual leveldb::Status Sync();
private:
enum Type {
kManifest,
kTable,
kOther
};
leveldb::Status SyncParent();
std::string filename_;
HANDLE file_;
const UMALogger* uma_logger_;
WriteTracker* tracker_;
Type file_type_;
std::string parent_dir_;
bool make_backup_;
};
class ChromiumEnvWin : public ChromiumEnv {
public:
ChromiumEnvWin();
virtual ~ChromiumEnvWin();
virtual leveldb::Status NewSequentialFile(const std::string& fname,
leveldb::SequentialFile** result);
virtual leveldb::Status NewRandomAccessFile(
const std::string& fname,
leveldb::RandomAccessFile** result);
virtual leveldb::Status NewWritableFile(const std::string& fname,
leveldb::WritableFile** result);
virtual leveldb::Status NewLogger(const std::string& fname,
leveldb::Logger** result);
protected:
virtual base::PlatformFileError GetDirectoryEntries(
const base::FilePath& dir_param,
std::vector<base::FilePath>* result) const;
private:
// BGThread() is the body of the background thread
void BGThread();
static void BGThreadWrapper(void* arg) {
reinterpret_cast<ChromiumEnvWin*>(arg)->BGThread();
}
void RecordOpenFilesLimit(const std::string& type);
virtual void RecordOSError(MethodID method, DWORD err) const;
};
} // namespace leveldb_env
#endif
......@@ -49,12 +49,6 @@
'../../third_party/snappy/snappy.gyp:snappy',
],
}],
['OS=="win"', {
'sources': [
'env_chromium_win.cc',
'env_chromium_win.h',
],
}],
],
'direct_dependent_settings': {
'include_dirs': [
......@@ -78,8 +72,6 @@
# they don't build.
'env_chromium.cc',
'env_chromium.h',
'env_chromium_stdio.cc',
'env_chromium_stdio.h',
'env_idb.h',
'port/port_chromium.cc',
'port/port_chromium.h',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment