Allow modify some other settings

This commit is contained in:
kssenii 2021-08-28 16:56:39 +03:00
parent a2b0996ac3
commit fd621381c7
5 changed files with 27 additions and 5 deletions

View File

@ -151,11 +151,9 @@ void DatabaseMaterializedPostgreSQL::applySettings(const SettingsChanges & setti
if (!local_context->isInternalQuery()) if (!local_context->isInternalQuery())
throw Exception(ErrorCodes::QUERY_NOT_ALLOWED, "Changing setting `{}` is not allowed", change.name); throw Exception(ErrorCodes::QUERY_NOT_ALLOWED, "Changing setting `{}` is not allowed", change.name);
} }
else if (change.name == "materialized_postgresql_allow_automatic_update") else if ((change.name == "materialized_postgresql_allow_automatic_update") || (change.name == "materialized_postgresql_max_block_size"))
{
}
else if (change.name == "materialized_postgresql_max_block_size")
{ {
replication_handler->setSetting(change);
} }
else else
{ {

View File

@ -8,6 +8,7 @@
#include <DataTypes/DataTypeNullable.h> #include <DataTypes/DataTypeNullable.h>
#include <Interpreters/Context.h> #include <Interpreters/Context.h>
#include <Interpreters/InterpreterInsertQuery.h> #include <Interpreters/InterpreterInsertQuery.h>
#include <Common/SettingsChanges.h>
namespace DB namespace DB
@ -634,6 +635,15 @@ void MaterializedPostgreSQLConsumer::removeNested(const String & postgres_table_
} }
void MaterializedPostgreSQLConsumer::setSetting(const SettingChange & setting)
{
if (setting.name == "materialized_postgresql_max_block_size")
max_block_size = setting.value.safeGet<UInt64>();
else if (setting.name == "materialized_postgresql_allow_automatic_update")
allow_automatic_update = setting.value.safeGet<bool>();
}
/// Read binary changes from replication slot via COPY command (starting from current lsn in a slot). /// Read binary changes from replication slot via COPY command (starting from current lsn in a slot).
bool MaterializedPostgreSQLConsumer::readFromReplicationSlot() bool MaterializedPostgreSQLConsumer::readFromReplicationSlot()
{ {

View File

@ -13,6 +13,7 @@
namespace DB namespace DB
{ {
struct SettingChange;
class MaterializedPostgreSQLConsumer class MaterializedPostgreSQLConsumer
{ {
@ -40,6 +41,8 @@ public:
void removeNested(const String & postgres_table_name); void removeNested(const String & postgres_table_name);
void setSetting(const SettingChange & setting);
private: private:
/// Read approximarely up to max_block_size changes from WAL. /// Read approximarely up to max_block_size changes from WAL.
bool readFromReplicationSlot(); bool readFromReplicationSlot();
@ -110,7 +113,7 @@ private:
/// current_lsn converted from String to Int64 via getLSNValue(). /// current_lsn converted from String to Int64 via getLSNValue().
UInt64 lsn_value; UInt64 lsn_value;
const size_t max_block_size; size_t max_block_size;
bool allow_automatic_update; bool allow_automatic_update;
String table_to_insert; String table_to_insert;

View File

@ -451,6 +451,14 @@ void PostgreSQLReplicationHandler::removeTableFromPublication(pqxx::nontransacti
} }
void PostgreSQLReplicationHandler::setSetting(const SettingChange & setting)
{
consumer_task->deactivate();
consumer->setSetting(setting);
consumer_task->schedule();
}
void PostgreSQLReplicationHandler::shutdownFinal() void PostgreSQLReplicationHandler::shutdownFinal()
{ {
try try

View File

@ -10,6 +10,7 @@ namespace DB
{ {
class StorageMaterializedPostgreSQL; class StorageMaterializedPostgreSQL;
struct SettingChange;
class PostgreSQLReplicationHandler class PostgreSQLReplicationHandler
{ {
@ -50,6 +51,8 @@ public:
void removeTableFromReplication(const String & postgres_table_name); void removeTableFromReplication(const String & postgres_table_name);
void setSetting(const SettingChange & setting);
private: private:
using MaterializedStorages = std::unordered_map<String, StorageMaterializedPostgreSQL *>; using MaterializedStorages = std::unordered_map<String, StorageMaterializedPostgreSQL *>;