Skip to content

Follow-up for !1662: pgproto::start must be called only once

image

proc_before_online может вызываться несколько раз подряд (как и любой другой RPC от губернатора). Это значит что его выполнение должно быть идемпотентное

сейчас получается неправильно, на втором вызове мы возвращаем ошибку, address already in use

нужно запоминать, что pgproto уже стартанул и скипать pgproto::start в этом случае

Из-за этого флакают тесты https://git.picodata.io/core/picodata/-/jobs/395286#L307

:4303       | 2025-03-04 11:31:22.192 [62740] main/115/governor_loop V> governor_loop_status = #9 'update instance state to online'
:4303       | 2025-03-04 11:31:22.192 [62740] main/115/governor_loop I> enable plugins on instance, instance_name: default_1_1
:4303       | 2025-03-04 11:31:22.193 [62740] main/144/.proc_before_online I> starting postgres server at ("127.0.0.1", 4304)...
:4303       | 2025-03-04 11:31:22.193 [62740] main/112/<unknown> V> PG socket bind result: Err(Os { code: 98, kind: AddrInUse, message: "Address already in use" })
  • плюс нужно поменять сообщение в логах, сейчас мы будем в цикле писать
failed enable plugins on instance: server responded with error: ProcC: io error: Address already in use

хотя плагины тут не при чём. https://git.picodata.io/core/picodata/-/blob/15f2c2c5356a1aa998fd4d919387e2f8c8c436f7/src/governor/mod.rs#L591 здесь нужно поменять на finalizing instance initialization

Edited by Georgy Moshkin
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information