Skip to content

Commit

Permalink
fix: payments post upgrade migrations (#442)
Browse files Browse the repository at this point in the history
  • Loading branch information
paul-nicolas committed Jul 20, 2023
1 parent b172715 commit d6cfb02
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: stack.formance.com/v1beta3
kind: Migration
metadata:
annotations:
reloader.stakater.com/auto: "true"
generation: 1
labels:
stack: "true"
name: payments-v0.8.1-post-upgrade
namespace: monopod-latest
spec:
configuration: monopod-latest
module: payments
postUpgrade: true
targetedVersion: v0.8.1
version: monopod-latest
status:
terminated: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: stack.formance.com/v1beta3
kind: Migration
metadata:
annotations:
reloader.stakater.com/auto: "true"
generation: 1
labels:
stack: "true"
name: payments-v0.8.1-post-upgrade
namespace: monopod-ledgerv1
spec:
configuration: monopod-ledgerv1
module: payments
postUpgrade: true
targetedVersion: v0.8.1
version: monopod-ledgerv1
status:
terminated: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: stack.formance.com/v1beta3
kind: Migration
metadata:
annotations:
reloader.stakater.com/auto: "true"
generation: 1
labels:
stack: "true"
name: payments-v0.8.1-post-upgrade
namespace: monopod-search-before-v0-7-0
spec:
configuration: monopod-search-before-v0-7-0
module: payments
postUpgrade: true
targetedVersion: v0.8.1
version: monopod-search-before-v0-7-0
status:
terminated: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: stack.formance.com/v1beta3
kind: Migration
metadata:
annotations:
reloader.stakater.com/auto: "true"
generation: 1
labels:
stack: "true"
name: payments-v0.8.1-post-upgrade
namespace: multipod-latest
spec:
configuration: multipod-latest
module: payments
postUpgrade: true
targetedVersion: v0.8.1
version: multipod-latest
status:
terminated: true
83 changes: 55 additions & 28 deletions components/operator/internal/handlers/handler_payments.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,7 @@ func init() {
return paymentsPreUpgradeMigration(ctx)
},
PostUpgrade: func(ctx modules.PostInstallContext) error {
resetConnectors(ctx, "stripe")
resetConnectors(ctx, "wise")
resetConnectors(ctx, "modulr")
resetConnectors(ctx, "banking-circle")
resetConnectors(ctx, "currency-cloud")
resetConnectors(ctx, "dummy-pay")
return nil
return resetConnectors(ctx)
},
Services: func(ctx modules.ModuleContext) modules.Services {
return paymentsServices(ctx, env)
Expand All @@ -96,15 +90,7 @@ func init() {
return paymentsPreUpgradeMigration(ctx)
},
PostUpgrade: func(ctx modules.PostInstallContext) error {
resetConnectors(ctx, "stripe")
resetConnectors(ctx, "wise")
resetConnectors(ctx, "modulr")
resetConnectors(ctx, "banking-circle")
resetConnectors(ctx, "currency-cloud")
resetConnectors(ctx, "dummy-pay")
resetConnectors(ctx, "mangopay")
resetConnectors(ctx, "moneycorp")
return nil
return resetConnectors(ctx)
},
Services: func(ctx modules.ModuleContext) modules.Services {
return paymentsServices(ctx, env)
Expand All @@ -116,15 +102,15 @@ func init() {
return paymentsPreUpgradeMigration(ctx)
},
PostUpgrade: func(ctx modules.PostInstallContext) error {
resetConnectors(ctx, "stripe")
resetConnectors(ctx, "wise")
resetConnectors(ctx, "modulr")
resetConnectors(ctx, "banking-circle")
resetConnectors(ctx, "currency-cloud")
resetConnectors(ctx, "dummy-pay")
resetConnectors(ctx, "mangopay")
resetConnectors(ctx, "moneycorp")
return nil
return resetConnectors(ctx)
},
Services: func(ctx modules.ModuleContext) modules.Services {
return paymentsServices(ctx, env)
},
},
"v0.8.1": {
PostUpgrade: func(ctx modules.PostInstallContext) error {
return resetConnectors(ctx)
},
Services: func(ctx modules.ModuleContext) modules.Services {
return paymentsServices(ctx, env)
Expand Down Expand Up @@ -176,17 +162,58 @@ func paymentsServices(
}}
}

func resetConnectors(ctx modules.PostInstallContext, connector string) {
func resetConnectors(ctx modules.PostInstallContext) error {
if err := resetConnector(ctx, "stripe"); err != nil {
return err
}
if err := resetConnector(ctx, "wise"); err != nil {
return err
}
if err := resetConnector(ctx, "modulr"); err != nil {
return err
}
if err := resetConnector(ctx, "banking-circle"); err != nil {
return err
}
if err := resetConnector(ctx, "currency-cloud"); err != nil {
return err
}
if err := resetConnector(ctx, "dummy-pay"); err != nil {
return err
}
if err := resetConnector(ctx, "mangopay"); err != nil {
return err
}
if err := resetConnector(ctx, "moneycorp"); err != nil {
return err
}

return nil
}

func resetConnector(ctx modules.PostInstallContext, connector string) error {
endpoint := fmt.Sprintf(
"http://payments.%s.svc:%d/connectors/%s/reset",
ctx.Stack.Name,
ctx.Stack.Status.Ports[ctx.ModuleName]["payments"],
connector,
)
_, err := http.Post(endpoint, "", nil)
res, err := http.Post(endpoint, "", nil)
if err != nil {
logger := log.FromContext(ctx)
logger.WithValues("endpoint", endpoint).Error(err, "failed to reset connector")
// Do not return any error here, as the connector is not required to be installed
return err
}

switch res.StatusCode {
case http.StatusOK, http.StatusNoContent:
return nil
case http.StatusBadRequest:
// Connector is not installed, we can directly return nil, nothing to do
return nil
default:
// Return an error to retry the migration. It can be the case when the
// pod is up, but not the http server.
return fmt.Errorf("unexpected status code: %d", res.StatusCode)
}
}
6 changes: 3 additions & 3 deletions components/payments/internal/app/storage/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -395,10 +395,10 @@ func registerMigrations(migrator *migrations.Migrator) {
migrations.Migration{
Up: func(tx bun.Tx) error {
// Since only one connector is inserting accounts,
// let's just truncate the table, since connectors will be
// resetted. Truncate it cascade, or we will have an error
// let's just delete the table, since connectors will be
// resetted. Delete it cascade, or we will have an error
_, err := tx.Exec(`
TRUNCATE accounts.account CASCADE;
DELETE FROM accounts.account CASCADE;
`)
if err != nil {
return err
Expand Down

1 comment on commit d6cfb02

@vercel
Copy link

@vercel vercel bot commented on d6cfb02 Jul 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.