Ian Barwick [Wed, 10 Feb 2016 23:17:41 +0000 (08:17 +0900)]
brd_init_copy: "--replication_sets" -> "--replication-sets"
Craig Ringer [Mon, 18 Jan 2016 01:55:13 +0000 (09:55 +0800)]
Fix crash on insert into a table with an expression index
We failed to set up a snapshot before calling UserTableUpdateOpenIndexes
during process_remote_insert, leading to a crash if the executor called
into anything that expects a snapshot. Like evaluation of expressions
in indexes.
Per report and fix from Abdul Yadi
https://abdulyadi.wordpress.com/2015/12/29/bdr-0-9-3-and-index-on-expression-part-3-solved/
Michael Allen [Tue, 15 Dec 2015 03:10:59 +0000 (19:10 -0800)]
Skip acquiring the global DDL lock when dropping indexes on temporary tables.
Michael Allen [Tue, 15 Dec 2015 02:49:37 +0000 (18:49 -0800)]
Don't acquire the global DDL lock for DROP statements which refer to temporary relations without a schema-qualified name if it can be safely assumed that the relation will be found in the session's temporary object schema in subsequent processing of the command, provided no intervening DROP statement is received.
Michael Allen [Tue, 15 Dec 2015 00:16:21 +0000 (16:16 -0800)]
Don't acquire the global DDL lock when creating indexes on temporary tables.
Petr Jelinek [Sun, 17 Jan 2016 08:24:04 +0000 (09:24 +0100)]
Debian packages compatibility
Alvaro Herrera [Wed, 2 Dec 2015 16:24:47 +0000 (13:24 -0300)]
Remove simplelist markup
Alvaro Herrera [Wed, 2 Dec 2015 15:31:52 +0000 (12:31 -0300)]
Update list of tech upstreamed by BDR
Alvaro Herrera [Wed, 2 Dec 2015 13:42:10 +0000 (10:42 -0300)]
Reword intro
Craig Ringer [Mon, 19 Oct 2015 10:57:18 +0000 (18:57 +0800)]
Add some tests for ALTER TABLE ... NO INHERIT
Per RT#39047
Craig Ringer [Tue, 13 Oct 2015 04:26:28 +0000 (12:26 +0800)]
Ignore bdr.bdr_connections rows where node is dropped
If a node has been dropped or the entry in bdr.bdr_nodes
for it has been deleted we should ignore the node when
connecting to peers.
Failure to do so causes issues with joining new nodes
after a node is removed.
Fixes #97
Fixes #50
Fixes #126
Petr Jelinek [Fri, 9 Oct 2015 11:45:18 +0000 (13:45 +0200)]
Whitespace
Petr Jelinek [Thu, 1 Oct 2015 17:58:38 +0000 (19:58 +0200)]
Make the bdr.bdr_internal_sequence_reset_cache installation only happen for BDR
Petr Jelinek [Thu, 1 Oct 2015 14:20:15 +0000 (16:20 +0200)]
Check for do not replicate replication set in the bdr_fetch_sysid_via_node_id().
This can cause crash otherwise since conflict code can be called with tuple which was written with the do not replicate set..
Petr Jelinek [Thu, 1 Oct 2015 14:19:07 +0000 (16:19 +0200)]
Make it more clear that ALTER COLUMN SET NOT NULL is supported.
Craig Ringer [Fri, 4 Sep 2015 08:43:07 +0000 (16:43 +0800)]
Document that the enqueue function skips ddl locks
Craig Ringer [Fri, 4 Sep 2015 08:42:30 +0000 (16:42 +0800)]
Support updating from 0.9.3.0
Craig Ringer [Fri, 4 Sep 2015 03:20:04 +0000 (11:20 +0800)]
Docs tweak per Ray Stell on pgsql-general
Be explicit that "make install" is required.
Alvaro Herrera [Mon, 31 Aug 2015 15:25:48 +0000 (12:25 -0300)]
fix typo reported by Ray Stell
Petr Jelinek [Fri, 21 Aug 2015 18:56:47 +0000 (20:56 +0200)]
bdr_init_copy: Read correct row from the repset resultset
Craig Ringer [Mon, 17 Aug 2015 02:24:57 +0000 (10:24 +0800)]
Handle joins to 0.7.x nodes in bdr.internal_begin_join
This changes an old extension script retroactively, but only for
the pre-release 0.10.x series, and it only affects new joins not
existing installs.
Craig Ringer [Fri, 14 Aug 2015 07:00:24 +0000 (15:00 +0800)]
Allow bdr_get_remote_nodeinfo_internal to work with 0.7.x
bdr_get_remote_nodeinfo_internal tried to call functions that
don't exist on a remote 0.7.x node. Tweak it to make it more
tolerant of version differences.
This isn't nearly enough to let a 0.9.x node join a 0.7.x
group, but it fixes the first issue that arises when doing so.
Craig Ringer [Wed, 12 Aug 2015 12:29:41 +0000 (20:29 +0800)]
Fix a race between apply worker startup and perdb
During bdr_maintain_db_workers it was possible for an apply
worker to be registered and starting, but to not yet have
copied its proc latch to its shmem segment. This leads to a
segfault when setting the latch.
Craig Ringer [Sat, 11 Jul 2015 13:56:06 +0000 (21:56 +0800)]
Resume replay immediately on bdr_apply_resume()
Previously, resuming from bdr_apply_pause() using bdr_apply_resume()
could take up to a full latch-wait timeout in bdr_apply_work() to take
effect because we didn't ever set the apply worker's latch on resume.
Craig Ringer [Sat, 11 Jul 2015 13:45:35 +0000 (21:45 +0800)]
Reload apply worker configuration when latch is set
Apply workers now expose their proc latch in their shmem segment, and
will reload their configuration if their proc latch is set.
For replication sets changes or DSN changes the worker exits and picks
up the new configuration on reconnect because these options can't be
changed on an active bdr output plugin. Apply delay takes immediate
effect.
No new SQL-level function is required because the perdb worker
now sets the latch on all owned apply workers when its own latch
is set by bdr.bdr_connections_changed(). If we ever want to reload
only a single apply worker's config then a function to set its latch
can be provided.
(We might still want to switch to using our own latch arrays rather
than the proc latch at some point).
By its self this change doesn't do anything interesting. Follow-ups
will cause resume from paused replication to take immediate effect
and to immediately apply changes to connection replication sets.
Ian Barwick [Mon, 13 Jul 2015 08:19:35 +0000 (17:19 +0900)]
Fix calls to error_unsupported_command()
Otherwise ambiguous things like this happen:
$ ALTER EXTENSION bdr UPDATE;
ERROR: is not supported when bdr is active
This is what we want, of course:
$ ALTER EXTENSION bdr UPDATE;
ERROR: ALTER EXTENSION is not supported when bdr is active
Ian Barwick [Mon, 13 Jul 2015 04:17:55 +0000 (13:17 +0900)]
doc: fix release number in release notes
Petr Jelinek [Fri, 10 Jul 2015 14:42:24 +0000 (16:42 +0200)]
Also add correct expected output...
Petr Jelinek [Fri, 10 Jul 2015 14:36:28 +0000 (16:36 +0200)]
Fix the missing_pk test to be user independent
Ian Barwick [Fri, 10 Jul 2015 03:29:46 +0000 (12:29 +0900)]
doc: consistent use of &postgres;
Craig Ringer [Fri, 10 Jul 2015 03:52:52 +0000 (11:52 +0800)]
Test changing truncate triggers to tgisinternal
Further improvement on #62
Craig Ringer [Fri, 10 Jul 2015 03:18:24 +0000 (11:18 +0800)]
Update existing bdr triggers to 'tgisinternal'
New truncate_triggers are created as `tgisinternal` but
exiting ones are not changed. Fix that by doing a one-off
catalog update during the BDR extension upgrade, setting
any existing BDR truncate triggers to internal and appending
their oid to their names to match new triggers.
Further improvement for issue #62
Craig Ringer [Fri, 10 Jul 2015 03:17:00 +0000 (11:17 +0800)]
Create BDR's truncate triggers as 'tgisinternal'
Switch from creating triggers using the SPI to using CreateTrigger
directly, marking the new trigger as `tgisinternal` so it's not
dumped by `pg_dump` and not listed by `psql`.
Existing triggers are not updated. A subsequent commit will add
support for updating existing triggers on extension update.
Fixes issue #62
Craig Ringer [Wed, 8 Jul 2015 03:34:45 +0000 (11:34 +0800)]
BDR 0.9.2 release notes
Craig Ringer [Fri, 10 Jul 2015 01:51:11 +0000 (09:51 +0800)]
Support for upgrading from 0.9.2.0
Ian Barwick [Thu, 9 Jul 2015 09:40:32 +0000 (18:40 +0900)]
Don't append 'replication=database' when calling bdr_test_replication_connection()
This causes calls to bdr_subscribe() (UDR) to fail with this error:
FATAL: could not fetch database oid: ERROR: syntax error
CONTEXT: SQL statement "SELECT * FROM bdr_test_replication_connection(remote_dsn || ' replication=database')"
The comment for bdr_connect() explictly says the provided conninfo string should not
contain a replication= parameter; "replication=database" is automatically appended.
For some reason this did not cause any problems in BDR mode with bdr_group_join(),
which also calls bdr_test_replication_connection().
Ian Barwick [Thu, 9 Jul 2015 06:30:24 +0000 (15:30 +0900)]
Only install bdr.bdr_internal_sequence_reset_cache() in BDR mode
bdr_seq.c not compiled for UDR; attempting to create this function
in UDR mode prevents the extension from being installed.
Ian Barwick [Thu, 9 Jul 2015 03:53:14 +0000 (12:53 +0900)]
doc: fix typo
Ian Barwick [Thu, 9 Jul 2015 01:53:20 +0000 (10:53 +0900)]
doc: BDR/BDR -> BDR/UDR
Ian Barwick [Thu, 9 Jul 2015 01:39:19 +0000 (10:39 +0900)]
doc: clarify UDR build process
Ian Barwick [Wed, 8 Jul 2015 09:45:37 +0000 (18:45 +0900)]
Normalize file header
Ian Barwick [Tue, 7 Jul 2015 12:10:45 +0000 (21:10 +0900)]
doc: fix markup
Ian Barwick [Tue, 7 Jul 2015 00:54:09 +0000 (09:54 +0900)]
Use bdr_find_other_exec() for BDR_INIT_REPLICA_CMD too
Ian Barwick [Sun, 5 Jul 2015 23:54:27 +0000 (08:54 +0900)]
doc: minor copy-editing/tweaks to sequence voting docs
Petr Jelinek [Sun, 5 Jul 2015 22:22:22 +0000 (00:22 +0200)]
doc: Improve the sequence voting docs.
Ian Barwick [Sun, 5 Jul 2015 00:27:54 +0000 (09:27 +0900)]
Fix comment in bdr_supervisor_rescan_dbs()
pg_seclabel -> pg_shseclabel
Craig Ringer [Fri, 3 Jul 2015 11:30:27 +0000 (19:30 +0800)]
Revert "Don't check for presence of a PRIMARY KEY if not replicating rows"
This reverts commit
15abe5e5946c1542ecf43b42c69ba03c984d199f as the
initial change was too naïve.
The check shouldn't be within the loop.
It should run after the DDL lock check, since it could change data
in the table in ways that means the incoming DDL might not apply
anymore, e.g. inserting a NULL value into an otherwise NULL-free
table at the same time an
ALTER TABLE ... ALTER COLUMN ... SET NOT NULL
comes in.
It's also necessary for it to be skipped if the node is read-only
so a check like && !node_read_only is needed.
Ian Barwick [Fri, 3 Jul 2015 11:10:45 +0000 (20:10 +0900)]
Trivial whitespace alignment fix
Craig Ringer [Fri, 3 Jul 2015 00:51:31 +0000 (08:51 +0800)]
Fix debug message left in new join code
Craig Ringer [Wed, 1 Jul 2015 08:41:19 +0000 (16:41 +0800)]
Permit DML on pg_catalog tables
Because many pg_catalog tables don't have a PRIMARY KEY we were
rejecting DML on them. Since pg_catalog writes don't get replicated
anyway, it's safe to permit such writes.
Fixes #102
Craig Ringer [Fri, 26 Jun 2015 13:11:00 +0000 (21:11 +0800)]
Don't check for presence of a PRIMARY KEY if not replicating rows
Petr Jelinek [Wed, 1 Jul 2015 16:16:02 +0000 (18:16 +0200)]
bdr_init_copy: clean the sequence amdata cache on new node
Fixes #101
Petr Jelinek [Tue, 30 Jun 2015 16:27:46 +0000 (18:27 +0200)]
Add function to clear sequence's amdata
Function bdr.bdr_internal_sequence_reset_cache(regclass) sets the amdata
of the sequence to NULL and schedules sequencer wakeup.
This is first step for implementing GH #101.
Petr Jelinek [Tue, 30 Jun 2015 12:53:37 +0000 (14:53 +0200)]
bdr_init_copy: O_CREAT requires 3 param open()
Ian Barwick [Tue, 30 Jun 2015 06:35:44 +0000 (15:35 +0900)]
Check for zero exit codes
Also fix program name in logging output
Craig Ringer [Mon, 29 Jun 2015 07:38:25 +0000 (15:38 +0800)]
Pre-create bdr_init_copy log before base backup
If bdr_init_copy's CWD isn't writeable then it'll bail out when
it first tries to start PostgreSQL, after it's already done the
base backup.
Fixes #99
Craig Ringer [Mon, 29 Jun 2015 07:36:04 +0000 (15:36 +0800)]
Check exit status of pg_resetxlog and pg_basebackup
bdr_init_copy wasn't checking exit status from pg_resetlog,
and was doing so incorrectly - though harmlessly - for
pg_basebackup.
Related to #100
Craig Ringer [Mon, 29 Jun 2015 07:05:00 +0000 (15:05 +0800)]
Check return values for pg_ctl invocations in bdr_init_copy
Fixes #100
Craig Ringer [Fri, 26 Jun 2015 07:47:45 +0000 (15:47 +0800)]
Highlight replication sets fix in 0.9.1 relnotes
Craig Ringer [Wed, 24 Jun 2015 05:22:46 +0000 (13:22 +0800)]
Spelling in PRIMARY KEY error
Craig Ringer [Wed, 24 Jun 2015 04:43:46 +0000 (12:43 +0800)]
Expose bdr_do_not_replicate GUC for other compilation units
Ian Barwick [Sun, 28 Jun 2015 23:18:12 +0000 (08:18 +0900)]
doc: add --replication_sets option for bdr_init_copy
Ian Barwick [Sun, 28 Jun 2015 22:59:29 +0000 (07:59 +0900)]
doc: add missing '=' to bdr_init_copy parameters
Petr Jelinek [Sun, 28 Jun 2015 20:06:13 +0000 (22:06 +0200)]
Fix copy pasto in previous commit
Petr Jelinek [Sun, 28 Jun 2015 18:58:57 +0000 (20:58 +0200)]
Make sequence pernode cache configurable
Reloption cache_chunks added which sets how many chunks should be voted
for and cached on each node.
Petr Jelinek [Sun, 28 Jun 2015 16:07:35 +0000 (18:07 +0200)]
bdr_init_copy enhancements
Add --replication-sets command line parameter.
Specifies which replication sets to use for the new node. If not
specified the bdr_init_copy will check if all nodes in the bdr cluster
use same replication sets and use that one for the new node
automatically (instead of default). If the existing nodes don't all use
same replication sets it will throw error unless --replication-sets was
specified.
If the local data directory contains PostgreSQL data folder, check if
the system identifier is same as the system identifier of the remote
node. (GH #91)
When the remote node has multiple BDR activated databases make new
connections to all of them from the new local node. (GH #88)
Correctly set node_local_dsn for the new node.
Document -v option for increasing verbosity in --help output.
Petr Jelinek [Mon, 22 Jun 2015 20:17:11 +0000 (22:17 +0200)]
bdr_init_copy: only treat dbname as connstr if it's in connstr format.
Ian Barwick [Thu, 25 Jun 2015 23:27:27 +0000 (08:27 +0900)]
doc: Fix typo
Ian Barwick [Tue, 23 Jun 2015 04:53:15 +0000 (13:53 +0900)]
Add missing schema qualification
Craig Ringer [Mon, 22 Jun 2015 07:30:07 +0000 (15:30 +0800)]
Improvements to BDR/UDR join sanity checking
This is a set of related changes to the init/join
processes, focused on sanity checks and robustness
when joining nodes.
Introduces extension rev bdr 0.10.0.5.
* Expose bdr_internal_create_truncate_trigger function
to add the bdr truncate_trigger to a table. Use it
from bdr_truncate_trigger_add.
* Use bdr_truncate_trigger_add in bdr_group_join to
create truncate triggers on all existing tables
when BDR gets enabled. Previously we'd fail to
replicate TRUNCATE for tables created before
CREATE EXTENSION bdr; was run.
* Fix broken prototype for bdr_truncate_trigger_add
* In bdr_group_join prohibit enabling BDR where
exclusion constraints exist in the database's
current state. Previously you could get a BDR
db with exclusion constraints and/or a broken
clone by creating a table with exclusion constraints
before enabling BDR.
* In bdr_group_join, warn users if there are
secondary unique indexes on tables, as currently
we can't do last-update-wins conflict handling
on tuples that violate multiple unique constraints.
See issue #95. Still permit join to continue.
* Warn users about missing PRIMARY KEYs, but
permit join to continue, as it's legal to
have no PK on an INSERT-only table.
* In bdr.internal_begin_join, use
bdr_test_replication_connection to test the remote
DSN in replication mode and make sure that pg_hba.conf
permits connection in replication mode. Fixes #94.
Craig Ringer [Mon, 22 Jun 2015 04:23:38 +0000 (12:23 +0800)]
Fix outdated comment in bdr_get_remote_nodeinfo
Craig Ringer [Mon, 22 Jun 2015 04:08:10 +0000 (12:08 +0800)]
Tests show that truncate triggers are created before bdr_group_create
See #93
Craig Ringer [Fri, 19 Jun 2015 09:28:01 +0000 (17:28 +0800)]
Document that UPDATE and DELETE require a PRIMARY KEY
Fixes #84
Craig Ringer [Fri, 19 Jun 2015 09:10:11 +0000 (17:10 +0800)]
Flesh out the conflicts docs
Craig Ringer [Fri, 19 Jun 2015 04:12:03 +0000 (12:12 +0800)]
Fix docs structure errors, a few cleanups
Craig Ringer [Fri, 19 Jun 2015 03:27:22 +0000 (11:27 +0800)]
Remove duplicate conflicts info
Petr Jelinek [Thu, 18 Jun 2015 16:24:01 +0000 (18:24 +0200)]
Add our own function for finding Postgres binaries
We need our own function because the built-in function compares the
binary version including the minor version and since BDR is an extension
it's not realistic to support every possible version combination. The
BDR specific function for finding and validation of Postgres binaries
doesn't do version validation but instead returns major version in the
PG_VERSION_NUM format so it can be easily compared by the caller as
needed.
The pg_dump and pg_restore in bdr_init_replica and pg_ctl and
pg_basebackup check in bdr_init_copy are using the function now.
Petr Jelinek [Thu, 18 Jun 2015 16:22:25 +0000 (18:22 +0200)]
Don't insert node in bdr_init_copy in UDR mode.
Petr Jelinek [Wed, 17 Jun 2015 17:45:19 +0000 (19:45 +0200)]
Fix DROP replay of functions with no parameters.
Craig Ringer [Wed, 17 Jun 2015 06:53:25 +0000 (14:53 +0800)]
Explain that you can't part a node from its self
Craig Ringer [Wed, 17 Jun 2015 06:02:22 +0000 (14:02 +0800)]
Reject attempts to part from self, detect part from absent node
Reject attempts to part a node from its self. This seems like
a sensible thing to do, but we need to remove a node using another
node so that all peers find out about the removal.
Detect when asked to part a nonexistent node and complain instead
of silently doing nothing.
Also warn when asked to part a node that isn't in 'r' state.
Craig Ringer [Wed, 17 Jun 2015 06:02:02 +0000 (14:02 +0800)]
Improve error message on insert/insert multi-unique conflict
Craig Ringer [Tue, 16 Jun 2015 02:37:56 +0000 (10:37 +0800)]
More explanation of conflict types
Ian Barwick [Mon, 15 Jun 2015 07:08:13 +0000 (16:08 +0900)]
doc: fix typo
Petr Jelinek [Fri, 12 Jun 2015 12:18:03 +0000 (14:18 +0200)]
Assertion fixes
Ian Barwick [Fri, 12 Jun 2015 06:46:07 +0000 (15:46 +0900)]
Add documentation for bdr_get_local_nodeid()
Ian Barwick [Fri, 12 Jun 2015 06:38:59 +0000 (15:38 +0900)]
Fix doc references for bdr_get_local_node_name()
Ian Barwick [Fri, 12 Jun 2015 05:19:13 +0000 (14:19 +0900)]
Add missing 'bdr_' prefix
Petr Jelinek [Wed, 3 Jun 2015 18:51:07 +0000 (20:51 +0200)]
Add bdr_unsubscribe()
Petr Jelinek [Thu, 11 Jun 2015 14:12:31 +0000 (16:12 +0200)]
Fix some compiler warnings
Martín Marqués [Sat, 6 Jun 2015 18:30:15 +0000 (15:30 -0300)]
Documentation Typo
Martín Marqués [Wed, 3 Jun 2015 13:31:02 +0000 (10:31 -0300)]
Several documentation corrections
Petr Jelinek [Tue, 2 Jun 2015 19:15:09 +0000 (21:15 +0200)]
Add missing header
Petr Jelinek [Wed, 3 Jun 2015 12:22:26 +0000 (14:22 +0200)]
Change bdr_nodes_get_local_info from SPI to heap scan to avoid starting transaction.
Petr Jelinek [Wed, 3 Jun 2015 11:21:53 +0000 (13:21 +0200)]
Missing extension file
Craig Ringer [Wed, 3 Jun 2015 04:39:57 +0000 (12:39 +0800)]
Document that bdr_initial_load exists but is internal
Closes #76
Craig Ringer [Wed, 3 Jun 2015 04:34:41 +0000 (12:34 +0800)]
Correct --help output for bdr_initial_load
Per report in #76
Petr Jelinek [Tue, 2 Jun 2015 16:20:48 +0000 (18:20 +0200)]
On second thought use session cache for bdr_nodes.
This is how rest of postgres does it. The shmem cache is probably
slightly better performance-wise but it's somewhat abusing the shmem.
The node access API could use some rethinking after this - standard
access should probably go via cache. We should also avoid SPI probably.
But both of these are left for future patches.
In passing activate the read_only regression test which was previously
not added to Makefile by mistake.
Craig Ringer [Tue, 2 Jun 2015 07:25:13 +0000 (15:25 +0800)]
Build instructions changes for UDR
Closes #74
Petr Jelinek [Mon, 1 Jun 2015 20:15:01 +0000 (22:15 +0200)]
Add missing files for previous commit