Commit Graph

731 Commits (9d43ad7b074701b9e034f053aa5f39ce70d41894)

Author SHA1 Message Date
Andres Freund 9d43ad7b07 Add ShardPlacement fields required for colocated placement connection mapping. 2017-01-16 13:42:54 -08:00
Andres Freund cdc4e22be7 Fix use of wrong constant.
This could potentially lead to spuriously shared connections if the
first 63 characters of a hostname are the same.
2017-01-16 13:42:53 -08:00
Andres Freund a9acf8c790 Remove fields used in earlier revisions of placement_connection.c. 2017-01-16 13:42:53 -08:00
Jason Petersen 900d71525d Merge pull request #1085 from citusdata/improve_insert_select_error_messages
Improve error messages for INSERT INTO .. SELECT

cr: @jasonmp85
2017-01-16 12:26:49 -07:00
Onder Kalaci 169fb5943e Improve error messages for INSERT INTO .. SELECT
This commit is intended to improve the error messages while planning
INSERT INTO .. SELECT queries. The main motivation for this change is
that we used to map multiple cases into a single message. With this change,
we added explicit error messages for many cases.
2017-01-16 12:16:14 -07:00
Burak Yücesoy 4d581124bb Merge pull request #1105 from citusdata/update_reference_table_metadata_on_remove_node
Remove placement metadata of reference tables after master_remove_node
2017-01-16 11:37:52 +03:00
Burak Yucesoy 96b55249a4 Remove placement metadata of reference tables after master_remove_node
With this change, we start to delete placement of reference tables at given worker node
after master_remove_node UDF call. We remove placement metadata at master node but we do
not drop actual shard from the worker node. There are two reasons for that decision,
first, it is not critical to DROP the shards in the workers because Citus will ignore them
as long as node is removed from cluster and if we add that node back to cluster we will
DROP and recreate all reference tables. Second, if node is unreachable, it becomes
complicated to cover failure cases and have a transaction support.
2017-01-16 11:24:56 +03:00
Murat Tuncer c4f7b9747d Merge pull request #1024 from citusdata/feature/442_view_support
Add view support for select queries
2017-01-13 09:02:07 +02:00
Murat Tuncer 3339240aa7 Report error when original range table id is not found in NewTableId() 2017-01-13 09:39:43 +03:00
Murat Tuncer 3b9a579a63 Add view support
Enables use views within distributed queries.
User can create and use a view on distributed tables/queries
as he/she would use with regular queries.

After this change router queries will have full support for views,
insert into select queries will support reading from views, not
writing into. Outer joins would have a limited support, and would
error out at certain cases such as when a view is in the inner side
of the outer join.

Although PostgreSQL supports writing into views under certain circumstances.
We disallowed that for distributed views.
2017-01-13 09:39:42 +03:00
Önder Kalacı 17f1740974 Merge pull request #1128 from citusdata/add_order_by_to_shardstate_tests
Add ORDER BY clause to shard state tests to have consistent output
2017-01-13 03:18:47 +02:00
Burak Yucesoy 324d2262a0 Add ORDER BY clause to shard state tests to have consistent output
In tests related to automatic reference table creation and deletion, there were some
tests whose output may change order thus creating inconsistent test results. With this
change we add ORDER BY clause to related tests to have consistent output.
2017-01-13 02:42:28 +03:00
Önder Kalacı 5ad49daa3a Merge pull request #1122 from citusdata/onder_update_ref
Refactor CheckShardPlacements() and improve support for node removal
2017-01-12 20:22:00 +02:00
Onder Kalaci 119b691eb4 Refactor CheckShardPlacements() and improve support for node removal
This commit refactors CheckShardPlacements() so that it only considers
modifyingConnection. Also, it skips nodes which are removed from the
cluster.
2017-01-12 20:10:10 +02:00
Murat Tuncer 26421f8e44 Merge pull request #1074 from citusdata/router_query_hint
Add hint to errored real time queries
2017-01-12 10:56:28 +02:00
Murat Tuncer 32b64efdc0 Add hint to errored real time queries 2017-01-12 11:33:35 +03:00
Önder Kalacı e31ebe7c54 Merge pull request #1116 from citusdata/fix_reference_copy
Copy on reference tables should never mark placements invalid
2017-01-12 02:55:16 +02:00
Onder Kalaci 08abe1b213 Copy on reference tables should never mark placements invalid
This commit ensures that COPY does not mark any placement
of reference's state as INVALID in case of an error.
2017-01-12 02:43:41 +02:00
Eren Başak 874602d32e Merge pull request #1112 from citusdata/fix_worker_rack_escaping_bug
Fix escaping of workerrack in NodeListInsertCommand
2017-01-11 09:25:12 +02:00
Eren Basak 218af2d5d4 Fix escaping of workerrack in NodeListInsertCommand
This change fixes a small bug about quoting of workerrack column in
NodeListInsertCommand:

