Skip to content

Commit

Permalink
Merge 79ee4b8 into 3ab4f26
Browse files Browse the repository at this point in the history
  • Loading branch information
kzys authored Nov 12, 2024
2 parents 3ab4f26 + 79ee4b8 commit 12da497
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 2 deletions.
6 changes: 5 additions & 1 deletion internal/command/deploy/machines_deploymachinesapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ func (md *machineDeployment) updateExistingMachines(ctx context.Context, updateE
return err
}

// updateExistingMachinesWRecovery updates existing machines.
// The code duplication is on purpose here. The plan is to completely move over to updateExistingMachinesWRecovery
func (md *machineDeployment) updateExistingMachinesWRecovery(ctx context.Context, updateEntries []*machineUpdateEntry) (err error) {
ctx, span := tracing.GetTracer().Start(ctx, "update_existing_machines_w_recovery", trace.WithAttributes(
Expand Down Expand Up @@ -652,9 +653,12 @@ func (md *machineDeployment) updateExistingMachinesWRecovery(ctx context.Context
canaryAppState.Machines = []*fly.Machine{oldAppState.Machines[0]}

newCanaryAppState := newAppState
canaryMach, _ := lo.Find(newAppState.Machines, func(m *fly.Machine) bool {
canaryMach, exists := lo.Find(newAppState.Machines, func(m *fly.Machine) bool {
return m.ID == oldAppState.Machines[0].ID
})
if !exists {
return fmt.Errorf("failed to find machine %s under app %s", oldAppState.Machines[0].ID, md.app.Name)
}
newCanaryAppState.Machines = []*fly.Machine{canaryMach}

if err := md.updateMachinesWRecovery(ctx, &canaryAppState, &newCanaryAppState, nil, updateMachineSettings{
Expand Down
36 changes: 36 additions & 0 deletions internal/command/deploy/machines_deploymachinesapp_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package deploy

import (
"context"
"testing"

"github.com/stretchr/testify/assert"
"github.com/superfly/fly-go"
"github.com/superfly/flyctl/internal/machine"
"github.com/superfly/flyctl/iostreams"
)

func TestUpdateExistingMachinesWRecovery(t *testing.T) {
ios, _, _, _ := iostreams.Test()
client := &mockFlapsClient{}
client.machines = []*fly.Machine{{ID: "test-machine-id"}}
md := &machineDeployment{
app: &fly.AppCompact{},
io: ios,
colorize: ios.ColorScheme(),
flapsClient: client,
strategy: "canary",
}

ctx := context.Background()
err := md.updateExistingMachinesWRecovery(ctx, nil)
assert.NoError(t, err)

err = md.updateExistingMachinesWRecovery(ctx, []*machineUpdateEntry{
{
leasableMachine: machine.NewLeasableMachine(client, ios, &fly.Machine{}, false),
launchInput: &fly.LaunchMachineInput{},
},
})
assert.Error(t, err, "failed to find machine test-machine-id")
}
8 changes: 7 additions & 1 deletion internal/command/deploy/mock_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ type mockFlapsClient struct {
breakWait bool
breakUncordon bool
breakSetMetadata bool
breakList bool

machines []*fly.Machine
}

func (m *mockFlapsClient) AcquireLease(ctx context.Context, machineID string, ttl *int) (*fly.MachineLease, error) {
Expand Down Expand Up @@ -123,7 +126,10 @@ func (m *mockFlapsClient) Launch(ctx context.Context, builder fly.LaunchMachineI
}

func (m *mockFlapsClient) List(ctx context.Context, state string) ([]*fly.Machine, error) {
return nil, fmt.Errorf("failed to list machines")
if m.breakList {
return nil, fmt.Errorf("failed to list machines")
}
return m.machines, nil
}

func (m *mockFlapsClient) ListActive(ctx context.Context) ([]*fly.Machine, error) {
Expand Down
1 change: 1 addition & 0 deletions internal/command/deploy/plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ type machinePairing struct {
newMachine *fly.Machine
}

// appState returns the app's state from Flaps.
func (md *machineDeployment) appState(ctx context.Context, existingAppState *AppState) (*AppState, error) {
ctx, span := tracing.GetTracer().Start(ctx, "app_state")
defer span.End()
Expand Down

0 comments on commit 12da497

Please sign in to comment.