summaryrefslogtreecommitdiffstats
path: root/src/rocksdb/trace_replay/trace_record_result.cc
blob: 9c0cb43ad9c6cafdb48fc5d746dd75749bc0fc43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
//  This source code is licensed under both the GPLv2 (found in the
//  COPYING file in the root directory) and Apache 2.0 License
//  (found in the LICENSE.Apache file in the root directory).

#include "rocksdb/trace_record_result.h"

namespace ROCKSDB_NAMESPACE {

// TraceRecordResult
TraceRecordResult::TraceRecordResult(TraceType trace_type)
    : trace_type_(trace_type) {}

TraceType TraceRecordResult::GetTraceType() const { return trace_type_; }

// TraceExecutionResult
TraceExecutionResult::TraceExecutionResult(uint64_t start_timestamp,
                                           uint64_t end_timestamp,
                                           TraceType trace_type)
    : TraceRecordResult(trace_type),
      ts_start_(start_timestamp),
      ts_end_(end_timestamp) {
  assert(ts_start_ <= ts_end_);
}

uint64_t TraceExecutionResult::GetStartTimestamp() const { return ts_start_; }

uint64_t TraceExecutionResult::GetEndTimestamp() const { return ts_end_; }

// StatusOnlyTraceExecutionResult
StatusOnlyTraceExecutionResult::StatusOnlyTraceExecutionResult(
    Status status, uint64_t start_timestamp, uint64_t end_timestamp,
    TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      status_(std::move(status)) {}

const Status& StatusOnlyTraceExecutionResult::GetStatus() const {
  return status_;
}

Status StatusOnlyTraceExecutionResult::Accept(Handler* handler) {
  assert(handler != nullptr);
  return handler->Handle(*this);
}

// SingleValueTraceExecutionResult
SingleValueTraceExecutionResult::SingleValueTraceExecutionResult(
    Status status, const std::string& value, uint64_t start_timestamp,
    uint64_t end_timestamp, TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      status_(std::move(status)),
      value_(value) {}

SingleValueTraceExecutionResult::SingleValueTraceExecutionResult(
    Status status, std::string&& value, uint64_t start_timestamp,
    uint64_t end_timestamp, TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      status_(std::move(status)),
      value_(std::move(value)) {}

SingleValueTraceExecutionResult::~SingleValueTraceExecutionResult() {
  value_.clear();
}

const Status& SingleValueTraceExecutionResult::GetStatus() const {
  return status_;
}

const std::string& SingleValueTraceExecutionResult::GetValue() const {
  return value_;
}

Status SingleValueTraceExecutionResult::Accept(Handler* handler) {
  assert(handler != nullptr);
  return handler->Handle(*this);
}

// MultiValuesTraceExecutionResult
MultiValuesTraceExecutionResult::MultiValuesTraceExecutionResult(
    std::vector<Status> multi_status, std::vector<std::string> values,
    uint64_t start_timestamp, uint64_t end_timestamp, TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      multi_status_(std::move(multi_status)),
      values_(std::move(values)) {}

MultiValuesTraceExecutionResult::~MultiValuesTraceExecutionResult() {
  multi_status_.clear();
  values_.clear();
}

const std::vector<Status>& MultiValuesTraceExecutionResult::GetMultiStatus()
    const {
  return multi_status_;
}

const std::vector<std::string>& MultiValuesTraceExecutionResult::GetValues()
    const {
  return values_;
}

Status MultiValuesTraceExecutionResult::Accept(Handler* handler) {
  assert(handler != nullptr);
  return handler->Handle(*this);
}

// IteratorTraceExecutionResult
IteratorTraceExecutionResult::IteratorTraceExecutionResult(
    bool valid, Status status, PinnableSlice&& key, PinnableSlice&& value,
    uint64_t start_timestamp, uint64_t end_timestamp, TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      valid_(valid),
      status_(std::move(status)),
      key_(std::move(key)),
      value_(std::move(value)) {}

IteratorTraceExecutionResult::IteratorTraceExecutionResult(
    bool valid, Status status, const std::string& key, const std::string& value,
    uint64_t start_timestamp, uint64_t end_timestamp, TraceType trace_type)
    : TraceExecutionResult(start_timestamp, end_timestamp, trace_type),
      valid_(valid),
      status_(std::move(status)) {
  key_.PinSelf(key);
  value_.PinSelf(value);
}

IteratorTraceExecutionResult::~IteratorTraceExecutionResult() {
  key_.clear();
  value_.clear();
}

bool IteratorTraceExecutionResult::GetValid() const { return valid_; }

const Status& IteratorTraceExecutionResult::GetStatus() const {
  return status_;
}

Slice IteratorTraceExecutionResult::GetKey() const { return Slice(key_); }

Slice IteratorTraceExecutionResult::GetValue() const { return Slice(value_); }

Status IteratorTraceExecutionResult::Accept(Handler* handler) {
  assert(handler != nullptr);
  return handler->Handle(*this);
}

}  // namespace ROCKSDB_NAMESPACE