MySQL 9.3.0
Source Code Documentation
mysql_cache_manager.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2021, 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTER_SRC_REST_MRS_SRC_CONNECTION_CACHE_MANAGER_H_
27#define ROUTER_SRC_REST_MRS_SRC_CONNECTION_CACHE_MANAGER_H_
28
29#include <cassert>
30
32#include "mrs/configuration.h"
33
36
37#include "secure_string.h" // NOLINT(build/include_subdir)
38
39namespace collector {
40
46};
47
49 public:
51
54 : type_{type},
55 provider_{is_rw() ? configuration.provider_rw_.get()
56 : configuration.provider_ro_.get()} {
57 switch (type) {
60 mysql_user_ = configuration.mysql_user_;
61 mysql_password_ = configuration.mysql_user_password_;
62 break;
65 mysql_user_ = configuration.mysql_user_data_access_;
66 mysql_password_ = configuration.mysql_user_data_access_password_;
67 break;
68 }
69 }
70
71 bool is_rw() const {
72 switch (type_) {
75 return true;
76 default:
77 return false;
78 }
79 }
80
83 std::string mysql_user_;
85};
86
88 public:
93 using Callbacks = MySqlCacheManager::Callbacks;
95
97 public:
100 const std::string &role = {})
102
103 bool object_before_cache(Object, bool dirty) override;
104 bool object_retrived_from_cache(Object) override;
105 void object_remove(Object) override;
106 Object object_allocate(bool wait) override;
107 bool is_default_user(Object &) const;
108
109 const ConnectionConfiguration &get_connection_configuration() const;
110
111 private:
112 void object_restore_defaults(Object &, bool dirty);
113 bool is_default_server(Object &) const;
114
116
117 private:
119 std::string role_;
121 };
122
123 public:
129 "mysql_rest_service_meta_provider"},
130 callbacks_userdata_ro_{{
133 },
134 "mysql_rest_service_data_provider"},
135 callbacks_metadata_rw_{
137 "mysql_rest_service_meta_provider"},
138 callbacks_userdata_rw_{{
141 },
142 "mysql_rest_service_data_provider"} {}
143 MysqlCacheManager(Callbacks *callbacks_meta, Callbacks *callbacks_user)
144 : default_mysql_cache_instances_{10},
145 cache_manager_metadata_ro_{callbacks_meta},
146 cache_manager_userdata_ro_{callbacks_user} {}
147
148 virtual ~MysqlCacheManager() = default;
149
151 switch (type) {
153 return CachedObject(&cache_manager_metadata_ro_, wait);
155 return CachedObject(&cache_manager_userdata_ro_, wait);
157 return CachedObject(&cache_manager_metadata_rw_, wait);
159 return CachedObject(&cache_manager_userdata_rw_, wait);
160 default:
161 assert(nullptr && "Shouldn't happen");
162 return {};
163 }
164 }
165
167 if (obj.parent_ == &cache_manager_metadata_ro_)
169 else if (obj.parent_ == &cache_manager_metadata_ro_)
171 else if (obj.parent_ == &cache_manager_metadata_rw_)
173 else if (obj.parent_ == &cache_manager_userdata_rw_)
175
177 }
178
180 bool wait) {
181 switch (type) {
183 return cache_manager_metadata_ro_.get_instance(wait);
185 return cache_manager_userdata_ro_.get_instance(wait);
187 return cache_manager_metadata_rw_.get_instance(wait);
189 return cache_manager_userdata_rw_.get_instance(wait);
190 default:
191 assert(nullptr && "Shouldn't happen");
192 return {};
193 }
194 }
195
196 std::unique_ptr<collector::CountedMySQLSession> clone_instance(
198
199 virtual void change_instance(CachedObject &instance,
201 switch (type) {
203 change_to(instance, &cache_manager_metadata_ro_);
204 break;
206 change_to(instance, &cache_manager_userdata_ro_);
207 break;
209 change_to(instance, &cache_manager_metadata_rw_);
210 break;
212 change_to(instance, &cache_manager_userdata_rw_);
213 break;
214 }
215 }
216
217 virtual void return_instance(CachedObject &object) {
218 if (object.parent_) object.parent_->return_instance(object);
219 }
220
221 virtual void change_cache_object_limit(uint32_t limit) {
222 cache_manager_metadata_ro_.change_cache_object_limit(limit);
223 cache_manager_userdata_ro_.change_cache_object_limit(limit);
224 cache_manager_metadata_rw_.change_cache_object_limit(limit);
225 cache_manager_userdata_rw_.change_cache_object_limit(limit);
226 }
227
228 void configure(const std::string &json_object);
229
230 private:
231 static void change_to(CachedObject &instance, MySqlCacheManager *m) {
232 if (instance.parent_ != m) {
233 instance.parent_ = m;
234 if (instance.get()) {
235 auto cb = dynamic_cast<MysqlCacheCallbacks *>(m->get_callbacks());
236
237 instance.get()->change_user(
238 cb->get_connection_configuration().mysql_user_,
239 cb->get_connection_configuration().mysql_password_, "");
240 }
241 }
242 }
243
249 MySqlCacheManager cache_manager_metadata_ro_{&callbacks_metadata_ro_,
250 default_mysql_cache_instances_};
251 MySqlCacheManager cache_manager_userdata_ro_{&callbacks_userdata_ro_,
252 default_mysql_cache_instances_};
253 MySqlCacheManager cache_manager_metadata_rw_{&callbacks_metadata_rw_,
254 default_mysql_cache_instances_};
255 MySqlCacheManager cache_manager_userdata_rw_{&callbacks_userdata_rw_,
256 default_mysql_cache_instances_};
257};
258
259} // namespace collector
260
261#endif // ROUTER_SRC_REST_MRS_SRC_CONNECTION_CACHE_MANAGER_H_
Definition: cache_manager.h:41
Object get()
Definition: cache_manager.h:77
CacheManager * parent_
Definition: cache_manager.h:106
Definition: cache_manager.h:114
CacheManager::Object Object
Definition: cache_manager.h:116
CountedMySQLSession * Object
Definition: cache_manager.h:38
Callbacks * get_callbacks() const
Definition: cache_manager.h:164
Definition: mysql_cache_manager.h:48
std::string mysql_user_
Definition: mysql_cache_manager.h:83
DestinationProvider * provider_
Definition: mysql_cache_manager.h:82
ConnectionConfiguration(MySQLConnection type, const mrs::Configuration &configuration)
Definition: mysql_cache_manager.h:52
mysql_harness::SecureString mysql_password_
Definition: mysql_cache_manager.h:84
MySQLConnection type_
Definition: mysql_cache_manager.h:81
bool is_rw() const
Definition: mysql_cache_manager.h:71
Definition: counted_mysql_session.h:38
Definition: destination_provider.h:37
Definition: mysql_cache_manager.h:96
bool object_retrived_from_cache(Object) override
Definition: mysql_cache_manager.cc:143
bool is_default_server(Object &) const
Definition: mysql_cache_manager.cc:170
ConnectionParameters new_connection_params(bool wait)
Definition: mysql_cache_manager.cc:198
bool object_before_cache(Object, bool dirty) override
Definition: mysql_cache_manager.cc:126
void object_remove(Object) override
Definition: mysql_cache_manager.cc:121
int node_rount_robin_
Definition: mysql_cache_manager.h:120
void object_restore_defaults(Object &, bool dirty)
Definition: mysql_cache_manager.cc:155
bool is_default_user(Object &) const
Definition: mysql_cache_manager.cc:181
MysqlCacheCallbacks(const ConnectionConfiguration &configuration=ConnectionConfiguration{}, const std::string &role={})
Definition: mysql_cache_manager.h:98
Object object_allocate(bool wait) override
Definition: mysql_cache_manager.cc:103
const ConnectionConfiguration & get_connection_configuration() const
Definition: mysql_cache_manager.cc:193
ConnectionConfiguration connection_configuration_
Definition: mysql_cache_manager.h:118
std::string role_
Definition: mysql_cache_manager.h:119
Definition: mysql_cache_manager.h:87
virtual CachedObject get_instance(collector::MySQLConnection type, bool wait)
Definition: mysql_cache_manager.h:179
uint32_t default_mysql_cache_instances_
Definition: mysql_cache_manager.h:244
virtual void change_instance(CachedObject &instance, collector::MySQLConnection type)
Definition: mysql_cache_manager.h:199
static void change_to(CachedObject &instance, MySqlCacheManager *m)
Definition: mysql_cache_manager.h:231
virtual collector::MySQLConnection get_type(const CachedObject &obj)
Definition: mysql_cache_manager.h:166
MysqlCacheCallbacks callbacks_userdata_ro_
Definition: mysql_cache_manager.h:246
MySqlCacheManager::Object Object
Definition: mysql_cache_manager.h:94
virtual void change_cache_object_limit(uint32_t limit)
Definition: mysql_cache_manager.h:221
virtual ~MysqlCacheManager()=default
MysqlCacheCallbacks callbacks_metadata_ro_
Definition: mysql_cache_manager.h:245
MysqlCacheManager(const mrs::Configuration &configuration)
Definition: mysql_cache_manager.h:124
virtual void return_instance(CachedObject &object)
Definition: mysql_cache_manager.h:217
MysqlCacheManager(Callbacks *callbacks_meta, Callbacks *callbacks_user)
Definition: mysql_cache_manager.h:143
virtual CachedObject get_empty(collector::MySQLConnection type, bool wait)
Definition: mysql_cache_manager.h:150
MysqlCacheCallbacks callbacks_metadata_rw_
Definition: mysql_cache_manager.h:247
MySQLSession::ConnectionParameters ConnectionParameters
Definition: mysql_cache_manager.h:90
MysqlCacheCallbacks callbacks_userdata_rw_
Definition: mysql_cache_manager.h:248
Definition: configuration.h:47
Null-terminated string which is securely wiped on destruction.
Definition: secure_string.h:59
Definition: cache_manager.h:33
MySQLConnection
Definition: mysql_cache_manager.h:41
@ kMySQLConnectionUserdataRW
Definition: mysql_cache_manager.h:45
@ kMySQLConnectionMetadataRO
Definition: mysql_cache_manager.h:42
@ kMySQLConnectionMetadataRW
Definition: mysql_cache_manager.h:44
@ kMySQLConnectionUserdataRO
Definition: mysql_cache_manager.h:43
static bool cb(unsigned long long new_value)
Definition: option_usage.cc:45
collector::CountedMySQLSession::ConnectionParameters ConnectionParameters
Definition: query_retry_on_ro.cc:38
collector::MysqlCacheManager::CachedObject CachedObject
Definition: handler_db_object_function.cc:54
static int wait(mysql_cond_t *that, mysql_mutex_t *mutex_arg, const char *, unsigned int)
Definition: mysql_cond_v1_native.cc:62
static mysql_service_status_t get(THD **thd) noexcept
Definition: mysql_current_thread_reader_all_empty.cc:31
required string configuration
Definition: replication_asynchronous_connection_failover.proto:49
required string type
Definition: replication_group_member_actions.proto:34
Definition: counted_mysql_session.h:41