mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-27 20:05:10 +00:00
This commit adds support for executing ALTER KS for keyspaces with tablets and utilizes all the previous commits. The ALTER KS is handled in alter_keyspace_statement, where a global topology request in generated with data attached to system.topology table. Then, once topology state machine is ready, it starts to handle this global topology event, which results in producing mutations required to change the schema of the keyspace, delete the system.topology's global req, produce tablets mutations and additional mutations for a table tracking the lifetime of the whole req. Tracking the lifetime is necessary to not return the control to the user too early, so the query processor only returns the response while the mutations are sent.
72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
/*
|
|
* Copyright (C) 2014-present ScyllaDB
|
|
*
|
|
* Modified by ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "transport/messages_fwd.hh"
|
|
#include "transport/event.hh"
|
|
|
|
#include "cql3/statements/raw/cf_statement.hh"
|
|
#include "cql3/cql_statement.hh"
|
|
|
|
#include <seastar/core/shared_ptr.hh>
|
|
|
|
#include "service/raft/raft_group0_client.hh"
|
|
|
|
class mutation;
|
|
|
|
namespace cql3 {
|
|
|
|
class query_processor;
|
|
|
|
namespace statements {
|
|
|
|
namespace messages = cql_transport::messages;
|
|
|
|
/**
|
|
* Abstract class for statements that alter the schema.
|
|
*/
|
|
class schema_altering_statement : public raw::cf_statement, public cql_statement_no_metadata {
|
|
private:
|
|
const bool _is_column_family_level;
|
|
|
|
protected:
|
|
explicit schema_altering_statement(timeout_config_selector timeout_selector = &timeout_config::other_timeout);
|
|
|
|
schema_altering_statement(cf_name name, timeout_config_selector timeout_selector = &timeout_config::other_timeout);
|
|
|
|
virtual bool needs_guard(query_processor& qp, service::query_state& state) const override;
|
|
|
|
/**
|
|
* When a new data_dictionary::database object (keyspace, table) is created, the creator needs to be granted all applicable
|
|
* permissions on it.
|
|
*
|
|
* By default, this function does nothing.
|
|
*/
|
|
virtual future<> grant_permissions_to_creator(const service::client_state&) const;
|
|
|
|
virtual bool depends_on(std::string_view ks_name, std::optional<std::string_view> cf_name) const override;
|
|
|
|
virtual uint32_t get_bound_terms() const override;
|
|
|
|
virtual void prepare_keyspace(const service::client_state& state) override;
|
|
|
|
virtual future<::shared_ptr<messages::result_message>>
|
|
execute(query_processor& qp, service::query_state& state, const query_options& options, std::optional<service::group0_guard> guard) const override;
|
|
|
|
public:
|
|
virtual future<std::tuple<::shared_ptr<cql_transport::event::schema_change>, std::vector<mutation>, cql3::cql_warnings_vec>> prepare_schema_mutations(query_processor& qp, const query_options& options, api::timestamp_type) const = 0;
|
|
mutable utils::UUID global_req_id;
|
|
};
|
|
|
|
}
|
|
|
|
}
|