leveldb
Public Member Functions | Private Attributes | List of all members
leveldb::FaultInjectionTestEnv Class Reference
Inheritance diagram for leveldb::FaultInjectionTestEnv:
Inheritance graph
[legend]
Collaboration diagram for leveldb::FaultInjectionTestEnv:
Collaboration graph
[legend]

Public Member Functions

 FaultInjectionTestEnv ()
 
virtual ~FaultInjectionTestEnv ()
 
virtual Status NewWritableFile (const std::string &fname, WritableFile **result)
 
virtual Status NewAppendableFile (const std::string &fname, WritableFile **result)
 
virtual Status DeleteFile (const std::string &f)
 
virtual Status RenameFile (const std::string &s, const std::string &t)
 
void WritableFileClosed (const FileState &state)
 
Status DropUnsyncedFileData ()
 
Status DeleteFilesCreatedAfterLastDirSync ()
 
void DirWasSynced ()
 
bool IsFileCreatedSinceLastDirSync (const std::string &filename)
 
void ResetState ()
 
void UntrackFile (const std::string &f)
 
bool IsFilesystemActive () const
 
void SetFilesystemActive (bool active)
 
- Public Member Functions inherited from leveldb::EnvWrapper
 EnvWrapper (Env *t)
 
virtual ~EnvWrapper ()
 
Envtarget () const
 
Status NewSequentialFile (const std::string &f, SequentialFile **r)
 
Status NewRandomAccessFile (const std::string &f, RandomAccessFile **r)
 
Status NewWritableFile (const std::string &f, WritableFile **r)
 
Status NewAppendableFile (const std::string &f, WritableFile **r)
 
bool FileExists (const std::string &f)
 
Status GetChildren (const std::string &dir, std::vector< std::string > *r)
 
Status DeleteFile (const std::string &f)
 
Status CreateDir (const std::string &d)
 
Status DeleteDir (const std::string &d)
 
Status GetFileSize (const std::string &f, uint64_t *s)
 
Status RenameFile (const std::string &s, const std::string &t)
 
Status LockFile (const std::string &f, FileLock **l)
 
Status UnlockFile (FileLock *l)
 
void Schedule (void(*f)(void *), void *a)
 
void StartThread (void(*f)(void *), void *a)
 
virtual Status GetTestDirectory (std::string *path)
 
virtual Status NewLogger (const std::string &fname, Logger **result)
 
uint64_t NowMicros ()
 
void SleepForMicroseconds (int micros)
 
- Public Member Functions inherited from leveldb::Env
 Env ()
 
virtual ~Env ()
 
virtual void Schedule (void(*function)(void *arg), void *arg)=0
 
virtual void StartThread (void(*function)(void *arg), void *arg)=0
 

Private Attributes

port::Mutex mutex_
 
std::map< std::string, FileState > db_file_state_
 
std::set< std::string > new_files_since_last_dir_sync_
 
bool filesystem_active_
 

Additional Inherited Members

- Static Public Member Functions inherited from leveldb::Env
static EnvDefault ()
 

Detailed Description

Definition at line 127 of file fault_injection_test.cc.

Constructor & Destructor Documentation

§ FaultInjectionTestEnv()

leveldb::FaultInjectionTestEnv::FaultInjectionTestEnv ( )
inline

Definition at line 129 of file fault_injection_test.cc.

§ ~FaultInjectionTestEnv()

virtual leveldb::FaultInjectionTestEnv::~FaultInjectionTestEnv ( )
inlinevirtual

Definition at line 130 of file fault_injection_test.cc.

130 { }
Here is the call graph for this function:

Member Function Documentation

§ DeleteFile()

Status leveldb::FaultInjectionTestEnv::DeleteFile ( const std::string &  f)
virtual

Implements leveldb::Env.

Definition at line 297 of file fault_injection_test.cc.

297  {
298  Status s = EnvWrapper::DeleteFile(f);
299  ASSERT_OK(s);
300  if (s.ok()) {
301  UntrackFile(f);
302  }
303  return s;
304 }
#define ASSERT_OK(s)
Definition: testharness.h:106
Status DeleteFile(const std::string &f)
Definition: env.h:314
void UntrackFile(const std::string &f)
Here is the call graph for this function:
Here is the caller graph for this function:

