citus/src/backend/distributed/commands
Nils Dijk 65bd540943
Feature: configure object propagation behaviour in transactions (#5724)
DESCRIPTION: Add GUC to control ddl creation behaviour in transactions

Historically we would _not_ propagate objects when we are in a transaction block. Creation of distributed tables would not always work in sequential mode, hence objects created in the same transaction as distributing a table that would use the just created object wouldn't work. The benefit was that the user could still benefit from parallelism.

Now that the creation of distributed tables is supported in sequential mode it would make sense for users to force transactional consistency of ddl commands for distributed tables. A transaction could switch more aggressively to sequential mode when creating new objects in a transaction.

We don't change the default behaviour just yet.

Also, many objects would not even propagate their creation when the transaction was already set to sequential, leaving the probability of a self deadlock. The new policy checks solve this discrepancy between objects as well.
2022-03-01 17:29:31 +03:00
..
README.md Fix typos. Spurred spotting "connectios" in logs 2021-10-25 13:54:09 +00:00
alter_table.c Refactor CreateDistributedTable to take column name 2022-02-21 12:07:17 +03:00
call.c Fixes the issue seen in https://github.com/citusdata/citus-enterprise/issues/745 2022-02-03 09:40:46 -08:00
cascade_table_operation_for_connected_relations.c Dont auto-undistribute user-added citus local tables (#5314) 2021-10-28 12:10:26 +03:00
citus_add_local_table_to_metadata.c Handle tables and objects as metadata. Update UDFs accordingly 2022-01-31 16:20:15 +03:00
citus_global_signal.c Drop support for CitusInitiatedBackend 2022-02-24 12:12:43 +01:00
cluster.c Pass ProcessUtilityContext to .preprocess 2021-01-14 17:12:00 +03:00
collation.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
create_distributed_table.c Allow unsafe triggers via a GUC 2022-02-21 22:45:17 -08:00
database.c Refactor EnsureSequentialMode functions (#5704) 2022-02-14 18:38:21 +03:00
dependencies.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
distribute_object_ops.c Allow unsafe triggers via a GUC 2022-02-21 22:45:17 -08:00
drop_distributed_table.c Prevent cache usage on citus_drop_trigger codepaths 2021-11-18 20:24:51 +03:00
extension.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
foreign_constraint.c Remove get_relation_constraint_oid_compat 2021-10-11 11:53:00 +03:00
foreign_server.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
function.c Start to propagate functions to worker nodes with 2022-02-18 13:56:51 +03:00
grant.c Pass ProcessUtilityContext to .preprocess 2021-01-14 17:12:00 +03:00
index.c Add support for TEXT SEARCH CONFIGURATION objects (#5685) 2022-02-17 13:12:46 +01:00
index_pg_source.c Fix Semmle errors (#4636) 2021-02-08 18:37:44 +03:00
local_multi_copy.c Fix style 2021-09-03 16:09:59 +03:00
multi_copy.c Disallow remote execution from queries on shards 2022-01-07 17:46:21 +01:00
policy.c Pass ProcessUtilityContext to .preprocess 2021-01-14 17:12:00 +03:00
rename.c Rename ddlJob->commandString to ddlJob->metadataSyncCommand 2021-10-29 23:45:43 +03:00
role.c Do not acquire locks on node metadata explicitly 2022-02-24 03:19:56 +03:00
schema.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
sequence.c Unify old GUCs into a single one 2022-02-04 10:52:56 +01:00
statistics.c Drop ruleutils copied for statistics 2022-01-20 17:28:19 +03:00
subscription.c Remove copyright years (#2918) 2019-10-15 17:44:30 +03:00
table.c Allow unsafe triggers via a GUC 2022-02-21 22:45:17 -08:00
text_search.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
transmit.c Fix unlimited copy size variable's value 2021-09-03 15:41:28 +03:00
trigger.c Allow unsafe triggers via a GUC 2022-02-21 22:45:17 -08:00
truncate.c Support TRUNCATE for foreign tables 2022-02-17 09:59:53 +03:00
type.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
utility_hook.c Feature: configure object propagation behaviour in transactions (#5724) 2022-03-01 17:29:31 +03:00
vacuum.c Drop support for citus.multi_shard_commit_protocol (#5380) 2021-10-21 14:01:28 +02:00
variableset.c Hide shards from application_name's with a specific prefix 2022-01-18 15:20:55 +04:00

README.md

Commands

The commands module is modeled after backend/commands from the postgres repository and contains the logic for Citus on how to run these commands on distributed objects. Even though the structure of the directory has some resemblence to its postgres relative, files here are somewhat more fine-grained. This is due to the nature of citus commands that are heavily focused on distributed tables. Instead of having all commands in tablecmds.c they are often moved to files that are named after the command.

File Description
create_distributed_table.c Implementation of UDF's for creating distributed tables
drop_distributed_table.c Implementation for dropping metadata for partitions of distributed tables
extension.c Implementation of CREATE EXTENSION commands for citus specific checks
foreign_constraint.c Implementation of helper functions for foreign key constraints
grant.c Placeholder for code granting users access to relations, implemented as enterprise feature
index.c Implementation of commands specific to indices on distributed tables
multi_copy.c Implementation of COPY command. There are multiple different copy modes which are described in detail below
policy.c Implementation of CREATE\ALTER POLICY commands.
rename.c Implementation of ALTER ... RENAME ... commands. It implements the renaming of applicable objects, otherwise provides the user with a warning
schema.c
sequence.c Implementation of CREATE/ALTER SEQUENCE commands. Primarily checks correctness of sequence statements as they are not propagated to the worker nodes
table.c
transmit.c Implementation of COPY commands with format transmit set in the options. This format is used to transfer files from one node to another node
truncate.c Implementation of TRUNCATE commands on distributed tables
utility_hook.c This is the entry point from postgres into the commands module of citus. It contains the implementation that gets registered in postgres' ProcessUtility_hook callback to extends the functionality of the original ProcessUtility. This code is used to route the incoming commands to their respective implementation in Citus
vacuum.c Implementation of VACUUM commands on distributed tables

COPY

The copy command is overloaded for a couple of use-cases specific to citus. The syntax of the command stays the same, however the implementation might slightly differ from the stock implementation. The overloading is mostly done via extra options that Citus uses to indicate how to operate the copy. The options used are described below.

FORMAT transmit

Implemented in transmit.c

TODO: to be written by someone with enough knowledge to write how, when and why it is used.

FORMAT result

Implemented in multi_copy.c

TODO: to be written by someone with enough knowledge to write how, when and why it is used.