Commit Graph

922 Commits (6907c56bd2c524b2316dfc45bb99261fd8bf0136)

Author SHA1 Message Date
Önder Kalacı 6907c56bd2 Merge pull request #1268 from citusdata/remove_adding_qual_prototype
Replace adding the qual logic with attribute equivalence for INSERT ... SELECT
2017-04-13 13:48:14 +03:00
Onder Kalaci 6c9296aca0 Remove uninstantiated qual logic, use attribute equivalences
In this PR, we aim to deduce whether each of the RTE_RELATION
is joined with at least on another RTE_RELATION on their partition keys. If each
RTE_RELATION follows the above rule, we can conclude that all RTE_RELATIONs are
joined on their partition keys.

In order to do that, we invented a new equivalence class namely:
AttributeEquivalenceClass. In very simple words, a AttributeEquivalenceClass is
identified by an unique id and consists of a list of AttributeEquivalenceMembers.

Each AttributeEquivalenceMember is designed to identify attributes uniquely within the
whole query. The necessity of this arise since varno attributes are defined within
a single level of a query. Instead, here we want to identify each RTE_RELATION uniquely
and try to find equality among each RTE_RELATION's partition key.

Whenever we find an equality clause A = B, where both A and B originates from
relation attributes (i.e., not random expressions), we create an
AttributeEquivalenceClass to record this knowledge. If we later find another
equivalence B = C, we create another AttributeEquivalenceClass. Finally, we can
apply transitity rules and generate a new AttributeEquivalenceClass which includes
A, B and C.

Note that equality among the members are identified by the varattno and rteIdentity.

Each equality among RTE_RELATION is saved using an AttributeEquivalenceClass where
each member attribute is identified by a AttributeEquivalenceMember. In the final
step, we try generate a common attribute equivalence class that holds as much as
AttributeEquivalenceMembers whose attributes are a partition keys.
2017-04-13 11:51:26 +03:00
Burak Velioglu 06b3ada188 Merge pull request #1318 from citusdata/ltree_copy_branch
Change checks with built-in type (omit ltree)
2017-04-11 14:50:19 +03:00
velioglu 584c0c34a3 Change checks with built-in type 2017-04-11 14:41:37 +03:00
Burak Velioglu 91d558deeb Merge pull request #1300 from citusdata/ltree_copy_branch
Change copy format of ltree
2017-04-11 08:41:44 +03:00
velioglu 5ba77d8abb Check binary output function of type. 2017-04-10 16:28:09 +03:00
Jason Petersen 960c897877 Merge pull request #1277 from citusdata/error_out_incomplete_installation
Error out if binary citus version does not match installed extension

cr: @jasonmp85
2017-04-04 16:49:03 -06:00
Jason Petersen fc2c23f15a Use RESET for GUC test, not reconnect
More limited in what it does, better test.
2017-04-04 16:40:17 -06:00
Jason Petersen b0a8d9da34 Add comments, use strncmp, clean up GUC desc.
Good to go!
2017-04-04 16:16:49 -06:00
Jason Petersen 2ce82abb04 Clean up remaining error messages
Added details and hints, based off of similar PostgreSQL scenarios.
2017-04-04 16:11:59 -06:00
Jason Petersen 41612177be Clean up ErrorIfUnstableCreateOrAlterExtensionStmt
Swaps an Assert in for an ereport, and adds details and hints to the
error message to help users with a possibly confusing scenario.
2017-04-04 15:58:57 -06:00
Jason Petersen 0e6e42c59a Refactor utility-skip/extn-check code
This was getting pretty long and complex in the context of the main
utility hook. Moved out the checks for what should skip Citus process-
ing and what should have version checks performed.
2017-04-04 15:07:22 -06:00
Burak Yucesoy 66a801dd4e Add enable_version_checks GUC and address feedback 2017-04-04 19:11:13 +03:00
Jason Petersen 0707f262b6 Self-implemented review feedback
The use of a bare src/ rather than $srcdir caused configure to fail
during VPATH builds. With our additional dependency upon AWK, we need
to call AC_PROG_AWK, otherwise environments may not have $AWK set.
Finally, citus_version.h should be in .gitignore.
2017-04-03 22:55:12 -06:00
Burak Yucesoy 63b232e4ba Error out if binary citus version does not match installed extension
With this change, we start to error out if loaded citus binaries does not match
the available major version or installed citus extension version. In this case
we force user to restart the server or run ALTER EXTENSION depending on the
situation
2017-04-03 17:36:13 -06:00
Jason Petersen ae575463dd Merge pull request #1287 from citusdata/support_concurrently
Support (CREATE|DROP) INDEX CONCURRENTLY

