Commit Graph
88 Commits
Author SHA1 Message Date
Alexander Kukushkin 2541fcd3f2 Merge pull request #5 from zalando/features/refactoring
Features/refactoring
2015-05-13 15:37:43 +02:00
Alexander Kukushkin 3fa0476d8c Merge branch 'master' of github.com:zalando/governor into features/refactoring 2015-05-13 14:58:54 +02:00
Oleksii Kliukin fce99b6ec3 Merge pull request #4 from zalando/handle_sigchld
Handle sigchld
2015-05-13 14:58:31 +02:00
Alexander Kukushkin b1f43c1461 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring
Conflicts:
	helpers/postgresql.py
2015-05-13 14:57:57 +02:00
Alexander Kukushkin d25ad17c32 Add support of python3 2015-05-13 14:53:23 +02:00
Oleksii Kliukin 609a4b2fc6 loop until we reap all terminated children. 2015-05-13 12:22:17 +02:00
Oleksii Kliukin 8ad751b661 add a simplest SIGCHLD handler in order to avoid zombies in the docker container governed by the script 2015-05-13 10:05:12 +02:00
Feike Steenbergen 127a03d23d Merge pull request #3 from zalando/feature/status_page
Refactoring of Governor, adding of a health check, setting default ports to sane values.
2015-05-12 15:50:28 +02:00
Feike Steenbergen 2b56379b85 Change default port for the health check to 8008. 2015-05-12 15:48:30 +02:00
Feike Steenbergen c4168bfeb5 Bugfix: Headers sent before http status for the pg_status page. 2015-05-12 14:56:02 +02:00
Feike Steenbergen 362b6b4fa2 Made healtcheck port configurable, fixed standalone status page. 2015-05-12 14:48:40 +02:00
Feike Steenbergen ed30684d85 Merge branch 'features/refactoring' of github.com:zalando/governor into feature/status_page
Conflicts:
	helpers/postgresql.py
2015-05-12 14:39:51 +02:00
Feike Steenbergen d25fdd41a6 Refactoring of the status page for the healthcheck.
Less functions, as the code is readable enough without them.
Always return some content to the client, instead of a response only.
2015-05-12 14:14:20 +02:00
Alexander Kukushkin 6043bf8c75 Fix imports 2015-05-12 14:07:10 +02:00
Alexander Kukushkin 788f65b406 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring
Conflicts:
	governor.py
2015-05-12 14:04:25 +02:00
Alexander Kukushkin 8b38dbd2b5 Put governor code into class and implement sigterm processing handler 2015-05-12 13:48:06 +02:00
Alexander Kukushkin 17112992d0 Merge branch 'master' of github.com:zalando/governor into features/refactoring
Conflicts:
	governor.py
2015-05-12 12:24:09 +02:00
Feike Steenbergen a56b346295 Hardened the health checks and implemented a real status page.
For the postgresql helper, hardened the code to get "the" cursor of the postgresql instance.
For the statuspage, a small status json is returned.
To find out what status a PostgreSQL cluster is in we use the cursor (instead of the provided query() function), as the query function does some retrying etc. For the healthcheck we want to simple provide an answer to a simple query, if we have to reconnect, we are not *that* healthy anyway.

Dropped catching exceptions in the do_GET block, as the HTTPServer will do that nicely for us anyway.
2015-05-12 11:58:47 +02:00
Alexander Kukushkin e21e896852 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-12 11:08:33 +02:00
Alexander Kukushkin 281b0b8455 Bugfix in has_lock: sometimes leader can be undefined 2015-05-12 11:07:52 +02:00
Alexander Kukushkin 9dcbc75fd2 Bugfix. It wasn't possible to start the old cluster if all its members were shutdown.
Basically this is rollback to the original decision tree with the small exception:
1 - If leader is defined and it's not me - then slave would be started immidiately
with the correct recovery conf.
2 - If leader is defined in and it's my host, then it will start instance in
readonly (but without primary_conninfo in recovery.conf)
3 - And the third case - if the leader is not defined - it also will start
instance in readonly, without primary_conninfo.
After performing 2 or 3 it will perform usual decision tree.
2015-05-12 10:19:45 +02:00
Alexander Kukushkin 41942ee722 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-12 09:09:49 +02:00
Alexander Kukushkin be7677a1b8 Bugfix, hostname and address are not keys of dict but properties of Member object 2015-05-12 09:08:45 +02:00
Oleksii Kliukin 35b111083c Change the governor health check default port to 8008 in order to avoid a conflict with etcd proxy. 2015-05-11 17:55:00 +02:00
Alexander Kukushkin 1370923e84 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-11 16:58:26 +02:00
Alexander Kukushkin e2faf641d5 Start slave with the correct recovery.conf on governor start
Also governor is able to pick up already running master and slave
instances without restarting them.
In case is you have a lock and postgres is not running behaviour remains
the same: it will start master in read only mode and then promote if it
still has the lock.
2015-05-11 16:50:21 +02:00
Feike Steenbergen 82afc554d6 Merge pull request #2 from zalando/feature/status_page
Created statuspage, a health check for a PostgreSQL cluster served usi…
2015-05-11 16:25:28 +02:00
Alexander Kukushkin eb1721f65f Minimize amount of requests to etcd 2015-05-11 15:15:08 +02:00
Feike Steenbergen e7adb69503 Start the http request handler for load balancing as a thread in Governor.
When not running standalone, some better referencing to the Postgresql instance was needed.
2015-05-11 13:11:09 +02:00
Feike Steenbergen 91b71f8579 Created tatuspage, a health check for a PostgreSQL cluster served using http.
The StatusPage uses a BaseHTTPServer to server 3 simple http endpoints:

