Mysql недостающие данные вставлены с горутинами - PullRequest
0 голосов
/ 10 марта 2020

Я обновляю записи из другого ресурса в базе данных.

// Turn into batches with batchSize == 10
    batches := service.TurnIntoBatches(cModels, 10)

// Sync to our db
var wg sync.WaitGroup
customerChannel := make(chan []*model.Customer, len(batches))

for _, batch := range batches {
    wg.Add(1)
    go UpdateCustomers(batch, &wg, uc.customerRp, customerChannel)
}
wg.Wait()
close(customerChannel)


func UpdateCustomers(customers []*model.Customer,
    wg *sync.WaitGroup,
    rp repository.CustomerRepositoryInterface,
    channel chan []*model.Customer) {
    defer wg.Done()
    for _, c := range customers {
        //err := Update logic
        if err != nil {
            logger.WithFields(logrus.Fields{
                "error":                err,
            }).WithError(err).Error("Updating failed!")
        }
    }
}

Если я получил 50 записей, это 5 пакетов из 10. Всего 50 insert query, как и ожидалось. Все они вернули [1 rows affected or returned ]

Однако, если я запрашиваю из базы данных, иногда бывает 45 или 46 записей. В чем проблема и как ее исправить?

...