postgrespro/mamonsu

Лаг репликации на primary сервере

pkarezin opened this issue · 3 comments

Добрый день, столкнулись со следующей проблемой при использовании mamonsu 3.1.2 и PostgreSQL 9.6.

Если процесс postmaster будет завершен некорректно (kill -9), то после запуска сервера будет взведен триггер PostgreSQL: streaming replication lag, даже если это primary или standalone сервер.
SELECT now() - pg_last_xact_replay_timestamp() будет отображать время с момента запуска startup на сервере.

# SELECT now() - pg_last_xact_replay_timestamp();
    ?column?
----------------
 00:21:15.10736
(1 row)

Подтверждаю.
В режиме bootstrap в функции mamonsu.timestamp_get() не учтен вариант запуска данной функции на master реплике.
Дело в том, что при вычислении выражения мы получаем LSN = NULL - это даёт ложь и вычисляется ELSE
изображение

Необходимо изменить функцию mamonsu/mamonsu/plugins/pgsql/driver/pool.py :

"replication_lag_slave_query": (
	"""
	SELECT CASE WHEN coalesce(pg_last_{1}(), '0/00000000') = coalesce(pg_last_{2}(), '0/00000000')
				THEN 0
				ELSE extract (epoch FROM now() - coalesce(pg_last_xact_replay_timestamp(), now() - INTERVAL '{0} seconds'))
		   END;
	""",
	"""
	SELECT mamonsu.timestamp_get();
	"""
),

таким образом ->

"replication_lag_slave_query": (
	"""
	SELECT CASE WHEN not pg_is_in_recovery() or coalesce(pg_last_{1}(), '0/00000000') = coalesce(pg_last_{2}(), '0/00000000')
				THEN 0
				ELSE extract (epoch FROM now() - coalesce(pg_last_xact_replay_timestamp(), now() - INTERVAL '{0} seconds'))
		   END;
	""",
	"""
	SELECT mamonsu.timestamp_get();
	"""
),

Добрый день! Добавили фикс в версию 3.3.0.

Спасибо!
Будем пробовать