juan_gandhi: (Default)
[personal profile] juan_gandhi
Сегодня трахался с одной фигней. И вот код ходит куда-то на сервер, а приносит в ответ "неправильный json". Шо за json, я ничего такого не посылаю. А ошибка приходит. Стал изучать вопрос. А чо он неправильный, а там http4s берет какой-то Message[T], пытается из него сделать ByteBuffer, и обламывется, т.к. ByteBuffer оказывается пустой. Из чего он делается - Message состоит из каких-то Fragments; и вот один фрагмент пустой.

Что за фрагмент, чо он пустой, непонятно, но внутри его сидит SingleChunk, в котором сидит Chunk, и про него известно, что он пустой. Ну окей, ну покажите мне, что было-то. А не показывают. Там, конечно, цикл, но цикл навалян через рекурсию (типа так круче), а рекурсия оптимизирована через трамплин. В результате стектрейса нету, промежуточные данные не видны, Message не виден, потому что это макрос. А откуда вызвали, тоже непонятно, потому что трамплин, и весь стектрейс проебан.

И вот каким-то чудесным образом я где-то замечаю, что сервер-то послал HTTP 400. Ну правильно. И, конечно, в таком случае никакого джейсона. Но http4s на это все кладет с высокой колокольни, и начинает "парсить джейсон".

Ну на эту тему даже тест есть. Только этот тест не ловит HTTP 400, а ловит ошибку. Ага, ошибка! Ура. 

Такие дела.
 

А внутри cats, свободные монады, IO монада, завернутая в EitherT. 

А смысл?! Если HTTP 400 вы не ловите.

Что-то после раста все это смешно выглядит.

 

Date: 2019-10-22 05:51 am (UTC)
From: [personal profile] sassa_nf
HTTP 400 is allowed to have a body, and content-type is allowed to declare it a application/json.

Date: 2019-10-22 02:17 pm (UTC)
From: [personal profile] sassa_nf
Not sure about an empty body being a well-formed JSON.

Date: 2019-10-22 02:28 pm (UTC)
From: [personal profile] sassa_nf
I see this as a case of EOF before a well-formed JSON could be decoded. Not sure why it deserves special treatment.

Now, why it thinks JSON should be there. Maybe the server filled the headers first, in anticipation what the type of response is going to be, then later figured out the request is malformed, and aborted with HTTP 400 (Bad Request) without having cleared the header.

If the headers don't say that, then, of course, the client-side pipeline is broken.

Date: 2019-10-22 03:51 pm (UTC)
From: [personal profile] sassa_nf
If you have a HTTP error code, you might want to have some diagnostic detail to go with it. We routinely do that ("IP ranges in the provided array overlap!"), so there is something to show in the UI, for example.

Date: 2019-10-22 05:03 pm (UTC)
From: [personal profile] sassa_nf
or return cross-tier correlation id, so you can correlate the logs.

Date: 2019-10-22 06:38 am (UTC)
xacid: (Default)
From: [personal profile] xacid
особенно "хороша" здесь ио монада - за что боролись на то и напоролись ... :)

Date: 2019-10-22 05:31 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
А я, между прочим, давно говорил про все эти монады-рекурсии и удобство отладки.

Непонятно только, что, неужто на Расте нельзя взять пустой буфер?

Date: 2019-10-23 12:04 am (UTC)
sab123: (Default)
From: [personal profile] sab123
Это я понял. Я не понял, каким образом конкретный язык программирования не даст программисту использовать пустой буфер?

Date: 2019-10-22 05:40 pm (UTC)
yucca: (Default)
From: [personal profile] yucca
А я на днях некоторое время пыталась понять, почему на совершенно невинную просьбу сохранить текст сервер мне выдает 500 Internal Server Error, который в логах никак не отражается. Оказалось, там у ModSecurity такое правило - считать подозрительными все строчки, в которых фигурирует update, set и =, независимо от того, что между ними.

Date: 2019-10-22 06:38 pm (UTC)
yucca: (Default)
From: [personal profile] yucca
Это другое правило, я еще не проверяла, насколько оно хорошо сработает с текстом типа "I dropped a glass on the table" :)

Date: 2019-10-22 06:29 pm (UTC)
From: [personal profile] caztd
> Что-то после раста все это смешно выглядит.
Эээ.. так и до плюсов докатиться можно ;)

Date: 2019-10-23 03:41 pm (UTC)
From: [personal profile] plovski
> А внутри cats, свободные монады, IO монада, завернутая в EitherT.

А вам уже говорили, что когда ваши труды по пропихиванию монадушек в массы увенчаются успехом - массы вам такое небо с овчинку functional style устроят, что вы проклянете тот день когда впервые услышали о монаде?

Ну так вот вам первые ласточки, enjoy.

Date: 2019-10-23 07:52 pm (UTC)
From: [personal profile] plovski
Монада - это вычисление с побочными эффектами

ох-хохо...

ну что ж - brace yourself for impact

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 2345 6 7
8 9 10 11 121314
15161718 192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 20th, 2025 09:00 am
Powered by Dreamwidth Studios