refactor: speed up VillageService.Sync a bit
ci/woodpecker/push/govulncheck Pipeline was successful Details
ci/woodpecker/push/test Pipeline was successful Details

This commit is contained in:
Dawid Wysokiński 2024-03-15 08:21:43 +01:00
parent 80f14d6601
commit 096ca396db
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
9 changed files with 45 additions and 7 deletions

1
go.mod
View File

@ -27,6 +27,7 @@ require (
github.com/uptrace/bun/driver/sqliteshim v1.1.17 github.com/uptrace/bun/driver/sqliteshim v1.1.17
github.com/uptrace/bun/extra/bundebug v1.1.17 github.com/uptrace/bun/extra/bundebug v1.1.17
github.com/urfave/cli/v2 v2.27.1 github.com/urfave/cli/v2 v2.27.1
golang.org/x/sync v0.6.0
) )
require ( require (

4
go.sum
View File

@ -240,8 +240,8 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"gitea.dwysokinski.me/twhelp/corev3/internal/domain" "gitea.dwysokinski.me/twhelp/corev3/internal/domain"
"golang.org/x/sync/errgroup"
) )
type VillageRepository interface { type VillageRepository interface {
@ -36,12 +37,24 @@ func (svc *VillageService) Sync(ctx context.Context, serverSyncedPayload domain.
return fmt.Errorf("%s: couldn't get villages: %w", serverKey, err) return fmt.Errorf("%s: couldn't get villages: %w", serverKey, err)
} }
if err = svc.createOrUpdate(ctx, serverKey, villages); err != nil { g, ctx := errgroup.WithContext(ctx)
return fmt.Errorf("%s: couldn't create/update villages: %w", serverKey, err)
}
if err = svc.delete(ctx, serverKey, villages); err != nil { g.Go(func() error {
return fmt.Errorf("%s: couldn't delete villages: %w", serverKey, err) if createOrUpdateErr := svc.createOrUpdate(ctx, serverKey, villages); createOrUpdateErr != nil {
return fmt.Errorf("couldn't create/update villages: %w", createOrUpdateErr)
}
return nil
})
g.Go(func() error {
if deleteErr := svc.delete(ctx, serverKey, villages); deleteErr != nil {
return fmt.Errorf("couldn't delete villages: %w", deleteErr)
}
return nil
})
if err = g.Wait(); err != nil {
return fmt.Errorf("%s: %w", serverKey, err)
} }
villagesSyncedPayload, err := domain.NewVillagesSyncedEventPayloadFromVillages( villagesSyncedPayload, err := domain.NewVillagesSyncedEventPayloadFromVillages(

View File

@ -28,6 +28,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "10"
- name: DB_MAX_IDLE_CONNS
value: "5"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -25,6 +25,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "5"
- name: DB_MAX_IDLE_CONNS
value: "2"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -25,6 +25,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "5"
- name: DB_MAX_IDLE_CONNS
value: "2"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -25,6 +25,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "5"
- name: DB_MAX_IDLE_CONNS
value: "2"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -25,6 +25,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "5"
- name: DB_MAX_IDLE_CONNS
value: "2"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -25,6 +25,10 @@ spec:
secretKeyRef: secretKeyRef:
name: twhelp-secret name: twhelp-secret
key: db-connection-string key: db-connection-string
- name: DB_MAX_OPEN_CONNS
value: "5"
- name: DB_MAX_IDLE_CONNS
value: "2"
- name: RABBITMQ_CONNECTION_STRING - name: RABBITMQ_CONNECTION_STRING
valueFrom: valueFrom:
secretKeyRef: secretKeyRef: