From e9a1ac15d9002751ee6d8f47c7981cc56070526e Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Mon, 10 Mar 2014 16:05:03 -0700 Subject: [PATCH] Allow partial cluster config updates. --- server/peer_server_handlers.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/server/peer_server_handlers.go b/server/peer_server_handlers.go index 374c78173..bde6f50fd 100644 --- a/server/peer_server_handlers.go +++ b/server/peer_server_handlers.go @@ -215,12 +215,27 @@ func (ps *PeerServer) getClusterConfigHttpHandler(w http.ResponseWriter, req *ht // Updates the cluster configuration. func (ps *PeerServer) setClusterConfigHttpHandler(w http.ResponseWriter, req *http.Request) { - c := &SetClusterConfigCommand{Config: &ClusterConfig{}} - if err := json.NewDecoder(req.Body).Decode(&c.Config); err != nil { + // Decode map. + m := make(map[string]interface{}) + if err := json.NewDecoder(req.Body).Decode(&m); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } + // Copy config and update fields passed in. + config := &ClusterConfig{ + ActiveSize: ps.clusterConfig.ActiveSize, + PromoteDelay: ps.clusterConfig.PromoteDelay, + } + if activeSize, ok := m["activeSize"].(float64); ok { + config.ActiveSize = int(activeSize) + } + if promoteDelay, ok := m["promoteDelay"].(float64); ok { + config.PromoteDelay = int(promoteDelay) + } + + // Issue command to update. + c := &SetClusterConfigCommand{Config: config} log.Debugf("[recv] Update Cluster Config Request") ps.server.Dispatch(c, w, req)