]>
git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/env/mock_env.h
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
6 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style license that can be
8 // found in the LICENSE file. See the AUTHORS file for names of contributors.
16 #include "env/composite_env_wrapper.h"
17 #include "port/port.h"
18 #include "rocksdb/env.h"
19 #include "rocksdb/status.h"
20 #include "rocksdb/system_clock.h"
22 namespace ROCKSDB_NAMESPACE
{
24 class MockFileSystem
: public FileSystem
{
26 explicit MockFileSystem(const std::shared_ptr
<SystemClock
>& clock
,
27 bool supports_direct_io
= true);
28 ~MockFileSystem() override
;
30 static const char* kClassName() { return "MemoryFileSystem"; }
31 const char* Name() const override
{ return kClassName(); }
32 IOStatus
NewSequentialFile(const std::string
& f
, const FileOptions
& file_opts
,
33 std::unique_ptr
<FSSequentialFile
>* r
,
34 IODebugContext
* dbg
) override
;
35 IOStatus
NewRandomAccessFile(const std::string
& f
,
36 const FileOptions
& file_opts
,
37 std::unique_ptr
<FSRandomAccessFile
>* r
,
38 IODebugContext
* dbg
) override
;
40 IOStatus
NewRandomRWFile(const std::string
& fname
,
41 const FileOptions
& file_opts
,
42 std::unique_ptr
<FSRandomRWFile
>* result
,
43 IODebugContext
* dbg
) override
;
44 IOStatus
ReuseWritableFile(const std::string
& fname
,
45 const std::string
& old_fname
,
46 const FileOptions
& file_opts
,
47 std::unique_ptr
<FSWritableFile
>* result
,
48 IODebugContext
* dbg
) override
;
49 IOStatus
NewWritableFile(const std::string
& fname
,
50 const FileOptions
& file_opts
,
51 std::unique_ptr
<FSWritableFile
>* result
,
52 IODebugContext
* dbg
) override
;
53 IOStatus
ReopenWritableFile(const std::string
& fname
,
54 const FileOptions
& options
,
55 std::unique_ptr
<FSWritableFile
>* result
,
56 IODebugContext
* dbg
) override
;
57 IOStatus
NewDirectory(const std::string
& /*name*/, const IOOptions
& io_opts
,
58 std::unique_ptr
<FSDirectory
>* result
,
59 IODebugContext
* dbg
) override
;
60 IOStatus
FileExists(const std::string
& fname
, const IOOptions
& /*io_opts*/,
61 IODebugContext
* /*dbg*/) override
;
62 IOStatus
GetChildren(const std::string
& dir
, const IOOptions
& options
,
63 std::vector
<std::string
>* result
,
64 IODebugContext
* dbg
) override
;
65 IOStatus
DeleteFile(const std::string
& fname
, const IOOptions
& options
,
66 IODebugContext
* dbg
) override
;
67 IOStatus
Truncate(const std::string
& fname
, size_t size
,
68 const IOOptions
& options
, IODebugContext
* dbg
) override
;
69 IOStatus
CreateDir(const std::string
& dirname
, const IOOptions
& options
,
70 IODebugContext
* dbg
) override
;
71 IOStatus
CreateDirIfMissing(const std::string
& dirname
,
72 const IOOptions
& options
,
73 IODebugContext
* dbg
) override
;
74 IOStatus
DeleteDir(const std::string
& dirname
, const IOOptions
& options
,
75 IODebugContext
* dbg
) override
;
77 IOStatus
GetFileSize(const std::string
& fname
, const IOOptions
& options
,
78 uint64_t* file_size
, IODebugContext
* dbg
) override
;
80 IOStatus
GetFileModificationTime(const std::string
& fname
,
81 const IOOptions
& options
,
83 IODebugContext
* dbg
) override
;
84 IOStatus
RenameFile(const std::string
& src
, const std::string
& target
,
85 const IOOptions
& options
, IODebugContext
* dbg
) override
;
86 IOStatus
LinkFile(const std::string
& /*src*/, const std::string
& /*target*/,
87 const IOOptions
& /*options*/,
88 IODebugContext
* /*dbg*/) override
;
89 IOStatus
LockFile(const std::string
& fname
, const IOOptions
& options
,
90 FileLock
** lock
, IODebugContext
* dbg
) override
;
91 IOStatus
UnlockFile(FileLock
* lock
, const IOOptions
& options
,
92 IODebugContext
* dbg
) override
;
93 IOStatus
GetTestDirectory(const IOOptions
& options
, std::string
* path
,
94 IODebugContext
* dbg
) override
;
95 IOStatus
NewLogger(const std::string
& fname
, const IOOptions
& io_opts
,
96 std::shared_ptr
<Logger
>* result
,
97 IODebugContext
* dbg
) override
;
98 // Get full directory name for this db.
99 IOStatus
GetAbsolutePath(const std::string
& db_path
,
100 const IOOptions
& /*options*/,
101 std::string
* output_path
,
102 IODebugContext
* /*dbg*/) override
;
103 IOStatus
IsDirectory(const std::string
& /*path*/,
104 const IOOptions
& /*options*/, bool* /*is_dir*/,
105 IODebugContext
* /*dgb*/) override
{
106 return IOStatus::NotSupported("IsDirectory");
109 Status
CorruptBuffer(const std::string
& fname
);
110 Status
PrepareOptions(const ConfigOptions
& options
) override
;
113 bool RenameFileInternal(const std::string
& src
, const std::string
& dest
);
114 void DeleteFileInternal(const std::string
& fname
);
115 bool GetChildrenInternal(const std::string
& fname
,
116 std::vector
<std::string
>* results
);
118 std::string
NormalizeMockPath(const std::string
& path
);
121 // Map from filenames to MemFile objects, representing a simple file system.
123 std::map
<std::string
, MemFile
*> file_map_
; // Protected by mutex_.
124 std::shared_ptr
<SystemClock
> system_clock_
;
126 bool supports_direct_io_
;
129 class MockEnv
: public CompositeEnvWrapper
{
131 static MockEnv
* Create(Env
* base
);
132 static MockEnv
* Create(Env
* base
, const std::shared_ptr
<SystemClock
>& clock
);
134 static const char* kClassName() { return "MockEnv"; }
135 const char* Name() const override
{ return kClassName(); }
137 Status
CorruptBuffer(const std::string
& fname
);
140 MockEnv(Env
* env
, const std::shared_ptr
<FileSystem
>& fs
,
141 const std::shared_ptr
<SystemClock
>& clock
);
144 } // namespace ROCKSDB_NAMESPACE