@dlangru

Страница 663 из 719
Andrey
23.08.2018
21:35:18
https://github.com/postgres/postgres/blob/322548a8abe225f2cfd6a48e07b99e2711d28ef7/src/interfaces/libpq/fe-misc.c#L618

а, уже)

там же написано, что закрытие соединения считается ошибкой, поэтому с -1 сравнивается

Denis
23.08.2018
21:37:34
дык прочитанное будет == 0 а не -1 же? Ведь признак удалённого закрытия это read event + 0 данных

Google
Andrey
23.08.2018
21:38:55
при чем тут, сколько будет прочитано. это логика этой функции, не надо путать ее с read

Denis
23.08.2018
21:39:45
какой - той?

вот мы выше обсудили, щас процитирую

Andrey
23.08.2018
21:40:12
этой - pqReadData

Denis
23.08.2018
21:40:12
зачем? просто читаешь. елси прчел 0 - сокет закрылся

если -1 - это ошибка

В моём случае ошибки нет - удалённый сервер корректно закрыл сокет.

А я этого "не увидел"

Andrey
23.08.2018
21:40:47
это если ты читаешь сисколом read или recv.

а pqReadData - это постгревая функция. ты же с помощью ее читаешь, а не через read

непосредственно

Denis
23.08.2018
21:45:41
она не проверяет количество данных == 0 или нет

Google
Andrey
23.08.2018
21:45:59
само собой, что она внутри вызывает read/recv, но вот возвращаемые значения она меняет, как написано в доке

Denis
23.08.2018
21:46:06
а это значит что она пропустит удалённое закрытие сокета же

вот значит попробую щас проверять if(status == CONNECTION_BAD) после неё

Andrey
23.08.2018
21:47:44
да не пропустит она ничего. 20 лет не пропускала, а тут на тебе

Denis
23.08.2018
21:48:45
человек жалуется что после отключения докера коннекты остаются в неведении

и при обращении по ним отваливаются по таймауту сокета (у меня в софтине задан)

Andrey
23.08.2018
21:50:23
всякие pgboucer-ы не стоят?

Denis
23.08.2018
21:50:33
нет

телнетом попробовал - телнет обрывается, значит дело в моём коде

т.е. в коде библиотеки vibe-postgres

Andrey
23.08.2018
21:52:56
ну я с этим и не спорю, что дело скорей всего в твоей либе)

ладно, спать пора, лень уже разбираться

Denis
23.08.2018
21:57:00
ну тут ещё не понятно почему даже если сокеты портятся то при последующих обращениях это не вылазит?

Andrey
23.08.2018
21:58:53
https://github.com/postgres/postgres/blob/322548a8abe225f2cfd6a48e07b99e2711d28ef7/src/interfaces/libpq/fe-misc.c#L804

ну там я смотрю достаточно навороченная логика, в pqReadData. но по идее, закрытие соединения должно определяться

возможно надо юзать pqSocketPoll, что бы корректно определялось состояние, все, спать

Denis
23.08.2018
22:05:00
Понахуевертили сокетов и обёрток...

Andrey
23.08.2018
22:05:06
вово

Oleg
23.08.2018
22:13:31
ну тут ещё не понятно почему даже если сокеты портятся то при последующих обращениях это не вылазит?
кажется есть какая-то тема, что нужно сначала разорвать соединение (что-то отправляется), а потом уже закрыть сокет

Google
Denis
23.08.2018
22:15:56
Не, вот гляди. Есть пул коннектов. Базу выключили. Приложение с пулом об этом ничего не узнало почему-то.

Ну или узнало но обработало неверно эту инфу и как бы не узнало.

далее я пытаюсь взять конект из пула и что-то послать

и в ответ ошибка таймаута

вместо, например, обшибочного сокета типа "недоступен сервер" или навроде того

странно. я сам не перепроверял - всё со слов клиента. Заслал ему патч попробует скажет

Oleg
23.08.2018
22:19:13
на стороне сервера такое закрытие должно быть

https://github.com/deviator/modbus/blob/master/source/modbus/connection/tcp.d#L93

Denis
23.08.2018
22:20:31
да, и сервер его произвёл

да, я проверил телнетом - всё отлично закрывается.

Oleg
23.08.2018
22:21:22
я когда с этим разбирался тоже не мог отловить сначала, что сервер завершился

Denis
23.08.2018
22:21:27
т.е. наша софтина получает тоже эту инфу, но почему-то никак не использует и потом что-то странное тоже насчёт таймаута

Oleg
23.08.2018
22:21:47
зачем тебе блокирующие сокеты?

Denis
23.08.2018
22:21:51
я бы не удивился если бы просто из сокета полезли ошибки при обращении, но тишина - загадка

