Move C++ code out of C headers

The additions into the server.h header used C++ language which caused C
programs to fail to compile. Moved the implementation of the EMAverage
class into the private Server class in the server.hh header and exposed it
via functions in the server.h header. Also temporarily moved
almost_equal_server_scores into the public server.hh as there is no
service.hh header.
This commit is contained in:
Markus Mäkelä
2018-09-08 17:32:59 +03:00
parent 4f6990f90d
commit c81173e320
10 changed files with 85 additions and 52 deletions

View File

@ -3743,12 +3743,6 @@ int create_new_server(CONFIG_CONTEXT* obj)
error = true;
}
}
// nantti, TODO. Decide whether to expose some of this in config, or if the values
// can be calculated at runtime. The "500" or sample_max affects how often a
// session should updates this stat. sample_max should be slightly lower than max sample
// rate (which is less than qps due to the noise filter).
server->response_time = new( std::nothrow) maxbase::EMAverage(0.04, 0.35, 500);
}
else
{

View File

@ -16,6 +16,7 @@
* Internal header for the server type
*/
#include <maxbase/average.hh>
#include <maxscale/server.h>
#include <maxscale/resultset.hh>
@ -24,7 +25,29 @@ std::unique_ptr<ResultSet> serverGetList();
// Private server implementation
class Server : public SERVER
{
// TODO: Move everything here
public:
int response_time_num_samples() const
{
return response_time.num_samples();
}
double response_time_average() const
{
return response_time.average();
}
void response_time_add(double ave, int num_samples)
{
response_time.add(ave, num_samples);
}
private:
// nantti, TODO. Decide whether to expose some of this in config, or if the values
// can be calculated at runtime. The "500" or sample_max affects how often a
// session should updates this stat. sample_max should be slightly lower than max sample
// rate (which is less than qps due to the noise filter).
maxbase::EMAverage response_time = {0.04, 0.35, 500};
};
void server_free(Server* server);

View File

@ -238,7 +238,6 @@ void server_free(Server* server)
}
delete server->disk_space_threshold;
delete server->response_time;
delete server;
}
@ -504,13 +503,15 @@ static void cleanup_persistent_connections(const SERVER* server)
* Designed to be called within a debugger session in order
* to display all active servers within the gateway
*/
void dprintServer(DCB* dcb, const SERVER* server)
void dprintServer(DCB* dcb, const SERVER* srv)
{
if (!server_is_active(server))
if (!server_is_active(srv))
{
return;
}
const Server* server = static_cast<const Server*>(srv);
dcb_printf(dcb, "Server %p (%s)\n", server, server->name);
dcb_printf(dcb, "\tServer: %s\n", server->address);
char* stat = server_status(server);
@ -562,9 +563,9 @@ void dprintServer(DCB* dcb, const SERVER* server)
dcb_printf(dcb, "\tCurrent no. of operations: %d\n", server->stats.n_current_ops);
dcb_printf(dcb, "\tNumber of routed packets: %lu\n", server->stats.packets);
std::ostringstream ave_os;
if (server->response_time->num_samples())
if (server_response_time_num_samples(server))
{
maxbase::Duration dur(server->response_time->average());
maxbase::Duration dur(server_response_time_average(server));
ave_os << dur;
}
else
@ -1541,8 +1542,21 @@ namespace
std::mutex add_response_mutex;
}
void server_add_response_average(SERVER* server, double ave, int num_samples)
void server_add_response_average(SERVER* srv, double ave, int num_samples)
{
std::lock_guard<std::mutex> lock(add_response_mutex);
server->response_time->add(ave, num_samples);
Server* server = static_cast<Server*>(srv);
server->response_time_add(ave, num_samples);
}
int server_response_time_num_samples(const SERVER* srv)
{
const Server* server = static_cast<const Server*>(srv);
return server->response_time_num_samples();
}
double server_response_time_average(const SERVER* srv)
{
const Server* server = static_cast<const Server*>(srv);
return server->response_time_average();
}