cr: @metdos
2017-04-03 12:06:11 -06:00
Jason Petersen 963090fe05 Address review feedback
Should just about do it.
2017-04-03 11:44:57 -06:00
Jason Petersen afe6908e26 Improve CONCURRENTLY-related error messages
Thought this looked slightly nicer than the default behavior.

Changed preventTransaction to concurrent to be clearer that this code
path presently affects CONCURRENTLY code only.
2017-04-03 11:19:15 -06:00
Jason Petersen ddc8d7111b Update documentation
Ensure all functions have comments, etc.
2017-04-03 11:19:15 -06:00
Jason Petersen d128ad723a Address MX CONCURRENTLY problems
Adds a non-transactional multi-command method to propagate DDLs to all
MX/metadata-synced nodes.
2017-04-03 11:19:15 -06:00
Jason Petersen afa9bd4840 Add code to set index validity on failure
Coordinator code marks index as invalid as a base, set it as valid in a
transactional layer atop that base, then proceeds with worker commands.
If a worker command has problems, the rollback results in an index with
isvalid = false. If everything succeeds, the user sees a valid index.
2017-04-03 11:19:15 -06:00
Jason Petersen 236c6900ff Remove CONCURRENTLY checks, fix tests
Still pending failure testing, which broke with my recent changes.
2017-04-03 11:19:15 -06:00
Jason Petersen c7f31ee90a Change DropStmt to generate worker DDL on master
Because we can't execute DROP INDEX CONCURRENTLY during transactions,
worker_apply_shard_ddl_command is insufficient.
2017-04-03 11:19:15 -06:00
Jason Petersen 7173d85071 Change IndexStmt to generate worker DDL on master
Because we can't execute CREATE INDEX CONCURRENTLY during transactions,
worker_apply_shard_ddl_command is insufficient.
2017-04-03 11:19:14 -06:00
Marco Slot d5a0a25441 Merge pull request #851 from citusdata/task_tracker_batching
Batch task_tracker_status calls to reduce task-tracker query times
2017-04-03 12:17:13 +02:00
Marco Slot a339c7bbd6 Batch task_tracker_status calls to reduce task-tracker query times 2017-03-31 11:54:11 +02:00
Metin Döşlü 857f56fb0a Merge pull request #1299 from citusdata/support_trigger_all
Add disable/enable trigger all support
2017-03-30 18:36:14 +02:00
Metin Doslu 5670389bec Add disable/enable trigger all support 2017-03-29 22:00:14 +03:00
Önder Kalacı 055ecaa79a Merge pull request #1261 from citusdata/fix_wrong_pushdown_properly
Fix pushing down wrong queries for INSERT ... SELECT queries
2017-03-24 12:52:31 +02:00
Onder Kalaci 6b66a023aa Fix pushing down wrong queries for INSERT ... SELECT queries
Before this commit, in certain cases router planner allowed pushing
down JOINs that are not on the partition keys.