Previous: `"..., '%s'", workerRack`
Now: `"..., %s", quote_literal_cstr(workerRack)`
2017-01-11 10:18:48 +03:00
Andres Freund d29e7ed59e Merge pull request #1113 from citusdata/feature/colocation_mapping
ShardInterval (improved) and ShardPlacement (new) caching.
2017-01-10 18:31:15 -08:00
Andres Freund ab0629ae4a Cache ShardPlacements in metadata cache.
So far we've reloaded them frequently. Besides avoiding that cost -
noticeable for some workloads with large shard counts - it makes it
easier to add information to ShardPlacements that help us make
placement_connection.c colocation aware.
2017-01-10 18:14:18 -08:00
Andres Freund 39c760ae7b Make LoadShardInterval() backed by the metadata cache.
Doing so requires adding a mapping from shardId to the cache
entries. For that metadata_cache.c now maintains an additional
hashtable. That hashtable only references shard intervals in the
dist table cache.
2017-01-10 17:00:19 -08:00
Andres Freund 25c3719ccb Split DistTableCacheEntry() into separate functions.
Previously the function was getting too large. Thus this splits the
function into separate parts for looking up the cache entry and
building the cache contents.
2017-01-10 15:23:18 -08:00
Önder Kalacı 3dccb61f8a Merge pull request #1115 from citusdata/fix_remove_node
Fix CloseNodeConnections to actually close connections
2017-01-11 01:21:21 +02:00
Onder Kalaci 8edf6d5879 Fix CloseNodeConnections to actually close connections
CloseNodeConnections() is supposed to close connections to a given node.
However, before this commit it lacks to actually call PQFinish() on the
connections. Using CloseConnection() handles closing and all other necessary
actions.
2017-01-11 01:13:58 +02:00
Andres Freund cdfb3a76d9 Merge pull request #1114 from citusdata/pg_regress_fix
Fix diff option failure in regression test
2017-01-10 13:18:07 -08:00
Murat Tuncer 7f76dc1e55 Fix diff option failure in regression test 2017-01-10 22:58:47 +03:00
Murat Tuncer e52def563d Merge pull request #1069 from citusdata/feature/citus_tools
Feature/citus tools
2017-01-10 17:01:42 +02:00
Murat Tuncer 02a894165e Add citus tools to default configuration 2017-01-10 17:53:27 +03:00
Murat Tuncer 53c67cff14 Merge pull request #1095 from citusdata/master_disable_node
Add master_disable_node UDF
2017-01-10 10:10:15 +02:00
Murat Tuncer 97fa4e3649 Add master_disable_node UDF
We can now remove nodes from cluster regardless of them
having an active shard placement.
2017-01-10 10:54:57 +03:00
Burak Yücesoy af0843e5d4 Merge pull request #1106 from citusdata/error_out_cte_with_modify
Error out on CTEs with data modifying statement
2017-01-10 09:35:46 +02:00
Burak Yucesoy e6d3d4127c Error out on CTEs with data modifying statement
With this change we start to error out on router planner queries where a common table
expression with data-modifying statement is present. We already do not support if
there is a data-modifying statement using result of the CTE, now we also error out
if CTE itself is data-modifying statement.
2017-01-10 10:30:09 +02:00
Andres Freund 1d0de370ac Merge pull request #1110 from citusdata/feature/pg_regress_diffopts
Change diff output to unified in pg_regress_multi.pl.
2017-01-09 21:04:13 -08:00
Andres Freund bd21bf8d97 Change diff output to unified in pg_regress_multi.pl.
Unified is better understood by a lot of people, and the default
almost everywhere (including github).
2017-01-09 20:51:01 -08:00
Marco Slot 77f201e6df Merge pull request #1109 from citusdata/transaction_recovery_connection_api
Use GetNodeConnection to establish a connection in transaction recovery
2017-01-09 18:31:00 -08:00
Marco Slot b3f92cccb0 PQclear in ReportResultError to prevent memory leaks 2017-01-10 02:51:39 +01:00
Marco Slot a55e606610 Use GetNodeConnection to establish a connection in transaction recovery 2017-01-10 02:44:34 +01:00
Andres Freund 2715823a42 Merge pull request #1108 from citusdata/feature/interruptible-router-queries
Use interrupt checking libpq wrappers in router executor.
2017-01-09 16:33:57 -08:00
Andres Freund b1d8d56922 Use interrupt checking libpq wrappers in router executor. 2017-01-09 14:02:45 -08:00
Andres Freund f7b7b9cab1 Merge pull request #1079 from citusdata/feature/shardstate
Centralized placement ->connection mapping & placement health management
2017-01-09 13:28:22 -08:00
Andres Freund 5e35f6a5dd Convert router executor to placement connection management infrastructure.
Remove the router specific transaction and shard management, and
replace it with the new placement connection API.  This mostly leaves
behaviour alone, except that it is now, inside a transaction, legal to
select from a shard to which no pre-existing connection exists.

