fix concurrency bug
This commit is contained in:
parent
9041745d61
commit
1203c574dd
|
@ -1,3 +1,4 @@
|
|||
.env.development
|
||||
.env.production
|
||||
.env
|
||||
.env
|
||||
.netrc
|
|
@ -1,6 +1,11 @@
|
|||
FROM golang:alpine
|
||||
RUN apk add git
|
||||
|
||||
ENV MODE=production
|
||||
ENV GOPRIVATE=github.com/tribalwarshelp
|
||||
|
||||
COPY ./.netrc /root/.netrc
|
||||
RUN chmod 600 /root/.netrc
|
||||
|
||||
WORKDIR /go/src/app
|
||||
COPY . .
|
||||
|
|
|
@ -45,6 +45,8 @@ func (h *handler) init() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Close()
|
||||
|
||||
models := []interface{}{
|
||||
(*models.LangVersion)(nil),
|
||||
(*models.Server)(nil),
|
||||
|
@ -67,6 +69,7 @@ func (h *handler) createSchema(key string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Close()
|
||||
|
||||
if _, err := tx.Exec(fmt.Sprintf("CREATE SCHEMA IF NOT EXISTS %s", key)); err != nil {
|
||||
return err
|
||||
|
@ -158,9 +161,11 @@ func (h *handler) updateData() {
|
|||
log.Println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
max := runtime.NumCPU() * 5
|
||||
count := 0
|
||||
|
||||
for _, server := range servers {
|
||||
url, ok := urls[server.Key]
|
||||
if !ok {
|
||||
|
@ -176,15 +181,17 @@ func (h *handler) updateData() {
|
|||
baseURL: url,
|
||||
}
|
||||
count++
|
||||
wg.Add(1)
|
||||
go func(server *models.Server, sh *serverHandler) {
|
||||
wg.Add(1)
|
||||
defer wg.Done()
|
||||
log.Printf("%s: Updating", server.Key)
|
||||
if err := sh.updateData(); err != nil {
|
||||
log.Println(errors.Wrap(err, server.Key))
|
||||
} else {
|
||||
log.Printf("%s updated", server.Key)
|
||||
log.Printf("%s: updated", server.Key)
|
||||
}
|
||||
wg.Done()
|
||||
}(server, sh)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
|
|
|
@ -311,6 +311,8 @@ func (h *serverHandler) updateData() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Close()
|
||||
|
||||
if len(tribes) > 0 {
|
||||
if _, err := tx.Model(&tribes).
|
||||
OnConflict("(id) DO UPDATE").
|
||||
|
|
10
main.go
10
main.go
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/tribalwarshelp/shared/mode"
|
||||
|
||||
|
@ -25,10 +26,11 @@ func init() {
|
|||
|
||||
func main() {
|
||||
db := pg.Connect(&pg.Options{
|
||||
User: os.Getenv("DB_USER"),
|
||||
Password: os.Getenv("DB_PASSWORD"),
|
||||
Database: os.Getenv("DB_NAME"),
|
||||
Addr: os.Getenv("DB_HOST") + ":" + os.Getenv("DB_PORT"),
|
||||
User: os.Getenv("DB_USER"),
|
||||
Password: os.Getenv("DB_PASSWORD"),
|
||||
Database: os.Getenv("DB_NAME"),
|
||||
Addr: os.Getenv("DB_HOST") + ":" + os.Getenv("DB_PORT"),
|
||||
PoolTimeout: 1 * time.Minute,
|
||||
})
|
||||
defer func() {
|
||||
if err := db.Close(); err != nil {
|
||||
|
|
Reference in New Issue