- pg_master, returns 200 if PostgreSQL is running as master
- pg_slave,  returns 200 if PostgreSQL is running as slave
- pg_status, returns some information about the cluster

It does this by relying on the PostgreSQL connection of the Governor.
2015-05-11 11:46:01 +02:00
Alexander Kukushkin 42d9c08c37 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-11 10:06:29 +02:00
Alexander Kukushkin 6d17d39776 Backport from compose/governor: compare xlog positions based on bytes since 0/000000 based on feedback 2015-05-11 10:06:18 +02:00
Alexander Kukushkin b3d6997289 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-11 09:54:28 +02:00
Alexander Kukushkin 2e3eb333cb Shutdown fast 2015-05-11 09:48:59 +02:00
Alexander Kukushkin 0b288a7f3e Track list of already existing physical replication slots
Drop replication slot when it was removed from etcd.
Execute pg_create_physical_replication_slot only when something new appeared in etcd.
2015-05-11 09:48:15 +02:00
Alexander Kukushkin 8cfbdcfcd4 Track list of already existing physical replication slots
Drop replication slot when it was removed from etcd.
Execute pg_create_physical_replication_slot only when something new appeared in etcd.
2015-05-11 09:44:57 +02:00
Alexander Kukushkin 588c951a86 Return True after success call of update_leader and check return code 2015-05-11 08:48:51 +02:00
Alexander Kukushkin db7a38f025 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring 2015-05-08 16:33:41 +02:00
Alexander Kukushkin 3a6afe5a9b Set environment variable PGPASSFILE via os.environ before running pg_basebackup and unset it afterwards 2015-05-08 16:32:57 +02:00
Alexander Kukushkin 72010f68cc Bugfix: two calls has_lock and update_lock are not atomic
Having a lock a few moments ago, doesn't mean that you will be able to
update it.
2015-05-08 16:21:09 +02:00
Alexander Kukushkin d9f3b232c5 Merge branch 'master' of github.com:CyberDem0n/governor into features/refactoring
Conflicts:
	helpers/postgresql.py
2015-05-08 13:36:49 +02:00
Alexander Kukushkin 810808a68a Format code according to pep8.
replace get_client_path("/members?recursive=true") with members()
replace do-plpgsq block by simple sql
2015-05-08 12:44:28 +02:00
Alexander Kukushkin 61f0cb2fb4 dempote and follow_the_leader have the same functionality
Now methods supporting the case when leader is not defined. There would
be no primary_conninfo in recovery.conf. I like it more comparing to
postgres://169.0.0.1:5432
2015-05-08 12:28:00 +02:00
Feike Steenbergen 0b053e3b33 Created a Dockerfile to be able to run Governor using a local etcd.
Usefull for developing and testing the Governor locally.
2015-05-07 13:17:28 +02:00
Alexander Kukushkin 40b20ce5d7 Start postmaster and run initdb with pg_ctl
It will wait utill postgres started up and helps to get rid from magic time.sleep(5) in start method.
2015-05-06 18:26:28 +02:00
Alexander Kukushkin 2fd1614144 query method now allow to execute sql with parameters 2015-05-06 17:52:39 +02:00
Alexander Kukushkin 1d5f3b1fff Do not write primary_conninfo into recovery.conf during start 2015-05-06 16:21:49 +02:00
Alexander Kukushkin 1545cc834d Try to replace % formatting with .format() 2015-05-06 14:57:01 +02:00
Alexander Kukushkin 83ff6986d5 Format code according to pep8 2015-05-06 14:49:07 +02:00
Alexander Kukushkin a6d5732da3 Inerit HealthiestMemberError and CurrentLeaderError from EtcdError 2015-05-06 14:45:49 +02:00