feat: implement locking mechanism for marketplace operations to prevent race conditions
This commit is contained in:
@@ -117,6 +117,13 @@ func (r *apiRepository) GetProducts(ctx context.Context, marketplaceID int, req
|
||||
resultChan <- cachedMessage.Offers
|
||||
return
|
||||
}
|
||||
locker := *redis.Locker
|
||||
_, cancel, err := locker.TryWithContext(ctx, fmt.Sprintf("ym:products:marketplace:%d:lock", businessID))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
r.setOfferMappingsRateLimit(businessID)
|
||||
// all offers
|
||||
var allOffers []*pb.GetProductsResponse_Offer
|
||||
@@ -213,11 +220,17 @@ func (r *apiRepository) CalculateProductTariffs(ctx context.Context, marketplace
|
||||
defer close(resultChan)
|
||||
defer close(errChan)
|
||||
|
||||
_, client, _, err := r.setupMarketplaceClient(ctx, marketplaceID)
|
||||
_, client, businessId, err := r.setupMarketplaceClient(ctx, marketplaceID)
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
locker := *redis.Locker
|
||||
_, cancel, err := locker.WithContext(ctx, fmt.Sprintf("ym:tariffs:marketplace:%d:lock", businessId))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
r.setTariffsRateLimit()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user