]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/util/sync_point_impl.h
bump version to 15.2.11-pve1
[ceph.git] / ceph / src / rocksdb / util / sync_point_impl.h
CommitLineData
11fdf7f2
TL
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
6#include "util/sync_point.h"
7
8#include <assert.h>
9#include <atomic>
10#include <condition_variable>
11#include <functional>
12#include <mutex>
13#include <string>
14#include <thread>
15#include <unordered_map>
16#include <unordered_set>
17
18#include "port/port.h"
19#include "util/random.h"
20
21#pragma once
22
23#ifndef NDEBUG
24namespace rocksdb {
25struct SyncPoint::Data {
26 Data() : enabled_(false) {}
27 // Enable proper deletion by subclasses
28 virtual ~Data() {}
29 // successor/predecessor map loaded from LoadDependency
30 std::unordered_map<std::string, std::vector<std::string>> successors_;
31 std::unordered_map<std::string, std::vector<std::string>> predecessors_;
32 std::unordered_map<std::string, std::function<void(void*)> > callbacks_;
33 std::unordered_map<std::string, std::vector<std::string> > markers_;
34 std::unordered_map<std::string, std::thread::id> marked_thread_id_;
35
36 std::mutex mutex_;
37 std::condition_variable cv_;
38 // sync points that have been passed through
39 std::unordered_set<std::string> cleared_points_;
40 std::atomic<bool> enabled_;
41 int num_callbacks_running_ = 0;
42
43 void LoadDependency(const std::vector<SyncPointPair>& dependencies);
44 void LoadDependencyAndMarkers(const std::vector<SyncPointPair>& dependencies,
45 const std::vector<SyncPointPair>& markers);
46 bool PredecessorsAllCleared(const std::string& point);
47 void SetCallBack(const std::string& point,
48 const std::function<void(void*)>& callback) {
49 std::lock_guard<std::mutex> lock(mutex_);
50 callbacks_[point] = callback;
51}
52
53 void ClearCallBack(const std::string& point);
54 void ClearAllCallBacks();
55 void EnableProcessing() {
56 enabled_ = true;
57 }
58 void DisableProcessing() {
59 enabled_ = false;
60 }
61 void ClearTrace() {
62 std::lock_guard<std::mutex> lock(mutex_);
63 cleared_points_.clear();
64 }
65 bool DisabledByMarker(const std::string& point,
66 std::thread::id thread_id) {
67 auto marked_point_iter = marked_thread_id_.find(point);
68 return marked_point_iter != marked_thread_id_.end() &&
69 thread_id != marked_point_iter->second;
70 }
71 void Process(const std::string& point, void* cb_arg);
72};
73}
74#endif // NDEBUG