From c03aa32e1eeec90620e0e157954eb611f675d839 Mon Sep 17 00:00:00 2001 From: Andrei Sergeev Date: Sat, 7 Sep 2024 22:28:36 +0300 Subject: [PATCH] fix problem with failover and switchover when patroni.host != patroni.name --- service/src/model/general.go | 1 + service/src/service/patroni.go | 2 +- web/src/component/shared/actions/FailoverButton.tsx | 4 ++-- web/src/component/shared/actions/SwitchoverButton.tsx | 6 ++++-- web/src/type/general.ts | 1 + 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/service/src/model/general.go b/service/src/model/general.go index 520fec7a..905cf88b 100644 --- a/service/src/model/general.go +++ b/service/src/model/general.go @@ -88,6 +88,7 @@ const ( type Sidecar struct { Host string `json:"host" form:"host"` Port int `json:"port" form:"port"` + Name *string `json:"name" form:"name"` Status *SidecarStatus `json:"status,omitempty" form:"status"` } diff --git a/service/src/service/patroni.go b/service/src/service/patroni.go index b2942942..22c259a8 100644 --- a/service/src/service/patroni.go +++ b/service/src/service/patroni.go @@ -74,7 +74,7 @@ func (p *patroniInstanceService) Overview(instance InstanceRequest) ([]Instance, Lag: lag, PendingRestart: patroniInstance.PendingRestart, Database: Database{Host: patroniInstance.Host, Port: patroniInstance.Port}, - Sidecar: Sidecar{Host: host, Port: port, Status: &sidecarStatus}, + Sidecar: Sidecar{Host: host, Port: port, Name: &patroniInstance.Name, Status: &sidecarStatus}, ScheduledRestart: scheduledRestart, ScheduledSwitchover: scheduledSwitchover, }) diff --git a/web/src/component/shared/actions/FailoverButton.tsx b/web/src/component/shared/actions/FailoverButton.tsx index 5aa81aa3..fac87449 100644 --- a/web/src/component/shared/actions/FailoverButton.tsx +++ b/web/src/component/shared/actions/FailoverButton.tsx @@ -12,8 +12,8 @@ export function FailoverButton(props: Props) { const {request, cluster, disabled} = props const failover = useRouterInstanceFailover(cluster) - - const body = {candidate: request.sidecar.host} + // NOTE: in patroni we cannot use host for leader and candidate, we need to send patroni.name + const body = {candidate: request.sidecar.name} return ( () const switchover = useRouterInstanceSwitchover(cluster) - const body = {leader: request.sidecar.host, candidate, scheduled_at: schedule} + // NOTE: in patroni we cannot use host for leader and candidate, we need to send patroni.name + const body = {leader: request.sidecar.name, candidate, scheduled_at: schedule} return ( setCandidates(e.target.value)} fullWidth={true} + variant={"outlined"} > none (will be chosen randomly) {candidates.map(sidecar => ( - {sidecar.host} + {sidecar.host} ))} diff --git a/web/src/type/general.ts b/web/src/type/general.ts index eef15777..bbba784d 100644 --- a/web/src/type/general.ts +++ b/web/src/type/general.ts @@ -80,6 +80,7 @@ export enum SidecarStatus { export interface Sidecar { host: string, port: number, + name?: string, status?: SidecarStatus, }