Oleg
23.08.2018
22:22:15
тогда -1 не всегда ошибка

Denis
23.08.2018
22:22:28
я не могу читать из сокета - читает из него libpq

Oleg
23.08.2018
22:22:30
это может значить что нет данных

Denis
23.08.2018
22:22:39
поэтому никаких -1 мне недоступно

Google
Denis
23.08.2018
22:22:46
я могу getsockopt

Oleg
23.08.2018
22:22:46
Denis
23.08.2018
22:22:58
там моя поверх libpq

https://github.com/denizzzka/vibe.d.db.postgresql/blob/master/source/vibe/db/postgresql/package.d собсно, вся либа целиком, практически

в функции waitEndOfRead оно не детектит этой проблемы с сокетом

https://github.com/denizzzka/vibe.d.db.postgresql/pull/22/files патч сделал, проверим

Toha
24.08.2018
02:41:32
а в ди не принято ифы оборачивать в фигурные скобки?

когда там какая то одна инструкция только

Dmitry
24.08.2018
05:51:32
Петь, хватит с этим каналом. Он не тематичский. Ссылку тру.

Admin
ERROR: S client not available

Evil
24.08.2018
05:58:23
Схуяли он не тематический? Канал про существующие интересные программные алгоритмы генерации всякого разного.

На D тоже будут

Igor
24.08.2018
06:15:12
далее я пытаюсь взять конект из пула и что-то послать
Ну если базу выключили и она закрыла соединения то ты пооусишь не таймаут а успешное чтение 0 байт. Если сервер выключили то будет таймаут. Если выключили и включили то будет ошибка, нааерное connection reset

Denis
24.08.2018
07:29:36
Вот, и этот момент с закрытием базы сейчас нигде не отлавливается, похоже

И не ясно почему при попытке моего клиента использовать сокеты закрытые на том конце тоже нет никаких ошибок

Andrey
24.08.2018
07:39:55
а он как пишет, через евентлуп, waitWrite какой нить?

Denis
24.08.2018
07:44:27
Andrey
24.08.2018
07:44:43
да

там же твоя эта либа тоже юзается? или это не твой клиент

Denis
24.08.2018
07:46:40
Неё, там libpq

Google
Denis
24.08.2018
07:47:31
И сокеты она создаёт и закрывает, я только у нее попросить его могу чтобы асинхронные ожидания, например, сделать чтобы пул организовать

Щас не на месте, но код открыт, можно глянуть детали.

Pavel
24.08.2018
10:30:06
https://forum.dlang.org/thread/ncbawciyybdksecurmsc@forum.dlang.org как же грустно от таких статей :(

Karbin
24.08.2018
10:36:14
в этой теме ещё много подобных историй

Igor
24.08.2018
10:40:09
я согласен с тем что негатива не больше чем раньше. с другой стороны позитива - больше

есть более-менее стабильный workflow по dip-ам

появляются полезные библиотеки более ориентированные на юзера а не на крутого хакера

Andrey
24.08.2018
10:41:09
я там согласен с Joakim. развели нытье...))

Maxim
24.08.2018
10:42:53
ну вообще, в статье правильные мысли высказаны)

нельзя писать взрослый софт, когда ты не уверен, что следующий релиз компилятора не поломает его)

Igor
24.08.2018
10:44:37
есть разные методы борьбы с этим - не используй bleeding edge фичи, дави на разработчиков компилятора, включай свой пакет в ci тесты компилятора

Maxim
24.08.2018
10:46:32
форкай компилятор

Pavel
24.08.2018
10:47:17
появляются полезные библиотеки более ориентированные на юзера а не на крутого хакера
Я вчера столкнулся с проблемой что ив твою библиотеку не могу инжектнуть socks ?

Но код выглядит гораздо приятнее чем vibed

Maxim
24.08.2018
10:47:39
сосбственно, про то и статься, что в какой-то момент разработка превращается в борьбу с компилятором и сообществом за выживание, и успешные в этой борьбе компании окукливаются в свой мирок

Pavel
24.08.2018
10:48:02
да

Igor
24.08.2018
10:48:27
хм, должно быть не сложно. http прокси там как-то всунут

можем вместе разобраться

Pavel
24.08.2018
10:50:11
http это другой уровень. Там в классе HTTPRequest есть метод private setupConnection и вот туда надо подсунуть. Но там new TCPStream создается жестко. Надо через фабрику или подобную жава-магию.

И вообще по теории dependency injection надо стараться чтобы не было нигде оператора new в библиотечном коде. Все компоненты должны внедряться как зависимость или создаваться через фабрики.

Страница 663 из 719