YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/tablet/abstract_tablet.h
Line
Count
Source
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_TABLET_ABSTRACT_TABLET_H
15
#define YB_TABLET_ABSTRACT_TABLET_H
16
17
#include "yb/common/common_fwd.h"
18
#include "yb/common/common_types.pb.h"
19
#include "yb/common/hybrid_time.h"
20
#include "yb/common/transaction.pb.h"
21
22
#include "yb/docdb/docdb_fwd.h"
23
24
#include "yb/tablet/tablet_fwd.h"
25
#include "yb/util/result.h"
26
27
namespace yb {
28
namespace tablet {
29
30
class TabletRetentionPolicy;
31
32
class AbstractTablet {
33
 public:
34
77.3k
  virtual ~AbstractTablet() {}
35
36
  virtual yb::SchemaPtr GetSchema(const std::string& table_id = "") const = 0;
37
38
  virtual const docdb::YQLStorageIf& QLStorage() const = 0;
39
40
  virtual TableType table_type() const = 0;
41
42
  virtual const std::string& tablet_id() const = 0;
43
44
  virtual bool system() const = 0;
45
46
  //------------------------------------------------------------------------------------------------
47
  // Redis support.
48
  virtual CHECKED_STATUS HandleRedisReadRequest(
49
      CoarseTimePoint deadline,
50
      const ReadHybridTime& read_time,
51
      const RedisReadRequestPB& redis_read_request,
52
      RedisResponsePB* response) = 0;
53
54
  //------------------------------------------------------------------------------------------------
55
  // CQL support.
56
  virtual CHECKED_STATUS HandleQLReadRequest(
57
      CoarseTimePoint deadline,
58
      const ReadHybridTime& read_time,
59
      const QLReadRequestPB& ql_read_request,
60
      const TransactionMetadataPB& transaction_metadata,
61
      QLReadRequestResult* result) = 0;
62
63
  virtual CHECKED_STATUS CreatePagingStateForRead(const QLReadRequestPB& ql_read_request,
64
                                                  const size_t row_count,
65
                                                  QLResponsePB* response) const = 0;
66
67
  virtual TabletRetentionPolicy* RetentionPolicy() = 0;
68
69
  // Returns safe timestamp to read.
70
  // `require_lease` - whether this read requires a hybrid time leader lease. Typically, strongly
71
  //    consistent reads require a lease, while eventually consistent reads don't.
72
  // `min_allowed` - result should be greater or equal to `min_allowed`, otherwise
73
  //    this function tries to wait until the safe time reaches this value or `deadline` happens.
74
  //
75
  // Returns invalid hybrid time in case it cannot satisfy provided requirements, e.g. because of
76
  // a timeout.
77
  Result<HybridTime> SafeTime(RequireLease require_lease = RequireLease::kTrue,
78
                              HybridTime min_allowed = HybridTime::kMin,
79
                              CoarseTimePoint deadline = CoarseTimePoint::max()) const;
80
81
  template <class PB>
82
3.61M
  Result<IsolationLevel> GetIsolationLevelFromPB(const PB& pb) {
83
3.61M
    if (!pb.has_transaction()) {
84
2.25M
      return IsolationLevel::NON_TRANSACTIONAL;
85
2.25M
    }
86
1.36M
    return GetIsolationLevel(pb.transaction());
87
3.61M
  }
yb::Result<yb::IsolationLevel> yb::tablet::AbstractTablet::GetIsolationLevelFromPB<yb::tserver::ReadRequestPB>(yb::tserver::ReadRequestPB const&)
Line
Count
Source
82
370k
  Result<IsolationLevel> GetIsolationLevelFromPB(const PB& pb) {
83
370k
    if (!pb.has_transaction()) {
84
0
      return IsolationLevel::NON_TRANSACTIONAL;
85
0
    }
86
370k
    return GetIsolationLevel(pb.transaction());
87
370k
  }
yb::Result<yb::IsolationLevel> yb::tablet::AbstractTablet::GetIsolationLevelFromPB<yb::docdb::KeyValueWriteBatchPB>(yb::docdb::KeyValueWriteBatchPB const&)
Line
Count
Source
82
3.24M
  Result<IsolationLevel> GetIsolationLevelFromPB(const PB& pb) {
83
3.24M
    if (!pb.has_transaction()) {
84
2.25M
      return IsolationLevel::NON_TRANSACTIONAL;
85
2.25M
    }
86
990k
    return GetIsolationLevel(pb.transaction());
87
3.24M
  }
88
89
  virtual CHECKED_STATUS HandlePgsqlReadRequest(
90
      CoarseTimePoint deadline,
91
      const ReadHybridTime& read_time,
92
      bool is_explicit_request_read_time,
93
      const PgsqlReadRequestPB& ql_read_request,
94
      const TransactionMetadataPB& transaction_metadata,
95
      const SubTransactionMetadataPB& subtransaction_metadata,
96
      PgsqlReadRequestResult* result,
97
      size_t* number_rows_read) = 0;
98
99
  virtual Result<IsolationLevel> GetIsolationLevel(const TransactionMetadataPB& transaction) = 0;
100
101
  //-----------------------------------------------------------------------------------------------
102
  // PGSQL support.
103
  //-----------------------------------------------------------------------------------------------
104
105
  CHECKED_STATUS HandleQLReadRequest(
106
      CoarseTimePoint deadline,
107
      const ReadHybridTime& read_time,
108
      const QLReadRequestPB& ql_read_request,
109
      const TransactionOperationContext& txn_op_context,
110
      QLReadRequestResult* result);
111
112
  virtual CHECKED_STATUS CreatePagingStateForRead(const PgsqlReadRequestPB& pgsql_read_request,
113
                                                  const size_t row_count,
114
                                                  PgsqlResponsePB* response) const = 0;
115
116
  CHECKED_STATUS HandlePgsqlReadRequest(CoarseTimePoint deadline,
117
                                        const ReadHybridTime& read_time,
118
                                        bool is_explicit_request_read_time,
119
                                        const PgsqlReadRequestPB& pgsql_read_request,
120
                                        const TransactionOperationContext& txn_op_context,
121
                                        PgsqlReadRequestResult* result,
122
                                        size_t* num_rows_read);
123
124
  virtual bool IsTransactionalRequest(bool is_ysql_request) const = 0;
125
126
 private:
127
  virtual Result<HybridTime> DoGetSafeTime(
128
      RequireLease require_lease, HybridTime min_allowed, CoarseTimePoint deadline) const = 0;
129
};
130
131
}  // namespace tablet
132
}  // namespace yb
133
134
#endif // YB_TABLET_ABSTRACT_TABLET_H