Closed MikhailFerapontow closed 4 months ago
Сейчас функция GetComics работает через самописный working pool. В будущем он перейдёт на errgroup. Но у меня вопрос: Как без errgroup правильно организовать обработку контекста?
Сейчас функция GetComics работает через самописный working pool. В будущем он перейдёт на errgroup. Но у меня вопрос: Как без errgroup правильно организовать обработку контекста?
Привет,
https://golang.hotexamples.com/examples/net.http/Request/WithContext/golang-request-withcontext-method-examples.html если идет речь об отмене реквестов. Если реквесты и так с таймаутом, можно прерывать for:
for ...
select {
case <- ctx.Done(): return
default:
}
Так же добавил в логи сообщение об успешном окончании операции добавления комиксов в db. До этого логи заканчивались на ошибке, потому что я хотел сохранить следующую структуру db:
[
{
//comics 1
},
{
//comics 2
},
...
]
Для этого забирал всё что до этого находилось в database.json, апендил к зафетченным комиксам и после добавлял обратно в базу. Но при остутствии записей в database.json (пустой файл) Unmarshal выдёт ошибку, ведь пустая строка не является валидным json. На самом же деле комиксы добавлялись в db.
Исправил баг с увеличением базы данных на 1 запись при каждом запуске. Баг происходил из-за 404 комикса. Добавил его в хэш таблицу существующих в базе данных комиксов как исключение
@vbelogrudov Я понял корень ошибки. Я неправильно понял как работает метод Do у http клиента. Он даёт err только в случае если response == nil. Что в случае Get запроса на 404 комикса неверно. Мы получаем:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
При проверке на ResponseStatus я бездумно пробрасывал ошибку наверх, но он был nil. Поэтому ошибка не проверялась и пустой json с дефолтными значениями попадал в базу.
Issue #5 выполнен.
Выполнены все пункты, кроме 6-го.
Объяснение числа goroutines.
Было проведено исследование зависимости скорости скачивания комиксов от числа goroutines. Исселедование проходило на следующей машине:
Что могло повлиять на результаты
Мой провайдер не даёт доступа к сайту xkcd.com, поэтому исследование проводилось с использованием USB-модема телефона c Tele-2. Замеры проводились единожды, поэтому велик фактор погрешности.
Результаты
Можно заметить, что при увеличении числа goroutines, начиная с 90, не происходит увеличение скорости.