Skip to content

Commit 728a317

Browse files
committed
Added force option for config udpate
1 parent c4d6856 commit 728a317

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

cmd/openrun/server_cmds.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import (
99
"errors"
1010
"fmt"
1111
"io"
12+
"net/url"
1213
"os"
1314
"os/signal"
15+
"strconv"
1416

1517
"github.com/openrundev/openrun/internal/system"
1618
"github.com/openrundev/openrun/internal/types"
@@ -57,7 +59,7 @@ func getServerCommands(serverConfig *types.ServerConfig, clientConfig *types.Cli
5759
{
5860
Name: "update-config",
5961
Usage: "Update the server dynamic config",
60-
Flags: flags,
62+
Flags: []cli.Flag{newBoolFlag("force", "f", "Force update even if the config version id is different", false)},
6163
Before: altsrc.InitInputSourceWithContext(flags, altsrc.NewTomlSourceFromFlagFunc(configFileFlagName)),
6264
Action: func(cCtx *cli.Context) error {
6365
return updateConfig(cCtx, clientConfig)
@@ -179,8 +181,12 @@ func updateConfig(cCtx *cli.Context, clientConfig *types.ClientConfig) error {
179181
if err != nil {
180182
return err
181183
}
184+
185+
values := url.Values{}
186+
values.Add("force", strconv.FormatBool(cCtx.Bool("force")))
187+
182188
var response types.ConfigResponse
183-
err = client.Post("/_openrun/config", nil, &inputConfig, &response)
189+
err = client.Post("/_openrun/config", values, &inputConfig, &response)
184190
if err != nil {
185191
return err
186192
}

internal/server/router.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,11 +1084,15 @@ func (h *Handler) configGet(r *http.Request) (any, error) {
10841084

10851085
func (h *Handler) configUpdate(r *http.Request) (any, error) {
10861086
var dynamicConfig types.DynamicConfig
1087-
err := json.NewDecoder(r.Body).Decode(&dynamicConfig)
1087+
force, err := parseBoolArg(r.URL.Query().Get("force"), false)
1088+
if err != nil {
1089+
return nil, err
1090+
}
1091+
err = json.NewDecoder(r.Body).Decode(&dynamicConfig)
10881092
if err != nil {
10891093
return nil, types.CreateRequestError(err.Error(), http.StatusBadRequest)
10901094
}
1091-
newConfig, err := h.server.UpdateDynamicConfig(r.Context(), &dynamicConfig)
1095+
newConfig, err := h.server.UpdateDynamicConfig(r.Context(), &dynamicConfig, force)
10921096
if err != nil {
10931097
return nil, types.CreateRequestError(err.Error(), http.StatusBadRequest)
10941098
}

internal/server/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,12 @@ func (s *Server) updateDynamicConfigCache(ctx context.Context, newConfig *types.
289289
return nil
290290
}
291291

292-
func (s *Server) UpdateDynamicConfig(ctx context.Context, newConfig *types.DynamicConfig) (*types.DynamicConfig, error) {
292+
func (s *Server) UpdateDynamicConfig(ctx context.Context, newConfig *types.DynamicConfig, force bool) (*types.DynamicConfig, error) {
293293
s.configMu.Lock()
294294
defer s.configMu.Unlock()
295295

296296
currentVersionId := s.dynamicConfig.VersionId
297-
if currentVersionId != newConfig.VersionId {
297+
if currentVersionId != newConfig.VersionId && !force {
298298
// stale update
299299
return nil, fmt.Errorf("config version id mismatch, expected %s, got %s", currentVersionId, newConfig.VersionId)
300300
}

tests/commander/test_config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@ tests:
2020
command: ../openrun server update-config config1.json
2121
stderr: "version id mismatch"
2222
exit-code: 1
23+
config0006: # force stale update
24+
command: ../openrun server update-config --force config1.json
25+
exit-code: 0

0 commit comments

Comments
 (0)