YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/Users/deen/code/yugabyte-db/src/yb/util/cow_object.h
Line
Count
Source (jump to first uncovered line)
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
//
18
// The following only applies to changes made to this file as part of YugaByte development.
19
//
20
// Portions Copyright (c) YugaByte, Inc.
21
//
22
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
23
// in compliance with the License.  You may obtain a copy of the License at
24
//
25
// http://www.apache.org/licenses/LICENSE-2.0
26
//
27
// Unless required by applicable law or agreed to in writing, software distributed under the License
28
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
29
// or implied.  See the License for the specific language governing permissions and limitations
30
// under the License.
31
//
32
#ifndef YB_UTIL_COW_OBJECT_H
33
#define YB_UTIL_COW_OBJECT_H
34
35
#include <fcntl.h>
36
37
#include <algorithm>
38
39
#include <glog/logging.h>
40
41
#include "yb/gutil/macros.h"
42
43
#include "yb/util/fault_injection.h"
44
#include "yb/util/logging.h"
45
#include "yb/util/rwc_lock.h"
46
47
namespace yb {
48
49
// An object which manages its state via copy-on-write.
50
//
51
// Access to this object can be done more conveniently using the
52
// CowLock template class defined below.
53
//
54
// The 'State' template parameter must be swappable using std::swap.
55
template<class State>
56
class CowObject {
57
 public:
58
329k
  CowObject() {}
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEEC2Ev
Line
Count
Source
58
2.37k
  CowObject() {}
_ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEEC2Ev
Line
Count
Source
58
7
  CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEEC2Ev
Line
Count
Source
58
7.12k
  CowObject() {}
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEEC2Ev
Line
Count
Source
58
2.76k
  CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEEC2Ev
Line
Count
Source
58
159
  CowObject() {}
_ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEEC2Ev
Line
Count
Source
58
4
  CowObject() {}
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEEC2Ev
Line
Count
Source
58
63.2k
  CowObject() {}
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEEC2Ev
Line
Count
Source
58
243k
  CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEEC2Ev
Line
Count
Source
58
9.98k
  CowObject() {}
_ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEEC2Ev
Line
Count
Source
58
47
  CowObject() {}
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEEC2Ev
59
8.09k
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEED2Ev
Line
Count
Source
59
440
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEED2Ev
Line
Count
Source
59
7
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEED2Ev
Line
Count
Source
59
1.31k
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEED2Ev
Line
Count
Source
59
805
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEED2Ev
Line
Count
Source
59
2
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEED2Ev
Line
Count
Source
59
1.73k
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEED2Ev
Line
Count
Source
59
1.97k
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEED2Ev
Line
Count
Source
59
1.76k
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEED2Ev
Line
Count
Source
59
47
  ~CowObject() {}
_ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEED2Ev
Line
Count
Source
59
6
  ~CowObject() {}
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEED2Ev
60
61
144M
  void ReadLock() const {
62
144M
    lock_.ReadLock();
63
144M
  }
_ZNK2yb9CowObjectINS_6master20PersistentTabletInfoEE8ReadLockEv
Line
Count
Source
61
30.9M
  void ReadLock() const {
62
30.9M
    lock_.ReadLock();
63
30.9M
  }
_ZNK2yb9CowObjectINS_6master19PersistentTableInfoEE8ReadLockEv
Line
Count
Source
61
109M
  void ReadLock() const {
62
109M
    lock_.ReadLock();
63
109M
  }
_ZNK2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE8ReadLockEv
Line
Count
Source
61
1.54M
  void ReadLock() const {
62
1.54M
    lock_.ReadLock();
63
1.54M
  }
_ZNK2yb9CowObjectINS_6master23PersistentNamespaceInfoEE8ReadLockEv
Line
Count
Source
61
1.27M
  void ReadLock() const {
62
1.27M
    lock_.ReadLock();
63
1.27M
  }
_ZNK2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE8ReadLockEv
Line
Count
Source
61
6
  void ReadLock() const {
62
6
    lock_.ReadLock();
63
6
  }
_ZNK2yb9CowObjectINS_6master23PersistentSysConfigInfoEE8ReadLockEv
Line
Count
Source
61
682k
  void ReadLock() const {
62
682k
    lock_.ReadLock();
63
682k
  }
_ZNK2yb9CowObjectINS_6master18PersistentRoleInfoEE8ReadLockEv
Line
Count
Source
61
58.4k
  void ReadLock() const {
62
58.4k
    lock_.ReadLock();
63
58.4k
  }
_ZNK2yb9CowObjectINS_6master20PersistentUDTypeInfoEE8ReadLockEv
Line
Count
Source
61
2.89k
  void ReadLock() const {
62
2.89k
    lock_.ReadLock();
63
2.89k
  }
_ZNK2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE8ReadLockEv
Line
Count
Source
61
780
  void ReadLock() const {
62
780
    lock_.ReadLock();
63
780
  }
_ZNK2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE8ReadLockEv
Line
Count
Source
61
4
  void ReadLock() const {
62
4
    lock_.ReadLock();
63
4
  }
Unexecuted instantiation: _ZNK2yb9CowObjectINS_6master22PersistentSnapshotInfoEE8ReadLockEv
64
65
0
  void lock_shared() const {
66
0
    ReadLock();
67
0
  }
68
69
144M
  void ReadUnlock() const {
70
144M
    lock_.ReadUnlock();
71
144M
  }
_ZNK2yb9CowObjectINS_6master20PersistentTabletInfoEE10ReadUnlockEv
Line
Count
Source
69
30.9M
  void ReadUnlock() const {
70
30.9M
    lock_.ReadUnlock();
71
30.9M
  }
_ZNK2yb9CowObjectINS_6master19PersistentTableInfoEE10ReadUnlockEv
Line
Count
Source
69
109M
  void ReadUnlock() const {
70
109M
    lock_.ReadUnlock();
71
109M
  }
_ZNK2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE10ReadUnlockEv
Line
Count
Source
69
1.54M
  void ReadUnlock() const {
70
1.54M
    lock_.ReadUnlock();
71
1.54M
  }
_ZNK2yb9CowObjectINS_6master23PersistentNamespaceInfoEE10ReadUnlockEv
Line
Count
Source
69
1.27M
  void ReadUnlock() const {
70
1.27M
    lock_.ReadUnlock();
71
1.27M
  }
_ZNK2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE10ReadUnlockEv
Line
Count
Source
69
6
  void ReadUnlock() const {
70
6
    lock_.ReadUnlock();
71
6
  }
_ZNK2yb9CowObjectINS_6master23PersistentSysConfigInfoEE10ReadUnlockEv
Line
Count
Source
69
684k
  void ReadUnlock() const {
70
684k
    lock_.ReadUnlock();
71
684k
  }
_ZNK2yb9CowObjectINS_6master18PersistentRoleInfoEE10ReadUnlockEv
Line
Count
Source
69
58.3k
  void ReadUnlock() const {
70
58.3k
    lock_.ReadUnlock();
71
58.3k
  }
_ZNK2yb9CowObjectINS_6master20PersistentUDTypeInfoEE10ReadUnlockEv
Line
Count
Source
69
2.89k
  void ReadUnlock() const {
70
2.89k
    lock_.ReadUnlock();
71
2.89k
  }
_ZNK2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE10ReadUnlockEv
Line
Count
Source
69
780
  void ReadUnlock() const {
70
780
    lock_.ReadUnlock();
71
780
  }
_ZNK2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE10ReadUnlockEv
Line
Count
Source
69
4
  void ReadUnlock() const {
70
4
    lock_.ReadUnlock();
71
4
  }
Unexecuted instantiation: _ZNK2yb9CowObjectINS_6master22PersistentSnapshotInfoEE10ReadUnlockEv
72
73
0
  void unlock_shared() const {
74
0
    ReadUnlock();
75
0
  }
76
77
  // Lock the object for write (preventing concurrent mutators), and make a safe
78
  // copy of the object to mutate.
79
1.18M
  void StartMutation() {
80
1.18M
    lock_.WriteLock();
81
    // Clone our object.
82
1.18M
    dirty_state_.reset(new State(state_));
83
1.18M
  }
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEE13StartMutationEv
Line
Count
Source
79
401k
  void StartMutation() {
80
401k
    lock_.WriteLock();
81
    // Clone our object.
82
401k
    dirty_state_.reset(new State(state_));
83
401k
  }
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEE13StartMutationEv
Line
Count
Source
79
732k
  void StartMutation() {
80
732k
    lock_.WriteLock();
81
    // Clone our object.
82
732k
    dirty_state_.reset(new State(state_));
83
732k
  }
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE13StartMutationEv
Line
Count
Source
79
2.49k
  void StartMutation() {
80
2.49k
    lock_.WriteLock();
81
    // Clone our object.
82
2.49k
    dirty_state_.reset(new State(state_));
83
2.49k
  }
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEE13StartMutationEv
Line
Count
Source
79
14.0k
  void StartMutation() {
80
14.0k
    lock_.WriteLock();
81
    // Clone our object.
82
14.0k
    dirty_state_.reset(new State(state_));
83
14.0k
  }
_ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEE13StartMutationEv
Line
Count
Source
79
92
  void StartMutation() {
80
92
    lock_.WriteLock();
81
    // Clone our object.
82
92
    dirty_state_.reset(new State(state_));
83
92
  }
_ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE13StartMutationEv
Line
Count
Source
79
8
  void StartMutation() {
80
8
    lock_.WriteLock();
81
    // Clone our object.
82
8
    dirty_state_.reset(new State(state_));
83
8
  }
_ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEE13StartMutationEv
Line
Count
Source
79
16.0k
  void StartMutation() {
80
16.0k
    lock_.WriteLock();
81
    // Clone our object.
82
16.0k
    dirty_state_.reset(new State(state_));
83
16.0k
  }
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEE13StartMutationEv
Line
Count
Source
79
13.1k
  void StartMutation() {
80
13.1k
    lock_.WriteLock();
81
    // Clone our object.
82
13.1k
    dirty_state_.reset(new State(state_));
83
13.1k
  }
_ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE13StartMutationEv
Line
Count
Source
79
2.69k
  void StartMutation() {
80
2.69k
    lock_.WriteLock();
81
    // Clone our object.
82
2.69k
    dirty_state_.reset(new State(state_));
83
2.69k
  }
_ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE13StartMutationEv
Line
Count
Source
79
4
  void StartMutation() {
80
4
    lock_.WriteLock();
81
    // Clone our object.
82
4
    dirty_state_.reset(new State(state_));
83
4
  }
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEE13StartMutationEv
84
85
  // Abort the current mutation. This drops the write lock without applying any
86
  // changes made to the mutable copy.
87
468k
  void AbortMutation() {
88
468k
    dirty_state_.reset();
89
468k
    is_dirty_ = false;
90
468k
    lock_.WriteUnlock();
91
468k
  }
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEE13AbortMutationEv
Line
Count
Source
87
32
  void AbortMutation() {
88
32
    dirty_state_.reset();
89
32
    is_dirty_ = false;
90
32
    lock_.WriteUnlock();
91
32
  }
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEE13AbortMutationEv
Line
Count
Source
87
463k
  void AbortMutation() {
88
463k
    dirty_state_.reset();
89
463k
    is_dirty_ = false;
90
463k
    lock_.WriteUnlock();
91
463k
  }
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE13AbortMutationEv
Line
Count
Source
87
1
  void AbortMutation() {
88
1
    dirty_state_.reset();
89
1
    is_dirty_ = false;
90
1
    lock_.WriteUnlock();
91
1
  }
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEE13AbortMutationEv
Line
Count
Source
87
19
  void AbortMutation() {
88
19
    dirty_state_.reset();
89
19
    is_dirty_ = false;
90
19
    lock_.WriteUnlock();
91
19
  }
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEE13AbortMutationEv
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE13AbortMutationEv
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEE13AbortMutationEv
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEE13AbortMutationEv
Line
Count
Source
87
4.84k
  void AbortMutation() {
88
4.84k
    dirty_state_.reset();
89
4.84k
    is_dirty_ = false;
90
4.84k
    lock_.WriteUnlock();
91
4.84k
  }
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE13AbortMutationEv
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE13AbortMutationEv
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEE13AbortMutationEv
92
93
  // Commit the current mutation. This escalates to the "Commit" lock, which
94
  // blocks any concurrent readers or writers, swaps in the new version of the
95
  // State, and then drops the commit lock.
96
715k
  void CommitMutation() {
97
715k
    lock_.UpgradeToCommitLock();
98
715k
    CHECK(dirty_state_);
99
715k
    std::swap(state_, *dirty_state_);
100
715k
    dirty_state_.reset();
101
715k
    is_dirty_ = false;
102
715k
    lock_.CommitUnlock();
103
715k
  }
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEE14CommitMutationEv
Line
Count
Source
96
401k
  void CommitMutation() {
97
401k
    lock_.UpgradeToCommitLock();
98
401k
    CHECK(dirty_state_);
99
401k
    std::swap(state_, *dirty_state_);
100
401k
    dirty_state_.reset();
101
401k
    is_dirty_ = false;
102
401k
    lock_.CommitUnlock();
103
401k
  }
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEE14CommitMutationEv
Line
Count
Source
96
269k
  void CommitMutation() {
97
269k
    lock_.UpgradeToCommitLock();
98
269k
    CHECK(dirty_state_);
99
269k
    std::swap(state_, *dirty_state_);
100
269k
    dirty_state_.reset();
101
269k
    is_dirty_ = false;
102
269k
    lock_.CommitUnlock();
103
269k
  }
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE14CommitMutationEv
Line
Count
Source
96
2.49k
  void CommitMutation() {
97
2.49k
    lock_.UpgradeToCommitLock();
98
2.49k
    CHECK(dirty_state_);
99
2.49k
    std::swap(state_, *dirty_state_);
100
2.49k
    dirty_state_.reset();
101
2.49k
    is_dirty_ = false;
102
2.49k
    lock_.CommitUnlock();
103
2.49k
  }
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEE14CommitMutationEv
Line
Count
Source
96
14.0k
  void CommitMutation() {
97
14.0k
    lock_.UpgradeToCommitLock();
98
14.0k
    CHECK(dirty_state_);
99
14.0k
    std::swap(state_, *dirty_state_);
100
14.0k
    dirty_state_.reset();
101
14.0k
    is_dirty_ = false;
102
14.0k
    lock_.CommitUnlock();
103
14.0k
  }
_ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEE14CommitMutationEv
Line
Count
Source
96
92
  void CommitMutation() {
97
92
    lock_.UpgradeToCommitLock();
98
92
    CHECK(dirty_state_);
99
92
    std::swap(state_, *dirty_state_);
100
92
    dirty_state_.reset();
101
92
    is_dirty_ = false;
102
92
    lock_.CommitUnlock();
103
92
  }
_ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE14CommitMutationEv
Line
Count
Source
96
8
  void CommitMutation() {
97
8
    lock_.UpgradeToCommitLock();
98
8
    CHECK(dirty_state_);
99
8
    std::swap(state_, *dirty_state_);
100
8
    dirty_state_.reset();
101
8
    is_dirty_ = false;
102
8
    lock_.CommitUnlock();
103
8
  }
_ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEE14CommitMutationEv
Line
Count
Source
96
16.0k
  void CommitMutation() {
97
16.0k
    lock_.UpgradeToCommitLock();
98
16.0k
    CHECK(dirty_state_);
99
16.0k
    std::swap(state_, *dirty_state_);
100
16.0k
    dirty_state_.reset();
101
16.0k
    is_dirty_ = false;
102
16.0k
    lock_.CommitUnlock();
103
16.0k
  }
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEE14CommitMutationEv
Line
Count
Source
96
8.28k
  void CommitMutation() {
97
8.28k
    lock_.UpgradeToCommitLock();
98
8.28k
    CHECK(dirty_state_);
99
8.28k
    std::swap(state_, *dirty_state_);
100
8.28k
    dirty_state_.reset();
101
8.28k
    is_dirty_ = false;
102
8.28k
    lock_.CommitUnlock();
103
8.28k
  }
_ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE14CommitMutationEv
Line
Count
Source
96
2.69k
  void CommitMutation() {
97
2.69k
    lock_.UpgradeToCommitLock();
98
2.69k
    CHECK(dirty_state_);
99
2.69k
    std::swap(state_, *dirty_state_);
100
2.69k
    dirty_state_.reset();
101
2.69k
    is_dirty_ = false;
102
2.69k
    lock_.CommitUnlock();
103
2.69k
  }
_ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE14CommitMutationEv
Line
Count
Source
96
4
  void CommitMutation() {
97
4
    lock_.UpgradeToCommitLock();
98
4
    CHECK(dirty_state_);
99
4
    std::swap(state_, *dirty_state_);
100
4
    dirty_state_.reset();
101
4
    is_dirty_ = false;
102
4
    lock_.CommitUnlock();
103
4
  }
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEE14CommitMutationEv
104
105
  // Return the current state, not reflecting any in-progress mutations.
106
  State& state() {
107
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
108
    return state_;
109
  }
110
111
118M
  const State& state() const {
112
118M
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
118M
    return state_;
114
118M
  }
_ZNK2yb9CowObjectINS_6master20PersistentTabletInfoEE5stateEv
Line
Count
Source
111
23.5M
  const State& state() const {
112
23.5M
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
23.5M
    return state_;
114
23.5M
  }
_ZNK2yb9CowObjectINS_6master19PersistentTableInfoEE5stateEv
Line
Count
Source
111
90.6M
  const State& state() const {
112
90.6M
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
90.6M
    return state_;
114
90.6M
  }
_ZNK2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE5stateEv
Line
Count
Source
111
1.54M
  const State& state() const {
112
1.54M
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
1.54M
    return state_;
114
1.54M
  }
_ZNK2yb9CowObjectINS_6master23PersistentNamespaceInfoEE5stateEv
Line
Count
Source
111
1.30M
  const State& state() const {
112
1.30M
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
1.30M
    return state_;
114
1.30M
  }
_ZNK2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE5stateEv
Line
Count
Source
111
11
  const State& state() const {
112
11
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
11
    return state_;
114
11
  }
_ZNK2yb9CowObjectINS_6master23PersistentSysConfigInfoEE5stateEv
Line
Count
Source
111
987k
  const State& state() const {
112
987k
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
987k
    return state_;
114
987k
  }
_ZNK2yb9CowObjectINS_6master18PersistentRoleInfoEE5stateEv
Line
Count
Source
111
81.4k
  const State& state() const {
112
81.4k
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
81.4k
    return state_;
114
81.4k
  }
_ZNK2yb9CowObjectINS_6master20PersistentUDTypeInfoEE5stateEv
Line
Count
Source
111
3.72k
  const State& state() const {
112
3.72k
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
3.72k
    return state_;
114
3.72k
  }
_ZNK2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE5stateEv
Line
Count
Source
111
3.81k
  const State& state() const {
112
3.81k
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
3.81k
    return state_;
114
3.81k
  }
_ZNK2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE5stateEv
Line
Count
Source
111
8
  const State& state() const {
112
8
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
113
8
    return state_;
114
8
  }
Unexecuted instantiation: _ZNK2yb9CowObjectINS_6master22PersistentSnapshotInfoEE5stateEv
115
116
  // Returns the current dirty state (i.e reflecting in-progress mutations).
117
  // Should only be called by a thread who previously called StartMutation().
118
833k
  State* mutable_dirty() {
119
833k
    DCHECK(lock_.HasWriteLock());
120
833k
    is_dirty_ = true;
121
833k
    return DCHECK_NOTNULL(dirty_state_.get());
122
833k
  }
_ZN2yb9CowObjectINS_6master20PersistentTabletInfoEE13mutable_dirtyEv
Line
Count
Source
118
247k
  State* mutable_dirty() {
119
247k
    DCHECK(lock_.HasWriteLock());
120
247k
    is_dirty_ = true;
121
247k
    return DCHECK_NOTNULL(dirty_state_.get());
122
247k
  }
_ZN2yb9CowObjectINS_6master19PersistentTableInfoEE13mutable_dirtyEv
Line
Count
Source
118
528k
  State* mutable_dirty() {
119
528k
    DCHECK(lock_.HasWriteLock());
120
528k
    is_dirty_ = true;
121
528k
    return DCHECK_NOTNULL(dirty_state_.get());
122
528k
  }
_ZN2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE13mutable_dirtyEv
Line
Count
Source
118
2.62k
  State* mutable_dirty() {
119
2.62k
    DCHECK(lock_.HasWriteLock());
120
2.62k
    is_dirty_ = true;
121
2.62k
    return DCHECK_NOTNULL(dirty_state_.get());
122
2.62k
  }
_ZN2yb9CowObjectINS_6master23PersistentNamespaceInfoEE13mutable_dirtyEv
Line
Count
Source
118
17.3k
  State* mutable_dirty() {
119
17.3k
    DCHECK(lock_.HasWriteLock());
120
17.3k
    is_dirty_ = true;
121
17.3k
    return DCHECK_NOTNULL(dirty_state_.get());
122
17.3k
  }
_ZN2yb9CowObjectINS_6master20PersistentUDTypeInfoEE13mutable_dirtyEv
Line
Count
Source
118
48
  State* mutable_dirty() {
119
48
    DCHECK(lock_.HasWriteLock());
120
48
    is_dirty_ = true;
121
48
    return DCHECK_NOTNULL(dirty_state_.get());
122
48
  }
_ZN2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE13mutable_dirtyEv
Line
Count
Source
118
8
  State* mutable_dirty() {
119
8
    DCHECK(lock_.HasWriteLock());
120
8
    is_dirty_ = true;
121
8
    return DCHECK_NOTNULL(dirty_state_.get());
122
8
  }
_ZN2yb9CowObjectINS_6master23PersistentSysConfigInfoEE13mutable_dirtyEv
Line
Count
Source
118
22.0k
  State* mutable_dirty() {
119
22.0k
    DCHECK(lock_.HasWriteLock());
120
22.0k
    is_dirty_ = true;
121
22.0k
    return DCHECK_NOTNULL(dirty_state_.get());
122
22.0k
  }
_ZN2yb9CowObjectINS_6master18PersistentRoleInfoEE13mutable_dirtyEv
Line
Count
Source
118
13.1k
  State* mutable_dirty() {
119
13.1k
    DCHECK(lock_.HasWriteLock());
120
13.1k
    is_dirty_ = true;
121
13.1k
    return DCHECK_NOTNULL(dirty_state_.get());
122
13.1k
  }
_ZN2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE13mutable_dirtyEv
Line
Count
Source
118
2.69k
  State* mutable_dirty() {
119
2.69k
    DCHECK(lock_.HasWriteLock());
120
2.69k
    is_dirty_ = true;
121
2.69k
    return DCHECK_NOTNULL(dirty_state_.get());
122
2.69k
  }
_ZN2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE13mutable_dirtyEv
Line
Count
Source
118
4
  State* mutable_dirty() {
119
4
    DCHECK(lock_.HasWriteLock());
120
4
    is_dirty_ = true;
121
4
    return DCHECK_NOTNULL(dirty_state_.get());
122
4
  }
Unexecuted instantiation: _ZN2yb9CowObjectINS_6master22PersistentSnapshotInfoEE13mutable_dirtyEv
123
124
4.14M
  const State& dirty() const {
125
4.14M
    return *DCHECK_NOTNULL(dirty_state_.get());
126
4.14M
  }
_ZNK2yb9CowObjectINS_6master19PersistentTableInfoEE5dirtyEv
Line
Count
Source
124
2.00M
  const State& dirty() const {
125
2.00M
    return *DCHECK_NOTNULL(dirty_state_.get());
126
2.00M
  }
_ZNK2yb9CowObjectINS_6master20PersistentTabletInfoEE5dirtyEv
Line
Count
Source
124
2.10M
  const State& dirty() const {
125
2.10M
    return *DCHECK_NOTNULL(dirty_state_.get());
126
2.10M
  }
_ZNK2yb9CowObjectINS_6master27PersistentClusterConfigInfoEE5dirtyEv
Line
Count
Source
124
2.29k
  const State& dirty() const {
125
2.29k
    return *DCHECK_NOTNULL(dirty_state_.get());
126
2.29k
  }
_ZNK2yb9CowObjectINS_6master23PersistentNamespaceInfoEE5dirtyEv
Line
Count
Source
124
12.9k
  const State& dirty() const {
125
12.9k
    return *DCHECK_NOTNULL(dirty_state_.get());
126
12.9k
  }
_ZNK2yb9CowObjectINS_6master25PersistentRedisConfigInfoEE5dirtyEv
Line
Count
Source
124
3
  const State& dirty() const {
125
3
    return *DCHECK_NOTNULL(dirty_state_.get());
126
3
  }
_ZNK2yb9CowObjectINS_6master23PersistentSysConfigInfoEE5dirtyEv
Line
Count
Source
124
15.3k
  const State& dirty() const {
125
15.3k
    return *DCHECK_NOTNULL(dirty_state_.get());
126
15.3k
  }
_ZNK2yb9CowObjectINS_6master18PersistentRoleInfoEE5dirtyEv
Line
Count
Source
124
5.15k
  const State& dirty() const {
125
5.15k
    return *DCHECK_NOTNULL(dirty_state_.get());
126
5.15k
  }
_ZNK2yb9CowObjectINS_6master20PersistentUDTypeInfoEE5dirtyEv
Line
Count
Source
124
46
  const State& dirty() const {
125
46
    return *DCHECK_NOTNULL(dirty_state_.get());
126
46
  }
_ZNK2yb9CowObjectINS_6master23PersistentCDCStreamInfoEE5dirtyEv
Line
Count
Source
124
5.23k
  const State& dirty() const {
125
5.23k
    return *DCHECK_NOTNULL(dirty_state_.get());
126
5.23k
  }
_ZNK2yb9CowObjectINS_6master33PersistentUniverseReplicationInfoEE5dirtyEv
Line
Count
Source
124
3
  const State& dirty() const {
125
3
    return *DCHECK_NOTNULL(dirty_state_.get());
126
3
  }
Unexecuted instantiation: _ZNK2yb9CowObjectINS_6master22PersistentSnapshotInfoEE5dirtyEv
127
128
  bool is_dirty() const {
129
    DCHECK(lock_.HasReaders() || lock_.HasWriteLock());
130
    return is_dirty_;
131
  }
132
133
 private:
134
  mutable RWCLock lock_;
135
136
  State state_;
137
  std::unique_ptr<State> dirty_state_;
138
139
  // Set only when mutable_dirty() method is called. Unset whenever dirty_state_ is reset().
140
  bool is_dirty_ = false;
141
142
  DISALLOW_COPY_AND_ASSIGN(CowObject);
143
};
144
145
// A lock-guard-like scoped object to acquire the lock on a CowObject,
146
// and obtain a pointer to the correct copy to read.
147
//
148
// Example usage:
149
//
150
//   CowObject<Foo> my_obj;
151
//   {
152
//     CowReadLock<Foo> l(&my_obj);
153
//     l.data().get_foo();
154
//     ...
155
//   }
156
template<class State>
157
class CowReadLock {
158
 public:
159
  CowReadLock() : cow_(nullptr) {}
160
161
  explicit CowReadLock(const CowObject<State>* cow)
162
144M
    : cow_(cow) {
163
144M
    cow_->ReadLock();
164
144M
  }
_ZN2yb11CowReadLockINS_6master20PersistentTabletInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
30.9M
    : cow_(cow) {
163
30.9M
    cow_->ReadLock();
164
30.9M
  }
_ZN2yb11CowReadLockINS_6master19PersistentTableInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
109M
    : cow_(cow) {
163
109M
    cow_->ReadLock();
164
109M
  }
_ZN2yb11CowReadLockINS_6master27PersistentClusterConfigInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
1.54M
    : cow_(cow) {
163
1.54M
    cow_->ReadLock();
164
1.54M
  }
_ZN2yb11CowReadLockINS_6master23PersistentNamespaceInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
1.27M
    : cow_(cow) {
163
1.27M
    cow_->ReadLock();
164
1.27M
  }
_ZN2yb11CowReadLockINS_6master25PersistentRedisConfigInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
6
    : cow_(cow) {
163
6
    cow_->ReadLock();
164
6
  }
_ZN2yb11CowReadLockINS_6master23PersistentSysConfigInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
683k
    : cow_(cow) {
163
683k
    cow_->ReadLock();
164
683k
  }
_ZN2yb11CowReadLockINS_6master18PersistentRoleInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
58.4k
    : cow_(cow) {
163
58.4k
    cow_->ReadLock();
164
58.4k
  }
_ZN2yb11CowReadLockINS_6master20PersistentUDTypeInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
2.89k
    : cow_(cow) {
163
2.89k
    cow_->ReadLock();
164
2.89k
  }
_ZN2yb11CowReadLockINS_6master23PersistentCDCStreamInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
780
    : cow_(cow) {
163
780
    cow_->ReadLock();
164
780
  }
_ZN2yb11CowReadLockINS_6master33PersistentUniverseReplicationInfoEEC2EPKNS_9CowObjectIS2_EE
Line
Count
Source
162
4
    : cow_(cow) {
163
4
    cow_->ReadLock();
164
4
  }
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master22PersistentSnapshotInfoEEC2EPKNS_9CowObjectIS2_EE
165
166
  CowReadLock(const CowReadLock&) = delete;
167
  void operator=(const CowReadLock&) = delete;
168
169
  CowReadLock(CowReadLock&& rhs) noexcept
170
0
      : cow_(rhs.cow_) {
171
0
    rhs.cow_ = nullptr;
172
0
  }
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master23PersistentNamespaceInfoEEC2EOS3_
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master19PersistentTableInfoEEC2EOS3_
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master20PersistentTabletInfoEEC2EOS3_
173
174
  void operator=(CowReadLock&& rhs) noexcept {
175
    Unlock();
176
    cow_ = rhs.cow_;
177
    rhs.cow_ = nullptr;
178
  }
179
180
144M
  void Unlock() {
181
144M
    if (cow_) {
182
144M
      cow_->ReadUnlock();
183
144M
      cow_ = nullptr;
184
144M
    }
185
144M
  }
_ZN2yb11CowReadLockINS_6master20PersistentTabletInfoEE6UnlockEv
Line
Count
Source
180
30.9M
  void Unlock() {
181
30.9M
    if (cow_) {
182
30.9M
      cow_->ReadUnlock();
183
30.9M
      cow_ = nullptr;
184
30.9M
    }
185
30.9M
  }
_ZN2yb11CowReadLockINS_6master19PersistentTableInfoEE6UnlockEv
Line
Count
Source
180
109M
  void Unlock() {
181
109M
    if (cow_) {
182
109M
      cow_->ReadUnlock();
183
109M
      cow_ = nullptr;
184
109M
    }
185
109M
  }
_ZN2yb11CowReadLockINS_6master27PersistentClusterConfigInfoEE6UnlockEv
Line
Count
Source
180
1.54M
  void Unlock() {
181
1.54M
    if (cow_) {
182
1.54M
      cow_->ReadUnlock();
183
1.54M
      cow_ = nullptr;
184
1.54M
    }
185
1.54M
  }
_ZN2yb11CowReadLockINS_6master23PersistentNamespaceInfoEE6UnlockEv
Line
Count
Source
180
1.27M
  void Unlock() {
181
1.27M
    if (cow_) {
182
1.27M
      cow_->ReadUnlock();
183
1.27M
      cow_ = nullptr;
184
1.27M
    }
185
1.27M
  }
_ZN2yb11CowReadLockINS_6master25PersistentRedisConfigInfoEE6UnlockEv
Line
Count
Source
180
6
  void Unlock() {
181
6
    if (cow_) {
182
6
      cow_->ReadUnlock();
183
6
      cow_ = nullptr;
184
6
    }
185
6
  }
_ZN2yb11CowReadLockINS_6master23PersistentSysConfigInfoEE6UnlockEv
Line
Count
Source
180
684k
  void Unlock() {
181
684k
    if (cow_) {
182
684k
      cow_->ReadUnlock();
183
684k
      cow_ = nullptr;
184
684k
    }
185
684k
  }
_ZN2yb11CowReadLockINS_6master18PersistentRoleInfoEE6UnlockEv
Line
Count
Source
180
58.2k
  void Unlock() {
181
58.2k
    if (cow_) {
182
58.2k
      cow_->ReadUnlock();
183
58.2k
      cow_ = nullptr;
184
58.2k
    }
185
58.2k
  }
_ZN2yb11CowReadLockINS_6master20PersistentUDTypeInfoEE6UnlockEv
Line
Count
Source
180
2.89k
  void Unlock() {
181
2.89k
    if (cow_) {
182
2.89k
      cow_->ReadUnlock();
183
2.89k
      cow_ = nullptr;
184
2.89k
    }
185
2.89k
  }
_ZN2yb11CowReadLockINS_6master23PersistentCDCStreamInfoEE6UnlockEv
Line
Count
Source
180
780
  void Unlock() {
181
780
    if (cow_) {
182
780
      cow_->ReadUnlock();
183
780
      cow_ = nullptr;
184
780
    }
185
780
  }
_ZN2yb11CowReadLockINS_6master33PersistentUniverseReplicationInfoEE6UnlockEv
Line
Count
Source
180
4
  void Unlock() {
181
4
    if (cow_) {
182
4
      cow_->ReadUnlock();
183
4
      cow_ = nullptr;
184
4
    }
185
4
  }
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master22PersistentSnapshotInfoEE6UnlockEv
186
187
117M
  const State& data() const {
188
117M
    return cow_->state();
189
117M
  }
_ZNK2yb11CowReadLockINS_6master20PersistentTabletInfoEE4dataEv
Line
Count
Source
187
22.9M
  const State& data() const {
188
22.9M
    return cow_->state();
189
22.9M
  }
_ZNK2yb11CowReadLockINS_6master19PersistentTableInfoEE4dataEv
Line
Count
Source
187
90.3M
  const State& data() const {
188
90.3M
    return cow_->state();
189
90.3M
  }
_ZNK2yb11CowReadLockINS_6master27PersistentClusterConfigInfoEE4dataEv
Line
Count
Source
187
1.54M
  const State& data() const {
188
1.54M
    return cow_->state();
189
1.54M
  }
_ZNK2yb11CowReadLockINS_6master23PersistentNamespaceInfoEE4dataEv
Line
Count
Source
187
1.29M
  const State& data() const {
188
1.29M
    return cow_->state();
189
1.29M
  }
_ZNK2yb11CowReadLockINS_6master25PersistentRedisConfigInfoEE4dataEv
Line
Count
Source
187
6
  const State& data() const {
188
6
    return cow_->state();
189
6
  }
_ZNK2yb11CowReadLockINS_6master23PersistentSysConfigInfoEE4dataEv
Line
Count
Source
187
972k
  const State& data() const {
188
972k
    return cow_->state();
189
972k
  }
_ZNK2yb11CowReadLockINS_6master18PersistentRoleInfoEE4dataEv
Line
Count
Source
187
75.6k
  const State& data() const {
188
75.6k
    return cow_->state();
189
75.6k
  }
_ZNK2yb11CowReadLockINS_6master20PersistentUDTypeInfoEE4dataEv
Line
Count
Source
187
3.62k
  const State& data() const {
188
3.62k
    return cow_->state();
189
3.62k
  }
_ZNK2yb11CowReadLockINS_6master23PersistentCDCStreamInfoEE4dataEv
Line
Count
Source
187
1.11k
  const State& data() const {
188
1.11k
    return cow_->state();
189
1.11k
  }
_ZNK2yb11CowReadLockINS_6master33PersistentUniverseReplicationInfoEE4dataEv
Line
Count
Source
187
4
  const State& data() const {
188
4
    return cow_->state();
189
4
  }
Unexecuted instantiation: _ZNK2yb11CowReadLockINS_6master22PersistentSnapshotInfoEE4dataEv
190
191
117M
  const State* operator->() const {
192
117M
    return &data();
193
117M
  }
_ZNK2yb11CowReadLockINS_6master20PersistentTabletInfoEEptEv
Line
Count
Source
191
22.9M
  const State* operator->() const {
192
22.9M
    return &data();
193
22.9M
  }
_ZNK2yb11CowReadLockINS_6master19PersistentTableInfoEEptEv
Line
Count
Source
191
90.3M
  const State* operator->() const {
192
90.3M
    return &data();
193
90.3M
  }
_ZNK2yb11CowReadLockINS_6master27PersistentClusterConfigInfoEEptEv
Line
Count
Source
191
1.54M
  const State* operator->() const {
192
1.54M
    return &data();
193
1.54M
  }
_ZNK2yb11CowReadLockINS_6master23PersistentNamespaceInfoEEptEv
Line
Count
Source
191
1.29M
  const State* operator->() const {
192
1.29M
    return &data();
193
1.29M
  }
_ZNK2yb11CowReadLockINS_6master25PersistentRedisConfigInfoEEptEv
Line
Count
Source
191
6
  const State* operator->() const {
192
6
    return &data();
193
6
  }
_ZNK2yb11CowReadLockINS_6master23PersistentSysConfigInfoEEptEv
Line
Count
Source
191
972k
  const State* operator->() const {
192
972k
    return &data();
193
972k
  }
_ZNK2yb11CowReadLockINS_6master18PersistentRoleInfoEEptEv
Line
Count
Source
191
75.6k
  const State* operator->() const {
192
75.6k
    return &data();
193
75.6k
  }
_ZNK2yb11CowReadLockINS_6master20PersistentUDTypeInfoEEptEv
Line
Count
Source
191
3.62k
  const State* operator->() const {
192
3.62k
    return &data();
193
3.62k
  }
_ZNK2yb11CowReadLockINS_6master23PersistentCDCStreamInfoEEptEv
Line
Count
Source
191
1.11k
  const State* operator->() const {
192
1.11k
    return &data();
193
1.11k
  }
_ZNK2yb11CowReadLockINS_6master33PersistentUniverseReplicationInfoEEptEv
Line
Count
Source
191
4
  const State* operator->() const {
192
4
    return &data();
193
4
  }
Unexecuted instantiation: _ZNK2yb11CowReadLockINS_6master22PersistentSnapshotInfoEEptEv
194
195
  bool locked() const {
196
    return cow_ != nullptr;
197
  }
198
199
144M
  ~CowReadLock() {
200
144M
    Unlock();
201
144M
  }
_ZN2yb11CowReadLockINS_6master20PersistentTabletInfoEED2Ev
Line
Count
Source
199
30.9M
  ~CowReadLock() {
200
30.9M
    Unlock();
201
30.9M
  }
_ZN2yb11CowReadLockINS_6master19PersistentTableInfoEED2Ev
Line
Count
Source
199
109M
  ~CowReadLock() {
200
109M
    Unlock();
201
109M
  }
_ZN2yb11CowReadLockINS_6master27PersistentClusterConfigInfoEED2Ev
Line
Count
Source
199
1.54M
  ~CowReadLock() {
200
1.54M
    Unlock();
201
1.54M
  }
_ZN2yb11CowReadLockINS_6master23PersistentNamespaceInfoEED2Ev
Line
Count
Source
199
1.27M
  ~CowReadLock() {
200
1.27M
    Unlock();
201
1.27M
  }
_ZN2yb11CowReadLockINS_6master25PersistentRedisConfigInfoEED2Ev
Line
Count
Source
199
6
  ~CowReadLock() {
200
6
    Unlock();
201
6
  }
_ZN2yb11CowReadLockINS_6master23PersistentSysConfigInfoEED2Ev
Line
Count
Source
199
684k
  ~CowReadLock() {
200
684k
    Unlock();
201
684k
  }
_ZN2yb11CowReadLockINS_6master18PersistentRoleInfoEED2Ev
Line
Count
Source
199
58.2k
  ~CowReadLock() {
200
58.2k
    Unlock();
201
58.2k
  }
_ZN2yb11CowReadLockINS_6master20PersistentUDTypeInfoEED2Ev
Line
Count
Source
199
2.89k
  ~CowReadLock() {
200
2.89k
    Unlock();
201
2.89k
  }
_ZN2yb11CowReadLockINS_6master23PersistentCDCStreamInfoEED2Ev
Line
Count
Source
199
780
  ~CowReadLock() {
200
780
    Unlock();
201
780
  }
_ZN2yb11CowReadLockINS_6master33PersistentUniverseReplicationInfoEED2Ev
Line
Count
Source
199
4
  ~CowReadLock() {
200
4
    Unlock();
201
4
  }
Unexecuted instantiation: _ZN2yb11CowReadLockINS_6master22PersistentSnapshotInfoEED2Ev
202
203
 private:
204
  const CowObject<State>* cow_;
205
};
206
207
// A lock-guard-like scoped object to acquire the lock on a CowObject,
208
// and obtain a pointer to the correct copy to write.
209
//
210
// Example usage:
211
//
212
//   CowObject<Foo> my_obj;
213
//   {
214
//     CowWriteLock<Foo> l(&my_obj);
215
//     l.mutable_data()->set_foo(...);
216
//     ...
217
//     l.Commit();
218
//   }
219
template<class State>
220
class CowWriteLock {
221
 public:
222
3.92M
  CowWriteLock() : cow_(nullptr) {}
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEEC2Ev
Line
Count
Source
222
3.66M
  CowWriteLock() : cow_(nullptr) {}
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEEC2Ev
Line
Count
Source
222
259k
  CowWriteLock() : cow_(nullptr) {}
223
224
  explicit CowWriteLock(CowObject<State>* cow)
225
1.02M
    : cow_(cow) {
226
1.02M
    cow_->StartMutation();
227
1.02M
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
288k
    : cow_(cow) {
226
288k
    cow_->StartMutation();
227
288k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
699k
    : cow_(cow) {
226
699k
    cow_->StartMutation();
227
699k
  }
_ZN2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
2.49k
    : cow_(cow) {
226
2.49k
    cow_->StartMutation();
227
2.49k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
11.9k
    : cow_(cow) {
226
11.9k
    cow_->StartMutation();
227
11.9k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
47
    : cow_(cow) {
226
47
    cow_->StartMutation();
227
47
  }
_ZN2yb12CowWriteLockINS_6master25PersistentRedisConfigInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
7
    : cow_(cow) {
226
7
    cow_->StartMutation();
227
7
  }
_ZN2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
16.0k
    : cow_(cow) {
226
16.0k
    cow_->StartMutation();
227
16.0k
  }
_ZN2yb12CowWriteLockINS_6master18PersistentRoleInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
3.54k
    : cow_(cow) {
226
3.54k
    cow_->StartMutation();
227
3.54k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
2.54k
    : cow_(cow) {
226
2.54k
    cow_->StartMutation();
227
2.54k
  }
_ZN2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEEC2EPNS_9CowObjectIS2_EE
Line
Count
Source
225
2
    : cow_(cow) {
226
2
    cow_->StartMutation();
227
2
  }
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEEC2EPNS_9CowObjectIS2_EE
228
229
  CowWriteLock(const CowWriteLock&) = delete;
230
  void operator=(const CowWriteLock&) = delete;
231
232
  CowWriteLock(CowWriteLock&& rhs) noexcept
233
36.0k
      : cow_(rhs.cow_) {
234
36.0k
    rhs.cow_ = nullptr;
235
36.0k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEEC2EOS3_
Line
Count
Source
233
20.3k
      : cow_(rhs.cow_) {
234
20.3k
    rhs.cow_ = nullptr;
235
20.3k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEEC2EOS3_
Line
Count
Source
233
15.6k
      : cow_(rhs.cow_) {
234
15.6k
    rhs.cow_ = nullptr;
235
15.6k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEEC2EOS3_
Line
Count
Source
233
2
      : cow_(rhs.cow_) {
234
2
    rhs.cow_ = nullptr;
235
2
  }
236
237
588k
  void operator=(CowWriteLock&& rhs) noexcept {
238
588k
    Unlock();
239
588k
    cow_ = rhs.cow_;
240
588k
    rhs.cow_ = nullptr;
241
588k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEEaSEOS3_
Line
Count
Source
237
328k
  void operator=(CowWriteLock&& rhs) noexcept {
238
328k
    Unlock();
239
328k
    cow_ = rhs.cow_;
240
328k
    rhs.cow_ = nullptr;
241
328k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEEaSEOS3_
Line
Count
Source
237
259k
  void operator=(CowWriteLock&& rhs) noexcept {
238
259k
    Unlock();
239
259k
    cow_ = rhs.cow_;
240
259k
    rhs.cow_ = nullptr;
241
259k
  }
242
243
  // Commit the underlying object.
244
  // Requires that the caller hold the lock.
245
561k
  void Commit() {
246
561k
    cow_->CommitMutation();
247
561k
    cow_ = nullptr;
248
561k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEE6CommitEv
Line
Count
Source
245
288k
  void Commit() {
246
288k
    cow_->CommitMutation();
247
288k
    cow_ = nullptr;
248
288k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEE6CommitEv
Line
Count
Source
245
236k
  void Commit() {
246
236k
    cow_->CommitMutation();
247
236k
    cow_ = nullptr;
248
236k
  }
_ZN2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEE6CommitEv
Line
Count
Source
245
2.49k
  void Commit() {
246
2.49k
    cow_->CommitMutation();
247
2.49k
    cow_ = nullptr;
248
2.49k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEE6CommitEv
Line
Count
Source
245
11.9k
  void Commit() {
246
11.9k
    cow_->CommitMutation();
247
11.9k
    cow_ = nullptr;
248
11.9k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEE6CommitEv
Line
Count
Source
245
47
  void Commit() {
246
47
    cow_->CommitMutation();
247
47
    cow_ = nullptr;
248
47
  }
_ZN2yb12CowWriteLockINS_6master25PersistentRedisConfigInfoEE6CommitEv
Line
Count
Source
245
7
  void Commit() {
246
7
    cow_->CommitMutation();
247
7
    cow_ = nullptr;
248
7
  }
_ZN2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEE6CommitEv
Line
Count
Source
245
16.0k
  void Commit() {
246
16.0k
    cow_->CommitMutation();
247
16.0k
    cow_ = nullptr;
248
16.0k
  }
_ZN2yb12CowWriteLockINS_6master18PersistentRoleInfoEE6CommitEv
Line
Count
Source
245
3.53k
  void Commit() {
246
3.53k
    cow_->CommitMutation();
247
3.53k
    cow_ = nullptr;
248
3.53k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEE6CommitEv
Line
Count
Source
245
2.54k
  void Commit() {
246
2.54k
    cow_->CommitMutation();
247
2.54k
    cow_ = nullptr;
248
2.54k
  }
_ZN2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEE6CommitEv
Line
Count
Source
245
2
  void Commit() {
246
2
    cow_->CommitMutation();
247
2
    cow_ = nullptr;
248
2
  }
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEE6CommitEv
249
250
0
  void CommitOrWarn(const Status& status, const char* action) {
251
0
    if (!status.ok()) {
252
0
      LOG(WARNING) << "An error occurred while " << action << ": " << status;
253
0
      return;
254
0
    }
255
0
    Commit();
256
0
  }
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEE12CommitOrWarnERKNS_6StatusEPKc
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEE12CommitOrWarnERKNS_6StatusEPKc
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEE12CommitOrWarnERKNS_6StatusEPKc
257
258
5.83M
  void Unlock() {
259
5.83M
    if (cow_) {
260
463k
      cow_->AbortMutation();
261
463k
      cow_ = nullptr;
262
463k
    }
263
5.83M
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEE6UnlockEv
Line
Count
Source
258
823k
  void Unlock() {
259
823k
    if (cow_) {
260
9
      cow_->AbortMutation();
261
9
      cow_ = nullptr;
262
9
    }
263
823k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEE6UnlockEv
Line
Count
Source
258
4.97M
  void Unlock() {
259
4.97M
    if (cow_) {
260
463k
      cow_->AbortMutation();
261
463k
      cow_ = nullptr;
262
463k
    }
263
4.97M
  }
_ZN2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEE6UnlockEv
Line
Count
Source
258
2.49k
  void Unlock() {
259
2.49k
    if (cow_) {
260
1
      cow_->AbortMutation();
261
1
      cow_ = nullptr;
262
1
    }
263
2.49k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEE6UnlockEv
Line
Count
Source
258
11.9k
  void Unlock() {
259
11.9k
    if (cow_) {
260
11
      cow_->AbortMutation();
261
11
      cow_ = nullptr;
262
11
    }
263
11.9k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEE6UnlockEv
Line
Count
Source
258
47
  void Unlock() {
259
47
    if (cow_) {
260
0
      cow_->AbortMutation();
261
0
      cow_ = nullptr;
262
0
    }
263
47
  }
_ZN2yb12CowWriteLockINS_6master25PersistentRedisConfigInfoEE6UnlockEv
Line
Count
Source
258
7
  void Unlock() {
259
7
    if (cow_) {
260
0
      cow_->AbortMutation();
261
0
      cow_ = nullptr;
262
0
    }
263
7
  }
_ZN2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEE6UnlockEv
Line
Count
Source
258
16.0k
  void Unlock() {
259
16.0k
    if (cow_) {
260
0
      cow_->AbortMutation();
261
0
      cow_ = nullptr;
262
0
    }
263
16.0k
  }
_ZN2yb12CowWriteLockINS_6master18PersistentRoleInfoEE6UnlockEv
Line
Count
Source
258
3.54k
  void Unlock() {
259
3.54k
    if (cow_) {
260
13
      cow_->AbortMutation();
261
13
      cow_ = nullptr;
262
13
    }
263
3.54k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEE6UnlockEv
Line
Count
Source
258
2.54k
  void Unlock() {
259
2.54k
    if (cow_) {
260
0
      cow_->AbortMutation();
261
0
      cow_ = nullptr;
262
0
    }
263
2.54k
  }
_ZN2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEE6UnlockEv
Line
Count
Source
258
2
  void Unlock() {
259
2
    if (cow_) {
260
0
      cow_->AbortMutation();
261
0
      cow_ = nullptr;
262
0
    }
263
2
  }
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEE6UnlockEv
264
265
  // Obtain the underlying data.
266
  // Returns the same data as mutable_data() (not the safe unchanging copy).
267
3.29M
  const State& data() const {
268
3.29M
    return cow_->dirty();
269
3.29M
  }
_ZNK2yb12CowWriteLockINS_6master20PersistentTabletInfoEE4dataEv
Line
Count
Source
267
1.34M
  const State& data() const {
268
1.34M
    return cow_->dirty();
269
1.34M
  }
_ZNK2yb12CowWriteLockINS_6master19PersistentTableInfoEE4dataEv
Line
Count
Source
267
1.94M
  const State& data() const {
268
1.94M
    return cow_->dirty();
269
1.94M
  }
_ZNK2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEE4dataEv
Line
Count
Source
267
3.52k
  const State& data() const {
268
3.52k
    return cow_->dirty();
269
3.52k
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEE4dataEv
_ZNK2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEE4dataEv
Line
Count
Source
267
563
  const State& data() const {
268
563
    return cow_->dirty();
269
563
  }
_ZNK2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEE4dataEv
Line
Count
Source
267
222
  const State& data() const {
268
222
    return cow_->dirty();
269
222
  }
_ZNK2yb12CowWriteLockINS_6master18PersistentRoleInfoEE4dataEv
Line
Count
Source
267
90
  const State& data() const {
268
90
    return cow_->dirty();
269
90
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEE4dataEv
_ZNK2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEE4dataEv
Line
Count
Source
267
2.53k
  const State& data() const {
268
2.53k
    return cow_->dirty();
269
2.53k
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEE4dataEv
270
271
3.29M
  const State* operator->() const {
272
3.29M
    return &data();
273
3.29M
  }
_ZNK2yb12CowWriteLockINS_6master20PersistentTabletInfoEEptEv
Line
Count
Source
271
1.34M
  const State* operator->() const {
272
1.34M
    return &data();
273
1.34M
  }
_ZNK2yb12CowWriteLockINS_6master19PersistentTableInfoEEptEv
Line
Count
Source
271
1.93M
  const State* operator->() const {
272
1.93M
    return &data();
273
1.93M
  }
_ZNK2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEEptEv
Line
Count
Source
271
3.52k
  const State* operator->() const {
272
3.52k
    return &data();
273
3.52k
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEEptEv
_ZNK2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEEptEv
Line
Count
Source
271
563
  const State* operator->() const {
272
563
    return &data();
273
563
  }
_ZNK2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEEptEv
Line
Count
Source
271
222
  const State* operator->() const {
272
222
    return &data();
273
222
  }
_ZNK2yb12CowWriteLockINS_6master18PersistentRoleInfoEEptEv
Line
Count
Source
271
90
  const State* operator->() const {
272
90
    return &data();
273
90
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEEptEv
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEEptEv
_ZNK2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEEptEv
Line
Count
Source
271
2.53k
  const State* operator->() const {
272
2.53k
    return &data();
273
2.53k
  }
274
275
  // Obtain the mutable data.
276
611k
  State* mutable_data() const {
277
611k
    return cow_->mutable_dirty();
278
611k
  }
_ZNK2yb12CowWriteLockINS_6master20PersistentTabletInfoEE12mutable_dataEv
Line
Count
Source
276
107k
  State* mutable_data() const {
277
107k
    return cow_->mutable_dirty();
278
107k
  }
_ZNK2yb12CowWriteLockINS_6master19PersistentTableInfoEE12mutable_dataEv
Line
Count
Source
276
460k
  State* mutable_data() const {
277
460k
    return cow_->mutable_dirty();
278
460k
  }
_ZNK2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEE12mutable_dataEv
Line
Count
Source
276
2.62k
  State* mutable_data() const {
277
2.62k
    return cow_->mutable_dirty();
278
2.62k
  }
_ZNK2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEE12mutable_dataEv
Line
Count
Source
276
13.0k
  State* mutable_data() const {
277
13.0k
    return cow_->mutable_dirty();
278
13.0k
  }
_ZNK2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEE12mutable_dataEv
Line
Count
Source
276
3
  State* mutable_data() const {
277
3
    return cow_->mutable_dirty();
278
3
  }
_ZNK2yb12CowWriteLockINS_6master25PersistentRedisConfigInfoEE12mutable_dataEv
Line
Count
Source
276
7
  State* mutable_data() const {
277
7
    return cow_->mutable_dirty();
278
7
  }
_ZNK2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEE12mutable_dataEv
Line
Count
Source
276
22.0k
  State* mutable_data() const {
277
22.0k
    return cow_->mutable_dirty();
278
22.0k
  }
_ZNK2yb12CowWriteLockINS_6master18PersistentRoleInfoEE12mutable_dataEv
Line
Count
Source
276
3.54k
  State* mutable_data() const {
277
3.54k
    return cow_->mutable_dirty();
278
3.54k
  }
_ZNK2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEE12mutable_dataEv
Line
Count
Source
276
2.54k
  State* mutable_data() const {
277
2.54k
    return cow_->mutable_dirty();
278
2.54k
  }
_ZNK2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEE12mutable_dataEv
Line
Count
Source
276
2
  State* mutable_data() const {
277
2
    return cow_->mutable_dirty();
278
2
  }
Unexecuted instantiation: _ZNK2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEE12mutable_dataEv
279
280
  bool is_dirty() const {
281
    return cow_->is_dirty();
282
  }
283
284
3.67M
  bool locked() const {
285
3.67M
    return cow_ != nullptr;
286
3.67M
  }
287
288
4.98M
  ~CowWriteLock() {
289
4.98M
    Unlock();
290
4.98M
  }
_ZN2yb12CowWriteLockINS_6master20PersistentTabletInfoEED2Ev
Line
Count
Source
288
563k
  ~CowWriteLock() {
289
563k
    Unlock();
290
563k
  }
_ZN2yb12CowWriteLockINS_6master19PersistentTableInfoEED2Ev
Line
Count
Source
288
4.38M
  ~CowWriteLock() {
289
4.38M
    Unlock();
290
4.38M
  }
_ZN2yb12CowWriteLockINS_6master27PersistentClusterConfigInfoEED2Ev
Line
Count
Source
288
2.49k
  ~CowWriteLock() {
289
2.49k
    Unlock();
290
2.49k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentNamespaceInfoEED2Ev
Line
Count
Source
288
11.9k
  ~CowWriteLock() {
289
11.9k
    Unlock();
290
11.9k
  }
_ZN2yb12CowWriteLockINS_6master20PersistentUDTypeInfoEED2Ev
Line
Count
Source
288
47
  ~CowWriteLock() {
289
47
    Unlock();
290
47
  }
_ZN2yb12CowWriteLockINS_6master25PersistentRedisConfigInfoEED2Ev
Line
Count
Source
288
7
  ~CowWriteLock() {
289
7
    Unlock();
290
7
  }
_ZN2yb12CowWriteLockINS_6master23PersistentSysConfigInfoEED2Ev
Line
Count
Source
288
16.0k
  ~CowWriteLock() {
289
16.0k
    Unlock();
290
16.0k
  }
_ZN2yb12CowWriteLockINS_6master18PersistentRoleInfoEED2Ev
Line
Count
Source
288
3.54k
  ~CowWriteLock() {
289
3.54k
    Unlock();
290
3.54k
  }
_ZN2yb12CowWriteLockINS_6master23PersistentCDCStreamInfoEED2Ev
Line
Count
Source
288
2.54k
  ~CowWriteLock() {
289
2.54k
    Unlock();
290
2.54k
  }
_ZN2yb12CowWriteLockINS_6master33PersistentUniverseReplicationInfoEED2Ev
Line
Count
Source
288
2
  ~CowWriteLock() {
289
2
    Unlock();
290
2
  }
Unexecuted instantiation: _ZN2yb12CowWriteLockINS_6master22PersistentSnapshotInfoEED2Ev
291
292
 private:
293
  CowObject<State>* cow_;
294
};
295
296
} // namespace yb
297
298
#endif /* YB_UTIL_COW_OBJECT_H */