Go 1.8 контекстное время ожидания с Postgresql
В начале моего контроллера я создаю контекст с таким временем ожидания:
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()
И затем я использую этот контекст в каждом запросе к базе данных следующим образом:
QueryRowContext(ctx, query, ...args) // where ctx is context
Однако, когда я загружаю свою тестовую программу, я замечаю, что некоторые из моих запросов возвращают ошибку "pq: canceling statement due to user request"
, И чем больше запросов я делаю, тем больше ошибок получаю.
Но, если я не использую контекст с таймаутом, а просто использую context.Background()
Я не получаю ошибок независимо от количества запросов.
Каждый запрос занимает около 50 мс, поэтому время ожидания не может быть. Я пробовал контекст с отменой context.WithCancel(context.Background())
и я тоже получаю эти ошибки.
В чем может быть причина этих ошибок?
// create context to cancel working if 10 seconds passed
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()
// parses queries
var response []byte
request := model.GetProductByBarcodeRequest{}
barcode := r.URL.Query().Get("barcode")
storeID := r.URL.Query().Get("store_id")
transactionType := r.URL.Query().Get("type")
request.Barcode = &barcode
request.StoreID = &storeID
request.Type = &transactionType
// processing
result, err := model.GetProductByBarcode(ctx, request)
response = controller.ToJson(result, err)
// writing response to user
w.Write(response)