Commit Graph

5552 Commits (aa72313c85a865c9b3d28038cdd16d65008a86a9)

Author SHA1 Message Date
Yanwen Jin aa72313c85 Fix merge errors 2022-02-07 13:54:08 -08:00
ywj 1483b9d5c0
Merge branch 'master' into dev/yanwjin/separate_columnar2 2022-02-07 13:44:21 -08:00
Yanwen Jin 8449a99c2a Add columnar safelib dir check in Makefile 2022-02-07 12:43:15 -08:00
Yanwen Jin e262f6ff48 Address latest comments after merge from master 2022-02-07 12:09:25 -08:00
Burak Velioglu 6376eaf0e0
Merge pull request #5684 from citusdata/velioglu/superuser_connection_for_dep
Use super user connection while propagating dependent objects' pg_dist_object entries
2022-02-07 18:38:29 +03:00
Burak Velioglu 0a70b78bf5
Add test for dist type 2022-02-07 17:50:49 +03:00
Burak Velioglu c0aece64d0
Add test for checking distributed extension function 2022-02-07 17:50:48 +03:00
Burak Velioglu ab248c1785
Check object ownership while creating pg_dist_object entries on remote 2022-02-07 17:50:48 +03:00
Burak Velioglu 8ae7577581
Use superuser connection while syncing dependent objects' pg_dist_object tuples 2022-02-07 17:50:45 +03:00
Marco Slot d7858709b4
Merge pull request #5690 from citusdata/marcocitus/placement-policy-cleanup 2022-02-07 10:28:02 +01:00
Marco Slot 872f0a79db Remove random shard placement policy 2022-02-06 21:55:58 +01:00
Marco Slot 0cae8e7d6b Remove local-node-first shard placement 2022-02-06 21:36:34 +01:00
Teja Mupparti c8e504dd69 Fix the issue #5673
If the expression is simple, such as, SELECT function() or PEFORM function()
in PL/PgSQL code, PL engine does a simple expression evaluation which can't
interpret the Citus CustomScan Node. Code checks for simple expressions when
executing an UDF but missed the DO-Block scenario, this commit fixes it.
2022-02-04 15:44:53 -08:00
Ying Xu b5c116449b
Removed dependency from EnsureTableOwner (#5676)
Removed dependency for EnsureTableOwner. Also removed pg_fini() and columnar_tableam_finish() Still need to remove CheckCitusVersion dependency to make Columnar_tableam.h dependency free from Citus.
2022-02-04 12:45:07 -08:00
Onur Tirtir 79442df1b7
Fix coordinator/worker query targetlists for agg. that we cannot push-down (#5679)
Previously, we were wrapping targetlist nodes with Vars that reference
to the result of the worker query, if the node itself is not `Const` or
not a `Param`. Indeed, we should not do that unless the node itself is
a `Var` node or contains a `Var` within it (e.g.: `OpExpr(Var(column_a) > 2)`).
Otherwise, when worker query returns empty result set, then combine
query exec would crash since the `Var` would be pointing to an empty
tuple slot, which is not desirable for the node-executor methods.
2022-02-04 05:37:25 -08:00
Önder Kalacı b9b4833710
Merge pull request #5678 from citusdata/unify_gucs
Unify old GUCs into a single one
2022-02-04 14:18:10 +01:00
Onder Kalaci 72d7d92611 Apply code review feedback 2022-02-04 10:52:57 +01:00
Onder Kalaci 923bb194a4 Move isolation_multiuser_locking to MX tests 2022-02-04 10:52:57 +01:00
Onder Kalaci bcb00e3318 remove not used files 2022-02-04 10:52:57 +01:00
Onder Kalaci ff234fbfd2 Unify old GUCs into a single one
Replaces citus.enable_object_propagation with citus.enable_metadata_sync

Also, within Citus 11 release cycle, we added citus.enable_metadata_sync_by_default,
that is also replaced with citus.enable_metadata_sync.

In essence, when citus.enable_metadata_sync is set to true, all the objects
and the metadata is send to the remote node.

We strongly advice that the users never changes the value of
this GUC.
2022-02-04 10:52:56 +01:00
Teja Mupparti f31bce5b48 Fixes the issue seen in https://github.com/citusdata/citus-enterprise/issues/745
With this commit, rebalancer backends are identified by application_name = citus_rebalancer
and the regular internal backends are identified by application_name = citus_internal
2022-02-03 09:40:46 -08:00
jeff-davis b072b9235e
Columnar: fix checksums, broken in a4067913. (#5669)
Checksums must be set directly before writing the page. log_newpage()
sets the page LSN, and therefore invalidates the checksum.
2022-02-02 13:22:11 -08:00
Önder Kalacı 4bb7283af1
Merge pull request #5674 from citusdata/minor_fixes_metadata_sync
Minor fixes for metadata syncing
2022-02-02 11:40:51 +01:00
Onder Kalaci 650243927c Relax some transactional limications on activate node
We already enforce EnsureSequentialModeMetadataOperations(), and given that all activate node is transaction, we should be fine
2022-02-01 15:56:55 +01:00
Onder Kalaci 34d91009ed Update outdated comment
As of the current HEAD, we support sequences as first class objects
2022-02-01 15:37:10 +01:00
Marco Slot 593861f285
Merge pull request #5660 from citusdata/marcocitus/function-call-pushdown-from-workers 2022-02-01 14:37:20 +01:00
Marco Slot 63c6896716 Enable function call pushdown from workers 2022-02-01 14:13:25 +01:00
Önder Kalacı f712dfc558
Add tests coverage (#5672)
For extension owned tables with sequences
2022-02-01 15:39:52 +03:00
Hanefi Onaldi 82abf22375
Merge pull request #5671 from citusdata/changelog-updates 2022-02-01 14:29:39 +03:00
Hanefi Onaldi beafde5ff5
Add changelog entries for 10.2.4 2022-02-01 13:53:11 +03:00
Hanefi Onaldi 768643644b
Add changelog entries for 10.1.4 2022-02-01 13:53:10 +03:00
jeff-davis c758d94742
Merge branch 'master' into dev/yanwjin/separate_columnar2 2022-01-31 11:43:03 -08:00
Burak Velioglu ed8e137467
Merge pull request #5619 from citusdata/velioglu/table_wo_seq_prototype
Handle tables and sequences as objects
2022-01-31 18:07:32 +03:00
Burak Velioglu f88cc230bf
Handle tables and objects as metadata. Update UDFs accordingly
With this commit we've started to propagate sequences and shell
tables within the object dependency resolution. So, ensuring any
dependencies for any object will consider shell tables and sequences
as well. Separate logics for both shell tables and sequences have
been removed.

Since both shell tables and sequences logic were implemented as a
part of the metadata handling before that logic, we were propagating
them while syncing table metadata. With this commit we've divided
metadata (which means anything except shards thereafter) syncing
logic into multiple parts and implemented it either as a part of
ActivateNode. You can check the functions called in ActivateNode
to check definition of different metadata.

Definitions of start_metadata_sync_to_node and citus_activate_node
have also been updated. citus_activate_node will basically create
an active node with all metadata and reference table shards.
start_metadata_sync_to_node will be same with citus_activate_node
except replicating reference tables. stop_metadata_sync_to_node
will remove all the metadata. All of those UDFs need to be called
by superuser.
2022-01-31 16:20:15 +03:00
Yanwen Jin 70e3c17edd Fix dir typo in columnar Makefile 2022-01-28 18:16:42 -08:00
Yanwen Jin e07f47befd Remove pg_fini 2022-01-28 17:08:10 -08:00
Yanwen Jin cd91f6bf6f Modify the build path in columnar makefile 2022-01-28 17:06:44 -08:00
Yanwen Jin 341787cb0c Remove whitespaces 2022-01-28 11:39:46 -08:00
Yanwen Jin 2802be8dd2 Fix style 2022-01-28 11:32:48 -08:00
Yanwen Jin a242159088 Addressing part of comments 2022-01-28 11:17:13 -08:00
Önder Kalacı f68ac4a7cf
Consider foreign keys between reference tables (#5659)
On #5071, we avoid edge cases, but below there are foreign key constraints as well

This commit makes sure we cover those as well
2022-01-28 13:38:14 +01:00
Yanwen Jin 24d1a01521 Some clean up 2022-01-27 15:42:56 -08:00
Yanwen Jin 2c2ea7a5c7 [Columnar] Build columnar.so and let citus depends on it 2022-01-27 15:25:26 -08:00
Ying Xu ce4056ffd8 Deleted Safeclib files and created symbolic link safeclib instead (#5651)
* made a new symbolic link for safeclib and deleted safeclib files. Currently WIP

* added safeclib path to OBJS paths. Columnar successfully builds but Citus build still fails
2022-01-27 15:25:26 -08:00
Yanwen Jin 94830c9478 Some clean ups in columnar 11.0-1 2022-01-27 15:25:26 -08:00
Yanwen Jin 9c67cb2e60 [Columnar] Separate columnar from citus part1 - create columnar extension 2022-01-27 15:25:26 -08:00
Heikki Linnakangas a40679139b
Use smgrextend() when extending relation, and WAL-log first. (#5654)
When creating a new table, we bypass the buffer cache and write the
initial pages directly with smgrwrite(). However, you're supposed to
use smgrextend() when extending a relation, rather than smgrwrite().
There isn't much difference between them, but smgrextend() updates the
relation size cache, which seems important, although I haven't seen
any real bugs caused by that.

Also, write the block to disk only after WAL-logging it, so that we
can include the LSN of the WAL record in the version that we write
out. Currently, the page as written to disk has LSN 0. That doesn't
cause any user-visible issues either, at worst it could make us
WAL-log a full page image of the page earlier than necessary, but that
doesn't matter currently because we WAL-log full page images of all
changes anyway.

I bumped into that issue with LSN 0 in the page header when testing
Citus with Zenith (https://github.com/zenithdb/zenith/issues/1176).
Zenith contains a check that PANICs if you write a block to disk
without WAL-logging it, and it works by checking the LSN of the page
that's written out. In this case, we are WAL-logging the page even
though the LSN on the page is 0, so it was a false alarm, but I'd love
to get this changed in Citus to keep the check in Zenith simple.

A downside of WAL-logging the page first is that if you run out of
disk space, you have already created the WAL record. So if you then
crash and restart, WAL recovery will likely run out of disk space,
too, which is bad. In practice, we have the same problem in other
places, like rewriteheap.c. Also, if you are on the brink of running
out of disk space, you will probably run out at WAL replay anyway,
regardless of which order we write these few pages. But if we wanted
to fix that, we could first extend the relation with zeros, and then
WAL-log the pages. That's how heap extension works.

It would be even nicer to use the buffer cache for this, and skip the
smgrimmedsync() on the relation. However, that would require more
work, because we don't have the Relation struct for the relation here.
We could use ReadBufferWithoutRelcache(), but that doesn't work for
unlogged tables. Unlogged tables are currently not supported
(https://github.com/citusdata/citus/issues/4742), but that would
become a problem if we want to support them in the future.
CreateFakeRelcacheEntry() also doesn't work with unlogged tables. We
could do things differently for logged and unlogged tables, but that
complicates the code further.

Co-authored-by: jeff-davis <Jeffrey.Davis@microsoft.com>
2022-01-27 12:04:08 -08:00
Önder Kalacı dcb9c71f19
Merge pull request #5657 from citusdata/assign_explicit_citus_user_name
Use a fixed application_name while connecting to remote nodes
2022-01-27 13:02:39 +01:00
Onder Kalaci 303540e494 Add PGAPPNAME env. variable to arbitrary configs 2022-01-27 11:00:15 +01:00
Onder Kalaci b26eeaecd3 Use a fixed application_name while connecting to remote nodes
Citus heavily relies on application_name, see
`IsCitusInitiatedRemoteBackend()`.

But if the user set the application name, such as export PGAPPNAME=test_name,
Citus uses that name while connecting to the remote node.

With this commit, we ensure that Citus always connects with
the "citus" user name to the remote nodes.
2022-01-27 10:46:25 +01:00