mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-24 10:30:38 +00:00
Commit 7e3805ed3d removed the load balancing code from cql
server, but it did not remove most of the craft that load balancing
introduced. The most of the complexity (and probably the main reason the
code never worked properly) is around service::client_state class which
is copied before been passed to the request processor (because in the past
the processing could have happened on another shard) and then merged back
into the "master copy" because a request processing may have changed it.
This commit remove all this copying. The client_request is passed as a
reference all the way to the lowest layer that needs it and it copy
construction is removed to make sure nobody copies it by mistake.
tests: dev, default c-s load of 3 node cluster
Message-Id: <20190906083050.GA21796@scylladb.com>
77 lines
1.8 KiB
C++
77 lines
1.8 KiB
C++
|
|
/*
|
|
* Copyright (C) 2015 ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* This file is part of Scylla.
|
|
*
|
|
* Scylla is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Scylla is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Scylla. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef SERVICE_QUERY_STATE_HH
|
|
#define SERVICE_QUERY_STATE_HH
|
|
|
|
#include "service/client_state.hh"
|
|
#include "tracing/tracing.hh"
|
|
#include "service_permit.hh"
|
|
|
|
namespace service {
|
|
|
|
class query_state final {
|
|
private:
|
|
client_state& _client_state;
|
|
tracing::trace_state_ptr _trace_state_ptr;
|
|
service_permit _permit;
|
|
|
|
public:
|
|
query_state(client_state& client_state, service_permit permit)
|
|
: _client_state(client_state)
|
|
, _trace_state_ptr(_client_state.get_trace_state())
|
|
, _permit(std::move(permit))
|
|
{ }
|
|
|
|
const tracing::trace_state_ptr& get_trace_state() const {
|
|
return _trace_state_ptr;
|
|
}
|
|
|
|
tracing::trace_state_ptr& get_trace_state() {
|
|
return _trace_state_ptr;
|
|
}
|
|
|
|
client_state& get_client_state() {
|
|
return _client_state;
|
|
}
|
|
|
|
const client_state& get_client_state() const {
|
|
return _client_state;
|
|
}
|
|
api::timestamp_type get_timestamp() {
|
|
return _client_state.get_timestamp();
|
|
}
|
|
|
|
service_permit get_permit() const& {
|
|
return _permit;
|
|
}
|
|
|
|
service_permit&& get_permit() && {
|
|
return std::move(_permit);
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|