#pragma once
+#include <chrono>
#include <memory>
#include <string>
#include <unordered_map>
};
struct FileOperationInfo {
+ using TimePoint = std::chrono::time_point<std::chrono::system_clock,
+ std::chrono::nanoseconds>;
+
const std::string& path;
uint64_t offset;
size_t length;
- time_t start_timestamp;
- time_t finish_timestamp;
+ const TimePoint& start_timestamp;
+ const TimePoint& finish_timestamp;
Status status;
- FileOperationInfo(const std::string& _path) : path(_path) {}
+ FileOperationInfo(const std::string& _path, const TimePoint& start,
+ const TimePoint& finish)
+ : path(_path), start_timestamp(start), finish_timestamp(finish) {}
};
struct FlushJobInfo {
}
Slice tmp;
- time_t start_ts = 0;
+ FileOperationInfo::TimePoint start_ts;
uint64_t orig_offset = 0;
if (ShouldNotifyListeners()) {
- start_ts = std::chrono::system_clock::to_time_t(
- std::chrono::system_clock::now());
+ start_ts = std::chrono::system_clock::now();
orig_offset = aligned_offset + buf.CurrentSize();
}
s = file_->Read(aligned_offset + buf.CurrentSize(), allowed, &tmp,
buf.Destination());
if (ShouldNotifyListeners()) {
- NotifyOnFileReadFinish(orig_offset, tmp.size(), start_ts, s);
+ auto finish_ts = std::chrono::system_clock::now();
+ NotifyOnFileReadFinish(orig_offset, tmp.size(), start_ts, finish_ts,
+ s);
}
buf.Size(buf.CurrentSize() + tmp.size());
Slice tmp_result;
#ifndef ROCKSDB_LITE
- time_t start_ts = 0;
+ FileOperationInfo::TimePoint start_ts;
if (ShouldNotifyListeners()) {
- start_ts = std::chrono::system_clock::to_time_t(
- std::chrono::system_clock::now());
+ start_ts = std::chrono::system_clock::now();
}
#endif
s = file_->Read(offset + pos, allowed, &tmp_result, scratch + pos);
#ifndef ROCKSDB_LITE
if (ShouldNotifyListeners()) {
- NotifyOnFileReadFinish(offset + pos, tmp_result.size(), start_ts, s);
+ auto finish_ts = std::chrono::system_clock::now();
+ NotifyOnFileReadFinish(offset + pos, tmp_result.size(), start_ts,
+ finish_ts, s);
}
#endif
TEST_SYNC_POINT("WritableFileWriter::Flush:BeforeAppend");
#ifndef ROCKSDB_LITE
- time_t start_ts = 0;
+ FileOperationInfo::TimePoint start_ts;
uint64_t old_size = writable_file_->GetFileSize();
if (ShouldNotifyListeners()) {
- start_ts = std::chrono::system_clock::to_time_t(
- std::chrono::system_clock::now());
+ start_ts = std::chrono::system_clock::now();
old_size = next_write_offset_;
}
#endif
s = writable_file_->Append(Slice(src, allowed));
#ifndef ROCKSDB_LITE
if (ShouldNotifyListeners()) {
- NotifyOnFileWriteFinish(old_size, allowed, start_ts, s);
+ auto finish_ts = std::chrono::system_clock::now();
+ NotifyOnFileWriteFinish(old_size, allowed, start_ts, finish_ts, s);
}
#endif
if (!s.ok()) {
{
IOSTATS_TIMER_GUARD(write_nanos);
TEST_SYNC_POINT("WritableFileWriter::Flush:BeforeAppend");
- time_t start_ts(0);
+ FileOperationInfo::TimePoint start_ts;
if (ShouldNotifyListeners()) {
- start_ts = std::chrono::system_clock::to_time_t(
- std::chrono::system_clock::now());
+ start_ts = std::chrono::system_clock::now();
}
// direct writes must be positional
s = writable_file_->PositionedAppend(Slice(src, size), write_offset);
if (ShouldNotifyListeners()) {
- NotifyOnFileWriteFinish(write_offset, size, start_ts, s);
+ auto finish_ts = std::chrono::system_clock::now();
+ NotifyOnFileWriteFinish(write_offset, size, start_ts, finish_ts, s);
}
if (!s.ok()) {
buf_.Size(file_advance + leftover_tail);
class RandomAccessFileReader {
private:
#ifndef ROCKSDB_LITE
- void NotifyOnFileReadFinish(uint64_t offset, size_t length, time_t start_ts,
+ void NotifyOnFileReadFinish(uint64_t offset, size_t length,
+ const FileOperationInfo::TimePoint& start_ts,
+ const FileOperationInfo::TimePoint& finish_ts,
const Status& status) const {
- FileOperationInfo info(file_name_);
+ FileOperationInfo info(file_name_, start_ts, finish_ts);
info.offset = offset;
info.length = length;
- info.start_timestamp = start_ts;
- time_t finish_ts =
- std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
- info.finish_timestamp = finish_ts;
info.status = status;
for (auto& listener : listeners_) {
class WritableFileWriter {
private:
#ifndef ROCKSDB_LITE
- void NotifyOnFileWriteFinish(uint64_t offset, size_t length, time_t start_ts,
+ void NotifyOnFileWriteFinish(uint64_t offset, size_t length,
+ const FileOperationInfo::TimePoint& start_ts,
+ const FileOperationInfo::TimePoint& finish_ts,
const Status& status) {
- FileOperationInfo info(file_name_);
+ FileOperationInfo info(file_name_, start_ts, finish_ts);
info.offset = offset;
info.length = length;
- info.start_timestamp = start_ts;
- time_t finish_ts =
- std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
- info.finish_timestamp = finish_ts;
info.status = status;
for (auto& listener : listeners_) {