sync_point.cc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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).
  5. #include "test_util/sync_point.h"
  6. #include <fcntl.h>
  7. #include "test_util/sync_point_impl.h"
  8. std::vector<std::string> rocksdb_kill_exclude_prefixes;
  9. #ifndef NDEBUG
  10. namespace ROCKSDB_NAMESPACE {
  11. SyncPoint* SyncPoint::GetInstance() {
  12. static SyncPoint sync_point;
  13. return &sync_point;
  14. }
  15. SyncPoint::SyncPoint() : impl_(new Data) {}
  16. SyncPoint::~SyncPoint() { delete impl_; }
  17. void SyncPoint::LoadDependency(const std::vector<SyncPointPair>& dependencies) {
  18. impl_->LoadDependency(dependencies);
  19. }
  20. void SyncPoint::LoadDependencyAndMarkers(
  21. const std::vector<SyncPointPair>& dependencies,
  22. const std::vector<SyncPointPair>& markers) {
  23. impl_->LoadDependencyAndMarkers(dependencies, markers);
  24. }
  25. void SyncPoint::SetCallBack(const std::string& point,
  26. const std::function<void(void*)>& callback) {
  27. impl_->SetCallBack(point, callback);
  28. }
  29. void SyncPoint::ClearCallBack(const std::string& point) {
  30. impl_->ClearCallBack(point);
  31. }
  32. void SyncPoint::ClearAllCallBacks() { impl_->ClearAllCallBacks(); }
  33. void SyncPoint::EnableProcessing() { impl_->EnableProcessing(); }
  34. void SyncPoint::DisableProcessing() { impl_->DisableProcessing(); }
  35. void SyncPoint::ClearTrace() { impl_->ClearTrace(); }
  36. void SyncPoint::Process(const Slice& point, void* cb_arg) {
  37. impl_->Process(point, cb_arg);
  38. }
  39. } // namespace ROCKSDB_NAMESPACE
  40. #endif // NDEBUG
  41. namespace ROCKSDB_NAMESPACE {
  42. void SetupSyncPointsToMockDirectIO() {
  43. #if !defined(NDEBUG) && !defined(OS_MACOSX) && !defined(OS_WIN) && \
  44. !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD)
  45. ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
  46. "NewWritableFile:O_DIRECT", [&](void* arg) {
  47. int* val = static_cast<int*>(arg);
  48. *val &= ~O_DIRECT;
  49. });
  50. ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
  51. "NewRandomAccessFile:O_DIRECT", [&](void* arg) {
  52. int* val = static_cast<int*>(arg);
  53. *val &= ~O_DIRECT;
  54. });
  55. ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
  56. "NewSequentialFile:O_DIRECT", [&](void* arg) {
  57. int* val = static_cast<int*>(arg);
  58. *val &= ~O_DIRECT;
  59. });
  60. ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
  61. #endif
  62. }
  63. } // namespace ROCKSDB_NAMESPACE