]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/db/event_helpers.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / rocksdb / db / event_helpers.cc
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under the BSD-style license found in the
3 // LICENSE file in the root directory of this source tree. An additional grant
4 // of patent rights can be found in the PATENTS file in the same directory.
5
6 #include "db/event_helpers.h"
7
8 namespace rocksdb {
9
10 namespace {
11 template<class T>
12 inline T SafeDivide(T a, T b) {
13 return b == 0 ? 0 : a / b;
14 }
15 } // namespace
16
17 void EventHelpers::AppendCurrentTime(JSONWriter* jwriter) {
18 *jwriter << "time_micros"
19 << std::chrono::duration_cast<std::chrono::microseconds>(
20 std::chrono::system_clock::now().time_since_epoch()).count();
21 }
22
23 #ifndef ROCKSDB_LITE
24 void EventHelpers::NotifyTableFileCreationStarted(
25 const std::vector<std::shared_ptr<EventListener>>& listeners,
26 const std::string& db_name, const std::string& cf_name,
27 const std::string& file_path, int job_id, TableFileCreationReason reason) {
28 TableFileCreationBriefInfo info;
29 info.db_name = db_name;
30 info.cf_name = cf_name;
31 info.file_path = file_path;
32 info.job_id = job_id;
33 info.reason = reason;
34 for (auto& listener : listeners) {
35 listener->OnTableFileCreationStarted(info);
36 }
37 }
38 #endif // !ROCKSDB_LITE
39
40 void EventHelpers::LogAndNotifyTableFileCreationFinished(
41 EventLogger* event_logger,
42 const std::vector<std::shared_ptr<EventListener>>& listeners,
43 const std::string& db_name, const std::string& cf_name,
44 const std::string& file_path, int job_id, const FileDescriptor& fd,
45 const TableProperties& table_properties, TableFileCreationReason reason,
46 const Status& s) {
47 if (s.ok() && event_logger) {
48 JSONWriter jwriter;
49 AppendCurrentTime(&jwriter);
50 jwriter << "cf_name" << cf_name << "job" << job_id << "event"
51 << "table_file_creation"
52 << "file_number" << fd.GetNumber() << "file_size"
53 << fd.GetFileSize();
54
55 // table_properties
56 {
57 jwriter << "table_properties";
58 jwriter.StartObject();
59
60 // basic properties:
61 jwriter << "data_size" << table_properties.data_size << "index_size"
62 << table_properties.index_size << "filter_size"
63 << table_properties.filter_size << "raw_key_size"
64 << table_properties.raw_key_size << "raw_average_key_size"
65 << SafeDivide(table_properties.raw_key_size,
66 table_properties.num_entries)
67 << "raw_value_size" << table_properties.raw_value_size
68 << "raw_average_value_size"
69 << SafeDivide(table_properties.raw_value_size,
70 table_properties.num_entries)
71 << "num_data_blocks" << table_properties.num_data_blocks
72 << "num_entries" << table_properties.num_entries
73 << "filter_policy_name" << table_properties.filter_policy_name;
74
75 // user collected properties
76 for (const auto& prop : table_properties.readable_properties) {
77 jwriter << prop.first << prop.second;
78 }
79 jwriter.EndObject();
80 }
81 jwriter.EndObject();
82
83 event_logger->Log(jwriter);
84 }
85
86 #ifndef ROCKSDB_LITE
87 if (listeners.size() == 0) {
88 return;
89 }
90 TableFileCreationInfo info;
91 info.db_name = db_name;
92 info.cf_name = cf_name;
93 info.file_path = file_path;
94 info.file_size = fd.file_size;
95 info.job_id = job_id;
96 info.table_properties = table_properties;
97 info.reason = reason;
98 info.status = s;
99 for (auto& listener : listeners) {
100 listener->OnTableFileCreated(info);
101 }
102 #endif // !ROCKSDB_LITE
103 }
104
105 void EventHelpers::LogAndNotifyTableFileDeletion(
106 EventLogger* event_logger, int job_id,
107 uint64_t file_number, const std::string& file_path,
108 const Status& status, const std::string& dbname,
109 const std::vector<std::shared_ptr<EventListener>>& listeners) {
110
111 JSONWriter jwriter;
112 AppendCurrentTime(&jwriter);
113
114 jwriter << "job" << job_id
115 << "event" << "table_file_deletion"
116 << "file_number" << file_number;
117 if (!status.ok()) {
118 jwriter << "status" << status.ToString();
119 }
120
121 jwriter.EndObject();
122
123 event_logger->Log(jwriter);
124
125 #ifndef ROCKSDB_LITE
126 TableFileDeletionInfo info;
127 info.db_name = dbname;
128 info.job_id = job_id;
129 info.file_path = file_path;
130 info.status = status;
131 for (auto& listener : listeners) {
132 listener->OnTableFileDeleted(info);
133 }
134 #endif // !ROCKSDB_LITE
135 }
136
137 } // namespace rocksdb