Follow-up for !1662: pgproto::start must be called only once
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