§ DeleteFilesCreatedAfterLastDirSync()

Status leveldb::FaultInjectionTestEnv::DeleteFilesCreatedAfterLastDirSync ( )

Definition at line 335 of file fault_injection_test.cc.

335  {
336  // Because DeleteFile access this container make a copy to avoid deadlock
337  mutex_.Lock();
338  std::set<std::string> new_files(new_files_since_last_dir_sync_.begin(),
340  mutex_.Unlock();
341  Status s;
342  std::set<std::string>::const_iterator it;
343  for (it = new_files.begin(); s.ok() && it != new_files.end(); ++it) {
344  s = DeleteFile(*it);
345  }
346  return s;
347 }
virtual Status DeleteFile(const std::string &f)
std::set< std::string > new_files_since_last_dir_sync_
Here is the call graph for this function:
Here is the caller graph for this function:

§ DirWasSynced()

void leveldb::FaultInjectionTestEnv::DirWasSynced ( )

Definition at line 279 of file fault_injection_test.cc.

279  {
280  MutexLock l(&mutex_);
282 }
std::set< std::string > new_files_since_last_dir_sync_
Here is the caller graph for this function:

§ DropUnsyncedFileData()

Status leveldb::FaultInjectionTestEnv::DropUnsyncedFileData ( )

Definition at line 265 of file fault_injection_test.cc.

265  {
266  Status s;
267  MutexLock l(&mutex_);
268  for (std::map<std::string, FileState>::const_iterator it =
269  db_file_state_.begin();
270  s.ok() && it != db_file_state_.end(); ++it) {
271  const FileState& state = it->second;
272  if (!state.IsFullySynced()) {
273  s = state.DropUnsyncedData();
274  }
275  }
276  return s;
277 }
std::map< std::string, FileState > db_file_state_
Here is the call graph for this function:
Here is the caller graph for this function:

§ IsFileCreatedSinceLastDirSync()

bool leveldb::FaultInjectionTestEnv::IsFileCreatedSinceLastDirSync ( const std::string &  filename)

Definition at line 284 of file fault_injection_test.cc.

285  {
286  MutexLock l(&mutex_);
287  return new_files_since_last_dir_sync_.find(filename) !=
289 }
std::set< std::string > new_files_since_last_dir_sync_
Here is the caller graph for this function:

§ IsFilesystemActive()

bool leveldb::FaultInjectionTestEnv::IsFilesystemActive ( ) const
inline

Definition at line 149 of file fault_injection_test.cc.

Here is the caller graph for this function:

§ NewAppendableFile()

Status leveldb::FaultInjectionTestEnv::NewAppendableFile ( const std::string &  fname,
WritableFile **  result 
)
virtual

Reimplemented from leveldb::Env.

Definition at line 245 of file fault_injection_test.cc.

246  {
247  WritableFile* actual_writable_file;
248  Status s = target()->NewAppendableFile(fname, &actual_writable_file);
249  if (s.ok()) {
250  FileState state(fname);
251  state.pos_ = 0;
252  {
253  MutexLock l(&mutex_);
254  if (db_file_state_.count(fname) == 0) {
255  new_files_since_last_dir_sync_.insert(fname);
256  } else {
257  state = db_file_state_[fname];
258  }
259  }
260  *result = new TestWritableFile(state, actual_writable_file, this);
261  }
262  return s;
263 }
virtual Status NewAppendableFile(const std::string &fname, WritableFile **result)
Definition: env.cc:12
std::map< std::string, FileState > db_file_state_
std::set< std::string > new_files_since_last_dir_sync_
Env * target() const
Definition: env.h:295
Here is the call graph for this function:
Here is the caller graph for this function:

§ NewWritableFile()

Status leveldb::FaultInjectionTestEnv::NewWritableFile ( const std::string &  fname,
WritableFile **  result 
)
virtual

Implements leveldb::Env.

Definition at line 227 of file fault_injection_test.cc.

228  {
229  WritableFile* actual_writable_file;
230  Status s = target()->NewWritableFile(fname, &actual_writable_file);
231  if (s.ok()) {
232  FileState state(fname);
233  state.pos_ = 0;
234  *result = new TestWritableFile(state, actual_writable_file, this);
235  // NewWritableFile doesn't append to files, so if the same file is
236  // opened again then it will be truncated - so forget our saved
237  // state.
238  UntrackFile(fname);
239  MutexLock l(&mutex_);
240  new_files_since_last_dir_sync_.insert(fname);
241  }
242  return s;
243 }
virtual Status NewWritableFile(const std::string &fname, WritableFile **result)=0
std::set< std::string > new_files_since_last_dir_sync_
void UntrackFile(const std::string &f)
Env * target() const
Definition: env.h:295
Here is the call graph for this function:
Here is the caller graph for this function:

§ RenameFile()

Status leveldb::FaultInjectionTestEnv::RenameFile ( const std::string &  s,
const std::string &  t 
)
virtual

Implements leveldb::Env.

Definition at line 306 of file fault_injection_test.cc.

307  {
308  Status ret = EnvWrapper::RenameFile(s, t);
309 
310  if (ret.ok()) {
311  MutexLock l(&mutex_);
312  if (db_file_state_.find(s) != db_file_state_.end()) {
314  db_file_state_.erase(s);
315  }
316 
317  if (new_files_since_last_dir_sync_.erase(s) != 0) {
318  assert(new_files_since_last_dir_sync_.find(t) ==
321  }
322  }
323 
324  return ret;
325 }
Status RenameFile(const std::string &s, const std::string &t)
Definition: env.h:320
std::map< std::string, FileState > db_file_state_
std::set< std::string > new_files_since_last_dir_sync_
Here is the call graph for this function:
Here is the caller graph for this function:

§ ResetState()

void leveldb::FaultInjectionTestEnv::ResetState ( )

Definition at line 327 of file fault_injection_test.cc.

327  {
328  // Since we are not destroying the database, the existing files
329  // should keep their recorded synced/flushed state. Therefore
330  // we do not reset db_file_state_ and new_files_since_last_dir_sync_.
331  MutexLock l(&mutex_);
332  SetFilesystemActive(true);
333 }
Here is the caller graph for this function:

§ SetFilesystemActive()

void leveldb::FaultInjectionTestEnv::SetFilesystemActive ( bool  active)
inline

Definition at line 150 of file fault_injection_test.cc.

Here is the caller graph for this function:

§ UntrackFile()

void leveldb::FaultInjectionTestEnv::UntrackFile ( const std::string &  f)

Definition at line 291 of file fault_injection_test.cc.

291  {
292  MutexLock l(&mutex_);
293  db_file_state_.erase(f);
295 }
std::map< std::string, FileState > db_file_state_
std::set< std::string > new_files_since_last_dir_sync_
Here is the caller graph for this function:

§ WritableFileClosed()

void leveldb::FaultInjectionTestEnv::WritableFileClosed ( const FileState &  state)

Definition at line 349 of file fault_injection_test.cc.

349  {
350  MutexLock l(&mutex_);
351  db_file_state_[state.filename_] = state;
352 }
std::map< std::string, FileState > db_file_state_
Here is the caller graph for this function:

Member Data Documentation

§ db_file_state_

std::map<std::string, FileState> leveldb::FaultInjectionTestEnv::db_file_state_
private

Definition at line 154 of file fault_injection_test.cc.

§ filesystem_active_

bool leveldb::FaultInjectionTestEnv::filesystem_active_
private

Definition at line 156 of file fault_injection_test.cc.

§ mutex_

port::Mutex leveldb::FaultInjectionTestEnv::mutex_
private

Definition at line 153 of file fault_injection_test.cc.

§ new_files_since_last_dir_sync_

std::set<std::string> leveldb::FaultInjectionTestEnv::new_files_since_last_dir_sync_
private

Definition at line 155 of file fault_injection_test.cc.


The documentation for this class was generated from the following file: