Commit Graph

105 Commits

Author SHA1 Message Date
Ian Barwick
874616f149 Add %n/node id format option for 'event_notification_command' 2015-03-16 18:04:50 +09:00
Ian Barwick
61ce18ebbe Add configuration parameter 'event_notifications' 2015-03-16 17:31:26 +09:00
Ian Barwick
922dfd88e5 Add configuration option 'event_notification_command'
Command to be executed each time an event is logged.

Following formatting sequences will be interpolated:

      %e - event type
      %d - description
      %s - success (1 or 0)
      %t - timestamp
2015-03-16 13:41:13 +09:00
Ian Barwick
0307c51d4b Add initial event logging code 2015-03-16 07:44:54 +09:00
Abhijit Menon-Sen
94d0d119f6 Fix typo 2015-03-13 16:15:53 +05:30
Ian Barwick
606d0afabc primary -> master
For consistency.
2015-03-09 15:48:46 +09:00
Ian Barwick
4e6c250830 Remove experimental event logging code
Needs more bikeshedding.
2015-03-09 14:39:04 +09:00
Ian Barwick
abf92883a8 Clean up log output
No need to prefix each line with the program name; this was pretty
inconsistent anyway. The only place where log output needs to identify
the outputting program is when syslog is being used, which is done
anyway.
2015-03-09 12:00:05 +09:00
Ian Barwick
2339adba6c Fix event logging when cloning from another standby
We can only write to the primary, which we'll need to find seperately
when cloning from a standby.
2015-03-06 18:39:36 +09:00
Ian Barwick
491309f4ba Write events of note to a log table
This makes keeping track of events such as failovers
much easier. Note that this is for convenience and is
not a foolproof auditing log.

Sample output:

repmgr_db=# SELECT * from repmgr_test.repl_events ;
 node_id |          event           | successful |        event_timestamp        |                         details
---------+--------------------------+------------+-------------------------------+----------------------------------------------------------
       1 | master_register          | t          | 2015-03-06 14:14:08.196636+09 |
       2 | standby_clone            | t          | 2015-03-06 14:14:17.660768+09 | Backup method: pg_basebackup; --force: N
       2 | standby_register         | t          | 2015-03-06 14:14:18.762222+09 |
       4 | witness_create           | t          | 2015-03-06 14:14:22.072815+09 |
       3 | standby_clone            | t          | 2015-03-06 14:14:23.524673+09 | Backup method: pg_basebackup; --force: N
       3 | standby_register         | t          | 2015-03-06 14:14:24.620161+09 |
       2 | repmgrd_start            | t          | 2015-03-06 14:14:29.639096+09 |
       3 | repmgrd_start            | t          | 2015-03-06 14:14:29.641489+09 |
       4 | repmgrd_start            | t          | 2015-03-06 14:14:29.648002+09 |
       2 | standby_promote          | t          | 2015-03-06 14:15:01.956737+09 | Node 2 was successfully be promoted to master
       2 | repmgrd_failover_promote | t          | 2015-03-06 14:15:01.964771+09 | Node 2 promoted to master; old master 1 marked as failed
       3 | repmgrd_failover_follow  | t          | 2015-03-06 14:15:07.228493+09 | Node 3 now following new upstream node 2
(12 rows)
2015-03-06 14:35:41 +09:00
Ian Barwick
0f8759d316 Consolidate duplicated code 2015-03-04 17:27:51 +09:00
Ian Barwick
defb1e819b Add some annotations 2015-03-04 10:36:19 +09:00
Ian Barwick
187a6b6d23 Fix slot name 2015-03-03 18:50:48 +09:00
Ian Barwick
63b9254be4 Change log notice to log debug 2015-03-03 17:49:40 +09:00
Ian Barwick
3d3f082617 Ensure witness server updates its node records following a failover
This involves mainly abstracting the functions which copy
and create records from repmgr.c to dbutils.c, as they need
to be shared between repmgr and repmgrd.

Per issue noted here:

  https://groups.google.com/forum/#!topic/repmgr/v5nu1Xwf6X0
2015-03-03 08:57:20 +09:00
Ian Barwick
74e4b6aa3c Refactor rsync file/directory exclusion
Better simulate what goes on in 'src/backend/replication/basebackup.c';
avoid copying some files/directories introduced in 9.4.
2015-02-27 15:59:47 +09:00
Ian Barwick
63c416bb76 Set synchronous_commit to off for current session
Forward-ported from 2.x; need to verify it makes sense.
2015-02-27 11:40:57 +09:00
Ian Barwick
32611f5f04 Add --rsync-only option
Sometimes it's desirable to re-sync a "stale" data directory
on a standby, rather than start from scratch with pg_basebackup().

This re-adds the rsync code from the 2.x series, with some
modifications.

TODO: tablespace support.
2015-02-25 14:17:09 +09:00
Ian Barwick
2ece014952 Initial support for physical replication slots
Todo:
 - if slots specified in repmgr.conf, verify server version
 - store generated slot name in `repl_nodes` table
2015-02-02 15:53:53 +09:00
Ian Barwick
031a726f04 Enable get_master_connection() to accept a null value for master_id
Saves worrying about the purpose of various superfluous ints
2015-01-29 11:25:01 +09:00
Ian Barwick
36d94c88ac Handle empty result set
Should never happen, but just in case.`
2015-01-27 16:28:17 +09:00
Ian Barwick
99dae5cdcb Function is_witness() no longer required
Node type can be extracted directly from the metadata
2015-01-27 15:32:13 +09:00
Ian Barwick
84a4766f13 Basic failover for cascaded standby nodes
Attempt to attach to the next available upstream node, otherwise
quit monitoring. We'll need to add further options for failover
scenarios, including attempting to attach to another node,
shutting down the server completely etc.
2015-01-24 04:22:40 +09:00
Ian Barwick
609453a848 Handle failover of top-level standby
Cascaded standbys will not go into failover so we need to ignore
these when looking for candidates for promotion.
2015-01-16 12:35:01 +09:00
Ian Barwick
a82d37e48a Improve node metadata and upstream connecting mechanism
To handle cascaded replication we're going to have to keep track
of each node's upstream node. Also enumerate the node type
("primary", "standby" or "witness") and mark if active.
2015-01-16 10:28:02 +09:00
Ian Barwick
692204e381 Consolidate duplicated schema check code 2015-01-15 18:34:51 +09:00
Ian Barwick
2ae27521a3 Some infrastructure for supporting cascading replication
Does not fully work yet.
2015-01-15 15:37:09 +09:00
Ian Barwick
5fb84b9627 Witness server: on failover attempt to reconnect to new master
Previously it was just quitting.
2015-01-12 11:23:20 +09:00
Ian Barwick
437485bf6a Fix debugging output 2015-01-12 09:47:13 +09:00
Ian Barwick
5b88a980b8 Add some debugging output 2015-01-12 07:57:42 +09:00
Ian Barwick
74a963a10e Fix schema quoting
There was a lot of duplicated/unused related to handling the
schema name; consolidated and rationalised.
2015-01-09 15:51:34 +09:00
Ian Barwick
687872e979 get_data_directory() -> get_pg_setting()
More code consolidation
2015-01-06 13:47:31 +09:00
Ian Barwick
3033f2dfaf Fix get_cluster_size()
Was returning a pointer to a cleared PQresult
2015-01-06 10:30:33 +09:00
Ian Barwick
718024454e Add function get_data_directory()
Consolidate duplicate code
2015-01-06 10:06:58 +09:00
Ian Barwick
4e9c58c7db Update copyright to 2015 2015-01-03 08:12:13 +09:00
Ian Barwick
8b69b1e16f Optionally retrieve server_version string as well
In a couple of places we'll need to report the human-readable
version number
2014-12-29 15:52:53 +09:00
Ian Barwick
f94626bf7b Refactor version number detection
Use the reported `server_version_num` integer for version number
detection and comparison. This makes it easier to set an arbitrary
minimum supported version (rather than "9.0 or later") as well
as future-proofing for 10.x and later.
2014-12-29 14:54:04 +09:00
Christian Kruse
98b1f8d28a rather big refactoring: use a naming scheme
In the past naming of functions, variables and such didn't really have a
naming scheme. Now they should have.
2014-03-06 18:34:40 +01:00
Christian Kruse
d8b8bf0e2a pg_indent'ing all files… 2014-03-06 18:34:40 +01:00
Christian Kruse
0ff14a2aa1 avoid compiler warnings 2014-02-21 13:47:29 +01:00
Christian Kruse
f0807923a3 fix: gettimeofday() expects two arguments 2014-02-18 15:33:56 +01:00
Christian Kruse
18f1fed77f fixing wait_connection_availability()
wait_connection_availability() did take at least 2 seconds per call in
the old incarnation. Now we may finish a call without any sleep at all
when the result is already ready at the time called
2014-02-15 01:31:12 +01:00
Christian Kruse
bbb67c55f6 simple past of set is set 2014-01-23 10:50:37 +01:00
Christian Kruse
680f23fb1d copyright push 2014-01-23 10:37:49 +01:00
Christian Kruse
4f3bd6612c do not exit in getMasterConnection() 2014-01-16 15:07:15 +01:00
Christian Kruse
192ee3cdb0 do not exit in get_cluster_size 2014-01-16 15:07:06 +01:00
Christian Kruse
6f149ead8f do not exit in guc_setted and guc_setted_typed 2014-01-16 14:48:46 +01:00
Christian Kruse
77aa6aa326 do not exit in pg_version 2014-01-16 14:48:42 +01:00
Christian Kruse
18206b3a64 do not exit() in is_witness 2014-01-16 14:28:56 +01:00
Christian Kruse
dcdf8788ae fix: handle connection loss to standby
We do basically the same as we do for the master since connections drop
from time to time
2014-01-10 17:12:03 +01:00