With @anarazel's suggestion, we change the logic to use uninstantiated
parameter. Previously, the planner was traversing on the restriction
information and once it finds the parameter, it was replacing it with
the shard range. With this commit, instead of traversing the restrict
infos, the planner explicitly checks for the equivalence of the relation
partition key with the uninstantiated parameter. If finds an equivalence,
it adds the restrictions. In this way, we have more control over the
queries that are pushed down.
2017-03-24 11:37:35 +02:00
Ozgun Erdogan 8d2ea0cc0a Merge pull request #1295 from citusdata/ozgune-readme-step-numbering
Minor update README.md to fix the numbers in Docker installation steps.
2017-03-23 14:52:26 -07:00
Ozgun Erdogan 4150a062af Update README.md
Updated the Local Cluster steps to include the right numbering.
2017-03-23 11:00:32 -07:00
Jason Petersen 009970e8e5 Merge pull request #1278 from citusdata/master_ddl_first
Execute DDL on coordinator before workers

cr: @metdos, @anarazel
2017-03-22 17:45:06 -06:00
Jason Petersen ef1a42c4dc Address code review comments 2017-03-22 17:29:17 -06:00
Jason Petersen 48db2f1fc8 Rework ReplicateGrantStmt to use new flow
This was the impetus for the previous commit that changed from using a
DDLJob * to a List * of them.
2017-03-22 17:29:16 -06:00
Jason Petersen 41b2317457 Change DDLJob usage to be wrapped in lists
To prepare for GRANT fixes.
2017-03-22 17:29:16 -06:00
Jason Petersen dd3f2f6fbb Fix MX tests
Missed some of these. One had a bad DDL statement to begin with (mixed
up column type and column name) and other was just master/worker order.
2017-03-22 17:21:49 -06:00
Jason Petersen a5d32a0c22 Move worker execution to after master, fix tests
Some tests relied on worker errors though local commands were invalid.
Fixed those by ensuring preconditions were met to have command work
correctly. Otherwise most test changes are related to slight changes
in local/remote error ordering.
2017-03-22 17:21:49 -06:00
Jason Petersen c04ecae919 Remove execution from stmt-specific util functions
Now have a single Execute call in the main body.
2017-03-22 17:21:49 -06:00
Jason Petersen 55910d4851 Rename Process*Stmt functions to Plan*Stmt
To reflect their new purpose planning a DDLJob rather than fully
processing a distributed DDL statement.
2017-03-22 17:21:49 -06:00
Jason Petersen 041aff8eed Refactor ExecuteDistDDLCommand to expect struct
Will let us separate out the determination of what to execute from its
actual execution.
2017-03-22 17:21:49 -06:00
Jason Petersen 5838581854 Minor permissions test fix
When running under Enterprise, some of the GRANT commands and whatnot
are propagated. Guarding that section with a call to disable DDL prop.
fixes everything.
2017-03-22 17:07:05 -06:00
Jason Petersen f800e0c01d Merge pull request #1281 from citusdata/fix_permission_check
Fix access permission checks for distributed relations

cr: @jasonmp85
2017-03-22 15:35:59 -06:00
Metin Doslu 2260adf163 Add basic permission checking tests 2017-03-22 15:25:00 -06:00
Metin Doslu 1268a2553d Update regression tests for changing explain output 2017-03-22 15:25:00 -06:00
Metin Doslu 16a014e50d Fix access permission checks for distributed relations
With this commit, we add the range table list of the original query to our
custom plan. Therefore, PostgreSQL can check relations in the original query
for access permissions and error out if the proper access is not granted.
2017-03-22 15:25:00 -06:00
Jason Petersen eb7cb5af9c Set tab size for GitHub display
Hooray!
2017-03-22 13:03:39 -06:00
Murat Tuncer 1488f152a4 Merge pull request #1142 from citusdata/bugfix/750_router_modify_errors
Rephrase router modify errors
2017-03-16 14:52:25 +02:00
Murat Tuncer 86e938ab96 Rephrase router modify errors
generic "distributed modifications must target exactly one shard"
message is replaced by more context aware error messages.
2017-03-16 15:09:10 +03:00
Burak Velioglu 117ca8f225 Merge pull request #1267 from citusdata/add_udf_to_get_size_of_table
Add udfs to get size of table
2017-03-16 15:02:11 +03:00