From 5ae17aae5e3d6b7fb053b1297904c1a9f0a1189d Mon Sep 17 00:00:00 2001 From: Sergey Dudoladov Date: Wed, 8 Apr 2020 09:38:27 +0200 Subject: [PATCH] simplify json unmarshalling --- pkg/util/patroni/patroni.go | 42 +++++++++---------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/pkg/util/patroni/patroni.go b/pkg/util/patroni/patroni.go index ca7bcd6bf..807d1ec36 100644 --- a/pkg/util/patroni/patroni.go +++ b/pkg/util/patroni/patroni.go @@ -3,6 +3,7 @@ package patroni import ( "bytes" "encoding/json" + "errors" "fmt" "io/ioutil" "net" @@ -28,30 +29,6 @@ type Interface interface { GetNodeState(pod *v1.Pod) (string, error) } -// HttpGetResponse contains data returned by Get to host/8008 -type HttpGetResponse struct { - State string `json:"state,omitempty"` - PostmasterStartTime string `json:"posmaster_start_time,omitempty"` - Role string `json:"role,omitempty"` - ServerVersion int `json:"server_version,omitempty"` - ClusterUnlocked bool `json:"cluster_unlocked,omitempty"` - Timeline int `json:"timeline,omitempty"` - Xlog Xlog `json:"xlog"` - DatabaseSystemIdentifier string `json:"database_system_indetifier,omitempty"` - PatroniInfo Info `json:"patroni"` -} - -// Xlog contains wal locaiton -type Xlog struct { - Location int `json:"location"` -} - -// Info cotains Patroni version and cluser scope -type Info struct { - Version string `json:"version,omitempty"` - Scope string `json:"scope,omitempty"` -} - // Patroni API client type Patroni struct { httpClient *http.Client @@ -152,8 +129,6 @@ func (p *Patroni) SetPostgresParameters(server *v1.Pod, parameters map[string]st //GetNodeState returns node state reported by Patroni API call. func (p *Patroni) GetNodeState(server *v1.Pod) (string, error) { - var pResponse HttpGetResponse - apiURLString, err := apiURL(server) if err != nil { return "", err @@ -164,19 +139,22 @@ func (p *Patroni) GetNodeState(server *v1.Pod) (string, error) { } defer response.Body.Close() - p.logger.Infof("http get response: %+v", response) - body, err := ioutil.ReadAll(response.Body) if err != nil { return "", fmt.Errorf("could not read response: %v", err) } - err = json.Unmarshal(body, &pResponse) + data := make(map[string]interface{}) + err = json.Unmarshal(body, &data) if err != nil { - return "", fmt.Errorf("could not unmarshal response: %v", err) + return "", err } - p.logger.Infof("parsed http get response: %+v", pResponse) - return pResponse.State, nil + state, ok := data["state"].(string) + if !ok { + return "", errors.New("Patroni Get call rerturned wrong type for 'state' field") + } + + return state, nil }