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.
6 #include "db/event_helpers.h"
12 inline T
SafeDivide(T a
, T b
) {
13 return b
== 0 ? 0 : a
/ b
;
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();
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
;
34 for (auto& listener
: listeners
) {
35 listener
->OnTableFileCreationStarted(info
);
38 #endif // !ROCKSDB_LITE
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
,
47 if (s
.ok() && event_logger
) {
49 AppendCurrentTime(&jwriter
);
50 jwriter
<< "cf_name" << cf_name
<< "job" << job_id
<< "event"
51 << "table_file_creation"
52 << "file_number" << fd
.GetNumber() << "file_size"
57 jwriter
<< "table_properties";
58 jwriter
.StartObject();
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
;
75 // user collected properties
76 for (const auto& prop
: table_properties
.readable_properties
) {
77 jwriter
<< prop
.first
<< prop
.second
;
83 event_logger
->Log(jwriter
);
87 if (listeners
.size() == 0) {
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
;
96 info
.table_properties
= table_properties
;
99 for (auto& listener
: listeners
) {
100 listener
->OnTableFileCreated(info
);
102 #endif // !ROCKSDB_LITE
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
) {
112 AppendCurrentTime(&jwriter
);
114 jwriter
<< "job" << job_id
115 << "event" << "table_file_deletion"
116 << "file_number" << file_number
;
118 jwriter
<< "status" << status
.ToString();
123 event_logger
->Log(jwriter
);
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
);
134 #endif // !ROCKSDB_LITE
137 } // namespace rocksdb