To simplify code the code handling task executions for select and
modify has been split into two - the previous coding was starting to
get confusing due to the amount of only conditionally applicable code.

Modification connections & transactions are now always established in
parallel, not just for reference tables.
2017-01-09 13:13:02 -08:00
Andres Freund b8a1c0678c Centralized shard/placement connection and state management.
Currently there are several places in citus that map placements to
connections and that manage placement health. Centralize this
knowledge.  Because of the centralized knowledge about which
connection has previously been used for which shard/placement, this
also provides the basis for relaxing restrictions around combining
various forms of DDL/DML.

Connections for a placement can now be acquired using
GetPlacementConnection(). If the connection is used for DML or DDL the
FOR_DDL/DML flags should be used respectively.  If an individual
remote transaction fails (but the transaction on the master succeeds)
and FOR_DDL/DML have been specified, the placement is marked as
invalid, unless that'd mark all placements for a shard as invalid.
2017-01-09 13:13:02 -08:00
Andres Freund 0823aec1be Merge pull request #1104 from citusdata/connmgr_cleanup
Minor connection/transaction management related cleanups
2017-01-06 09:31:24 -08:00
Andres Freund a6bcd7ee3c Remove useless changing of CurrentMemoryContext. 2017-01-06 09:16:45 -08:00
Andres Freund c514d0bc90 Use FinishConnectionListEstablishment() instead of manually iterating. 2017-01-06 09:16:01 -08:00
Andres Freund c6498cb04e Remove unused LogPreparedTransactions() function.
This is unused since 92c7567008.
2017-01-06 09:15:01 -08:00
Burak Yücesoy e63f525453 Merge pull request #1091 from citusdata/replicate_reference_table_on_add_node
Replicate reference tables when new node is added
2017-01-05 13:37:45 +02:00
Burak Yucesoy 9d756de3ae Replicate reference tables when new node is added
With this change, we start to replicate all reference tables to the new node when new node
is added to the cluster with master_add_node command. We also update replication factor
of reference table's colocation group.
2017-01-05 14:30:41 +03:00