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