YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/Users/deen/code/yugabyte-db/src/yb/docdb/transaction_dump.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) YugaByte, Inc.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
4
// in compliance with the License.  You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software distributed under the License
9
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
10
// or implied.  See the License for the specific language governing permissions and limitations
11
// under the License.
12
//
13
14
#ifndef YB_DOCDB_TRANSACTION_DUMP_H
15
#define YB_DOCDB_TRANSACTION_DUMP_H
16
17
#include "yb/common/doc_hybrid_time.h"
18
#include "yb/common/read_hybrid_time.h"
19
#include "yb/common/transaction.h"
20
21
#include "yb/util/enums.h"
22
#include "yb/util/slice.h"
23
24
DECLARE_bool(dump_transactions);
25
26
namespace yb {
27
namespace docdb {
28
29
YB_DEFINE_ENUM(TransactionDumpOp,
30
               ((kApplyIntents, 1)) // Apply intents at participant.
31
               ((kRead, 2)) // Any read.
32
               ((kCommit, 3)) // Transaction committed.
33
               ((kStatus, 4)) // Transaction status received.
34
               ((kConflicts, 5)) // Transaction conflicts.
35
               ((kApplied, 6)) // Transaction applied on all involved tablets.
36
               ((kRemove, 7)) // Transaction removed from participant.
37
               );
38
39
void TransactionDump(const SliceParts& parts);
40
41
template <class T>
42
struct DumpToSliceAsPod : public std::is_pod<T> {};
43
44
template <>
45
struct DumpToSliceAsPod<DocHybridTime> : public std::integral_constant<bool, true> {};
46
47
template <>
48
struct DumpToSliceAsPod<HybridTime> : public std::integral_constant<bool, true> {};
49
50
template <>
51
struct DumpToSliceAsPod<ReadHybridTime> : public std::integral_constant<bool, true> {};
52
53
template <class T>
54
0
typename std::enable_if<DumpToSliceAsPod<T>::value, Slice>::type ToDumpSlice(const T& value) {
55
0
  return Slice(pointer_cast<const char*>(&value), sizeof(value));
56
0
}
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceINS_10HybridTimeEEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS5_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceIiEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS4_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceIhEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS4_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceINS_14ReadHybridTimeEEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS5_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceINS_13DocHybridTimeEEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS5_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceIbEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS4_
Unexecuted instantiation: _ZN2yb5docdb11ToDumpSliceImEENSt3__19enable_ifIXsr16DumpToSliceAsPodIT_EE5valueENS_5SliceEE4typeERKS4_
57
58
0
inline Slice ToDumpSlice(const TransactionId& value) {
59
0
  return Slice(value.data(), value.size());
60
0
}
61
62
0
inline Slice ToDumpSlice(Slice slice) {
63
0
  return slice;
64
0
}
65
66
template<class... Args>
67
0
void TransactionDump(TransactionDumpOp op, Args&&... args) {
68
0
  size_t size = 0;
69
0
  std::array<Slice, 2 + sizeof...(Args)> array = {
70
0
    Slice(pointer_cast<const char*>(&size), sizeof(size)),
71
0
    Slice(pointer_cast<const char*>(&op), 1),
72
0
    ToDumpSlice(args)...
73
0
  };
74
0
  for (size_t i = 1; i != array.size(); ++i) {
75
0
    size += array[i].size();
76
0
  }
77
0
  SliceParts parts(array);
78
0
  TransactionDump(parts);
79
0
}
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJRKNS_17StronglyTypedUuidINS_17TransactionId_TagEEERKNS_10HybridTimeEiEEEvNS0_17TransactionDumpOpEDpOT_
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJRKNS_17StronglyTypedUuidINS_17TransactionId_TagEEERKNS_10HybridTimeEEEEvNS0_17TransactionDumpOpEDpOT_
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_17StronglyTypedUuidINS_17TransactionId_TagEEENS_10HybridTimeEhEEEvNS0_17TransactionDumpOpEDpOT_
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJNS_17StronglyTypedUuidINS_17TransactionId_TagEEERKNS_10HybridTimeENS_5SliceEEEEvNS0_17TransactionDumpOpEDpOT_
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEKNS_17StronglyTypedUuidINS_17TransactionId_TagEEERKNS_14ReadHybridTimeERNS_13DocHybridTimeERbmRNS_5SliceEmSK_EEEvNS0_17TransactionDumpOpEDpOT_
Unexecuted instantiation: _ZN2yb5docdb15TransactionDumpIJKNS_17StronglyTypedUuidINS_17TransactionId_TagEEERNS_14ReadHybridTimeERS5_RNS_10HybridTimeEhSA_SA_NSt3__112basic_stringIcNSB_11char_traitsIcEENSB_9allocatorIcEEEEEEEvNS0_17TransactionDumpOpEDpOT_
80
81
297M
#define YB_TRANSACTION_DUMP(op, ...) do { \
82
296M
    if (FLAGS_dump_transactions) { \
83
0
      TransactionDump(::yb::docdb::TransactionDumpOp::BOOST_PP_CAT(k, op), __VA_ARGS__); \
84
0
    } \
85
296M
  } while (false)
86
87
} // namespace docdb
88
} // namespace yb
89
90
#endif  // YB_DOCDB_TRANSACTION_DUMP_H