1 /*
2 * Copyright (C) 2018 Codership Oy <info@codership.com>
3 *
4 * This file is part of wsrep-lib.
5 *
6 * Wsrep-lib is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * Wsrep-lib is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with wsrep-lib. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #include "db_server_service.hpp"
21 #include "db_server.hpp"
22 #include "db_storage_service.hpp"
23
24 #include "wsrep/logger.hpp"
25 #include "wsrep/high_priority_service.hpp"
26
server_service(db::server & server)27 db::server_service::server_service(db::server& server)
28 : server_(server)
29 { }
30
storage_service(wsrep::client_service &)31 wsrep::storage_service* db::server_service::storage_service(
32 wsrep::client_service&)
33 {
34 return new db::storage_service();
35 }
36
storage_service(wsrep::high_priority_service &)37 wsrep::storage_service* db::server_service::storage_service(
38 wsrep::high_priority_service&)
39 {
40 return new db::storage_service();
41 }
42
release_storage_service(wsrep::storage_service * storage_service)43 void db::server_service::release_storage_service(
44 wsrep::storage_service* storage_service)
45 {
46 delete storage_service;
47 }
48
streaming_applier_service(wsrep::client_service &)49 wsrep::high_priority_service* db::server_service::streaming_applier_service(
50 wsrep::client_service&)
51 {
52 return server_.streaming_applier_service();
53 }
54
streaming_applier_service(wsrep::high_priority_service &)55 wsrep::high_priority_service* db::server_service::streaming_applier_service(
56 wsrep::high_priority_service&)
57 {
58 return server_.streaming_applier_service();
59 }
60
release_high_priority_service(wsrep::high_priority_service * high_priority_service)61 void db::server_service::release_high_priority_service(
62 wsrep::high_priority_service *high_priority_service)
63 {
64 delete high_priority_service;
65 }
66
sst_before_init() const67 bool db::server_service::sst_before_init() const
68 {
69 return true;
70 }
71
sst_request()72 std::string db::server_service::sst_request()
73 {
74 std::ostringstream os;
75 os << server_.server_state().name();
76 wsrep::log_info() << "SST request: "
77 << server_.server_state().name();
78
79 return os.str();
80 }
81
start_sst(const std::string & request,const wsrep::gtid & gtid,bool bypass)82 int db::server_service::start_sst(
83 const std::string& request, const wsrep::gtid& gtid, bool bypass)
84 {
85 server_.donate_sst(request, gtid, bypass);
86 return 0;
87 }
88
background_rollback(wsrep::client_state &)89 void db::server_service::background_rollback(wsrep::client_state&)
90 {
91 }
92
bootstrap()93 void db::server_service::bootstrap()
94 {
95 }
96
log_message(enum wsrep::log::level level,const char * message)97 void db::server_service::log_message(enum wsrep::log::level level,
98 const char* message)
99 {
100 wsrep::log(level, server_.server_state().name().c_str()) << message;
101 }
log_dummy_write_set(wsrep::client_state &,const wsrep::ws_meta & meta)102 void db::server_service::log_dummy_write_set(
103 wsrep::client_state&, const wsrep::ws_meta& meta)
104 {
105 wsrep::log_info() << "Dummy write set: " << meta.seqno();
106 }
107
log_view(wsrep::high_priority_service *,const wsrep::view & v)108 void db::server_service::log_view(wsrep::high_priority_service*,
109 const wsrep::view& v)
110 {
111 wsrep::log_info() << "View:\n" << v;
112 server_.storage_engine().store_view(v);
113 }
114
recover_streaming_appliers(wsrep::client_service &)115 void db::server_service::recover_streaming_appliers(
116 wsrep::client_service&)
117 {
118 }
119
recover_streaming_appliers(wsrep::high_priority_service &)120 void db::server_service::recover_streaming_appliers(
121 wsrep::high_priority_service&)
122 {
123 }
124
get_view(wsrep::client_service &,const wsrep::id & own_id)125 wsrep::view db::server_service::get_view(wsrep::client_service&,
126 const wsrep::id& own_id)
127 {
128 wsrep::view stored_view(server_.storage_engine().get_view());
129 int const my_idx(stored_view.member_index(own_id));
130 wsrep::view my_view(
131 stored_view.state_id(),
132 stored_view.view_seqno(),
133 stored_view.status(),
134 stored_view.capabilities(),
135 my_idx,
136 stored_view.protocol_version(),
137 stored_view.members()
138 );
139 return my_view;
140 }
141
get_position(wsrep::client_service &)142 wsrep::gtid db::server_service::get_position(wsrep::client_service&)
143 {
144 return server_.storage_engine().get_position();
145 }
146
set_position(wsrep::client_service &,const wsrep::gtid & gtid)147 void db::server_service::set_position(wsrep::client_service&,
148 const wsrep::gtid& gtid)
149 {
150 return server_.storage_engine().store_position(gtid);
151 }
152
log_state_change(enum wsrep::server_state::state prev_state,enum wsrep::server_state::state current_state)153 void db::server_service::log_state_change(
154 enum wsrep::server_state::state prev_state,
155 enum wsrep::server_state::state current_state)
156 {
157 server_.log_state_change(prev_state, current_state);
158 }
159
wait_committing_transactions(int)160 int db::server_service::wait_committing_transactions(int)
161 {
162 throw wsrep::not_implemented_error();
163 }
164
debug_sync(const char *)165 void db::server_service::debug_sync(const char*)
166 {
167
168 }
169