Артем
ок
Артем
вы знаете, вроде получилось решить. Процесс умирает, бот останавливается. Вынес логику закрытия коннекшенов из defer прямо в тело main
Артем
Vladislav
Артем
Maks
Кто-то может, пожалуйста, пояснить, почему defer не вызывался?
Ctrl-C or another signal will terminate the program without calling deferred functions. You can catch ctrl-c using a signal handler. Read the documentation for the os/signal package, it has OS specific behavior. Something like below would catch ctrl-c:
c := make(chan os.Signal, 1)
signal.Notify(c,os.Interrupt)
go func() {
s := <-c
// signal caught, cleanup
}()
Артем
понятно, но у меня defer срабатывал 100 из 100, когда я через грейсфул шатдаун выходил по Ctrl-C
Артем
это он начал барахлить, когда рековер с panic добавил
Артем
вот, closing... логи в красных скобках в defer'e были полностью
Maks
Кста а как консьюмеры с грейсфул шатдауном намутить?
Илья
Илья
по идее именно он блокируется
Артем
pgx.pool.close
Ghost
Можно ли сделать так, найти строку по слову, елси она есть, вернуть строку целиком
Beta
Гайс, есть видос или статья про логирование хорошая?
Илья
Артем
Ghost
Регуляркой не хочу, там не то получается
Илья
хм..
а как ты работаешь в пулом? достаешь соединение или просто вызываешь Query/Exec...
Артем
вызываю квери, пока не дошел до нескольких соедов
Илья
// Close closes all connections in the pool and rejects future Acquire calls. Blocks until all connections are returned// to pool and closed.
Илья
во
Илья
у тебя из-за паники может не возвращаться соединение к бд
Илья
Илья
здесь c.Release() не в дефере, поэтому у тебя блокировка
Илья
чуть позже напишу issue с этим
Артем
Артем
блочит
Илья
сейчас скину как переписать
Артем
спасибо вам
Артем
у меня паника вызывалась после Query уже, когда я сканил rows
Илья
Илья
Илья
c.Query ....
Артем
у меня же паника не в Query поднималась, разве это помогло бы?
Артем
я, конечно, посмотрю и перепишу, но все равно
Илья
Артем
щас попробую
Артем
сам зафоршу панику в том-же месте
Артем
кстати реально же, дефер после паники
Артем
освободит соеду
Артем
все получилось) спасибо
Илья
реально?)
Артем
Артем
после паники все закрылось как надо
Илья
Larchenko
Хотя вот по опыту хибера, алхимии, нигде странных выводов орм не встречал
Артем
typeorm ne videl
Maks
Так а че по консумерам
Maks
Как там грейсфул мутить
Илья
каким консумерам?
Илья
точнее с какой стороны
Maks
Ну у тебя есть слушатель очереди раббита и нужно что бы он завершил текущую операцию и потом перестал слушать
Maks
Что бы выполнить обновление среды
Maks
Код обновится, структура бд к примеру тоже
Grigory
Через WaitGroup
Grigory
Отписываешься с очереди
Ожидаешь завершения
Выходишь из программы
Илья
здесь c.Release() не в дефере, поэтому у тебя блокировка
Если у вас возникнет желание использовать pgxpool.Query и другие методы, то вы должны понимать, что соединение отпускается только в rows.Close() без дефера.
Что это значит? Если забыть сделать defer rows.Close() сразу после вызова метода, то при панике он не выполнится и коннект будет вечно висеть. Что это значит (х2)? Грейсфул shutdown заблокируется, потому что pgxpool при закрытии ждет когда все коннекты вернуться в пул, а pool.Close() не принимает контекст, т.е. нельзя сделать таймаут.
Даже если смириться с принудительным завершением программы, на уровне выше pgbouncer (или подобный) может вылететь с ошибкой, но в теории не фатальной.
Как решать проблему? Вручную получать и отпускать соединение:
conn, err := pool.Aqiure()
defer conn.Release()
По факту этот же код мы видим в исходниках (пример, не еденичный), но теперь при панике мы можем гарантировать что коннект отпустится.
В общем раст лучше, а прежде чем писать raw sql запросы почитайте https://github.com/golang/go/wiki/SQLInterface или http://go-database-sql.org/
Anonymous
To everyone who need more money or those looking for a second source of getting income? I introduce you to my life saver EXPERT OPTIONS @team_christians
Contact the platform now and give me thanks..
https://t.me/joinchat/aqjaGwMPuN4yNDJk
Dmitriy
Всем привет! Начинаю изучать Golang, подскажите бесплатные курсы плиз.
Grigory
Dmitriy
12:47 👊
12:47 👊
12:47 👊
это понятно , как это побороть
12:47 👊
вывод в консоль параметра , общий вид
12:47 👊
{"log_request_evaluation":{"possible":true,"expected_size":311333,"max_possible_day_quantity":1034655,"log_request_sum_max_size":10737418240,"log_request_sum_size":10737418240}}
{true 311333 1034655 10737418240 10737418240}
Eldos
У тебя есть структура PossibleAll и у него внутри в виде «поле» в виде структуры
Eldos
Не более
Eldos
Так что если ты хочешь чтобы PossibleAll имел якобы массив в виде поля структуры LogRequestEvaluation, то LogRequestEvaluation нужно отдельно создавать, а PossibleAll уже будет иметь массив типа этой структуры. Это чисто про индексацию.
12:47 👊
ок , понял
12:47 👊
пробую в ручную
Eldos
👍🏽
wowlikon.py
Можно ли как нибуть скомпилировать golang код под linux. (С windows)?