alf
Вот как-то так иногда выходит. Первый комментарий в UI успел раздвоиться, но потом сам схлопнулся в один, а второй было выглядел как нормальный, а потом я вдруг заметил что у поста внезапно стало много комментариев, развернул, а там такое.
Mac OS X 10.10.4, Safari Version 8.0.7 (10600.7.12) ‎- alf
К слову, а откуда столько боли вокруг дублирующихся записей — вроде бы браузеры не так уж часто посылают форму два раза два раза? ‎- alf
o_O (уныние). а дело уже не в браузерах, дело в автоматическом ретрае дедлоков. ‎- псы в рапиде
И они не откатывают транзакции? Или потом случается uncommitted read? ‎- alf
@alf https://docs.google.com/document/d/19SvjDChfasKzsgZNzmdnZCf7G... — а ты пропустил отчётик от @squadette? Там в рубёвой обёртке сохраняются коменты и потом скопом досылаются. ‎- адский хардлайн в засаде
/* транзакции здорового человека и транзакции active record :( */ ‎- 9000
я вообще не понимаю, что происходит. там уже нет никакой рубевой обертки. я вечером буду снова смотреть. там нет никаких "транзакций active record", это обычные мускульные транзакции поверх InnoDB. я просто видимо упускаю что-то оооочень простое. ‎- псы в рапиде
ПОРА ПЕРЕХОДИТЬ НА ПОСТГРЕС %) ‎- адский хардлайн в засаде
"внутри тела возникает исключение про MySQL deadlock" - а что там за дедлоки такие, в какой момент они возникают? ‎- Я много страдала
^^ в Postgres 9.5 наконец то добавили UPSERT, но я в общем и так через IF SELECT THEN UPDATE ELSE INSERT выкручиваюсь. Ну да, лишний запрос к базе. ‎- Я много страдала
Скорее уж переписать frontend на языке для быстрого исполнения вместо языка для быстрого прототипирования. Ну или throw more hardware at it, как делают те, кто освоил монетизацию. ‎- 9000
@vinsentru, ну как тебе сказать? про дедлоки в мускуле много написано, как уменьшать их вероятность тоже примерно понятно, но по определению ведь ты не можешь с ними справиться в общем случае. ‎- псы в рапиде
Ну да, я почитал сейчас их доку, выглядит печально. Слушай, а у вас там один сервер, нету Master - Slave репликации? Просто это хорошая практика читать из Slave а писать в Master, разносит нагрузку и тд. Поможет ли против дедлоков, не знаю. ‎- Я много страдала
Интересно-то, где в логике работы мокума получается ситуация, генерирующая дедлок. Чтобы получился дедлок, нужно попытаться захватить как минимум два лока, как я понимаю. ‎- 9000
локи захватываются при любых update и delete, по локу на каждый индекс и еще локи на строки таблицы. то есть ты просто пишешь SQL-операторы, которые пишут в базу, и больше тебе ничего делать не надо — все уже задедлочилось при неудачном стечении обстоятельств. ‎- псы в рапиде
@vinsentru, чтение из слейва никак не поможет, потому что дедлоки возникают, естественно, на запись. ‎- псы в рапиде
ну понятно, так и думал. тогда что, как-то денормализовывать схему базы? ‎- Я много страдала
Аааа, это отсутствие row-level locks, что ли? Если один запрос пишет в таблицу, все остальные ждут? И брать локи в каком-то предсказуемом порядке оно не умеет, чтобы дедлоков не было? Ууу :( ‎- 9000
@vinsentru, нахуя? надо просто повторять пока не получится ) это же сугубо хаотический феномен. Проблема в том что сраная рельса что-то такое делает, что генерирует дубликаты в этом случае. ‎- псы в рапиде
@9000, слушай, я опять не понимаю. ты опять пришел мне рассказать, что во всех нормальных языках кроме перла есть проверка что все переменные объявлены, что ли? типа, мускуль когда писали просто не подумали пятнадцать минут, как все нормальные люди, что ли? Вот это вот "если один запрос пишет в таблицу, все остальные ждут" — это вообще о чем? да чего уж там, я не понимаю — ты просто скажи "ой, я так понял, что в MySQL глобальный лок и поэтому там последовательный доступ к базе данных, вот дураки, не могли нормально сделать". я охуеваю если честно. ‎- псы в рапиде
то есть ты судя по всему про дедлоки в mysql узнал десять минут назад но ты уже уверен в том, что это потому что он написан на школьной олимпиаде по информатике, что ли? епта, я охуеваю реально. ‎- псы в рапиде
"InnoDB uses automatic row-level locking." вот прям так и написано https://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html ‎- Я много страдала
^^^ не надо катить на перл! use strict! ‎- Кубинский щелезуб
^ доку на 5.0 давать — это все равно что скриншоты Windows 95 постить. ‎- псы в рапиде
@dma, ты пропустил разговор, откуда эта цитата, он был на закате Френдфида. ‎- псы в рапиде
@squadette: да, я пришёл сказать, что вообразил себе глобальный лок. нет, я не пришёл кого-либо ругать, а через "ууу" попробовал выразить своё сочувствие по поводу technical challenges, которые вытекают из такого положения вещей. да, я узнал про устройство локов в mysql пару секунд назад и ичезающе мало. мне всё равно непонятно, каким образом мокум вызывает дедлоки (если row-level locking есть), но расспрашивать тебя я больше не буду. ‎- 9000
да там нет никаких technical challenges, на самом деле. там какая-то идиотская проблема. ‎- псы в рапиде
@squadette может что нибудь связанное с мемоизацией в ActiveRecord? Или вот например почему у меня в боксе комментария иногда остается висячий текст комментария после того как я запостил, это может быть связано? ‎- uncanny нейросеть
да наверное это AR что-то делает за занавеской. комментарий в боксе это чистый JavaScript, это я какой-то ивент неправильно обрабатываю. ‎- псы в рапиде
@9000 про mySQL не знаю, особенно не нарывался, а в DB2 было две неочевидных проблемы: (1) row-level lock — это на записи, и с ней-то все хорошо. Но еще есть отдельный лок на [каждом задетом] индексе, и он для начала не row-level, по понятным причинам, и крайне плохо отслеживается. Вот и два лока. Дальше, (2) локи эскалировались. То есть любой твой row lock мог самопроизвольно превратиться в page lock или table lock. И задедлочиться можно было собственно на процессе эскалации. Я, повторюсь, не знаю InnoDB достаточно чтобы лечить локи по фотографии, но неочевидного счастья там тоже хватает. ‎- alf
ну-тко, давайте-ка пофлудим в каментах ‎- псы в рапиде
кстати да, комменты вроде ведут себя хорошо. ‎- alf
Но на меня мало подписок, а на саппорт много. Может, там? Или в @italia? :) ‎- alf
да! меня поражает, что нигде в итальянских постах я не видел дублирующихся комментариев, и никто (судя по гуглотранслейту) на это не жаловался. загадка какая-то ‎- псы в рапиде
А вот, подтупили немного ‎- alf
А вот, подтупили немного ‎- alf
Дубликаты есть ‎- alf
И, да, успеваю ввести новый коммент, пока предыдущий постится ‎- alf
А то и два ‎- alf
с удалением комментариев что-то не то, щас буду разбираться. ‎- псы в рапиде
Или три? ‎- alf
Или три? ‎- alf
Или три? ‎- alf
Вот да, я не очень понимаю, что вообще триггерит этот баг. Но вот есть как видишь. ‎- alf
Вот да, я не очень понимаю, что вообще триггерит этот баг. Но вот есть как видишь. ‎- alf
Видимо, просто надо много писать ‎- alf
Ну и тестерскую карму не пропьешь. *наливает* ‎- alf
Ну и тестерскую карму не пропьешь. *наливает* ‎- alf
Ну и тестерскую карму не пропьешь. *наливает* ‎- alf
Ну и тестерскую карму не пропьешь. *наливает* ‎- alf
И еще ‎- alf
В общем, я просто флужу, никаких особых трюков нет. Даже не налил еще ‎- alf
В общем, я просто флужу, никаких особых трюков нет. Даже не налил еще ‎- alf
Слушай, мне кажется что это таки JavaScript. Потому что я оставил комментарий тупить, и попробовал рефрешнуть страницу — получил тут же штук пять попапов — сейчас попробую включить мониторинг и посмотреть что по сети при этом летало. ‎- alf
Пока рекорд — учетверение ‎- alf
А так? ‎- alf
И еще коммент ‎- alf
Много комментов разом ‎- alf
Раз ‎- alf
Два ‎- alf
Три ‎- alf
1 ‎- alf
2 ‎- alf
3 ‎- alf
Тест тест тест. ‎- alf
Тест тест тест. ‎- alf
Хард релоад не спасает, Веб инспектор в сафари бесполезен. Пойду таки налью. ‎- alf
11 ‎- alf
22 ‎- alf
33 ‎- alf
44 ‎- alf
55 ‎- alf
55 ‎- alf
55 ‎- alf
66 ‎- alf
77 ‎- alf
77 ‎- alf
77 ‎- alf
88 ‎- alf
88 ‎- alf
99 ‎- alf
99 ‎- alf
111 ‎- alf
222 ‎- alf
222 ‎- alf
222 ‎- alf
222 ‎- alf
333 ‎- alf
333 ‎- alf
444 ‎- alf
555 ‎- alf
777 ‎- alf
777 ‎- alf
888 ‎- alf
999 ‎- alf
2222 ‎- alf
3333 ‎- alf
3333 ‎- alf
4444 ‎- alf
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎- alf
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎- alf
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎- alf
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎- alf
Ну и редактирование отвалилось — а еще десяток комментариев назад работало. ‎- alf
ща, я борюсь с обновлением риверов. щас я сам еще попробую на своей машине повоспроизводить. --chg ‎- псы в рапиде
Ага, я просто вводил комментарии один за другим — как только комментарий слегка подтупляет, можно за ним следом послать десяток, и им уже станет плохо. Интересно, что если еще немного подождать, появляется странный эффект с формой комментария — ты ее раскрываешь, а она схлопывается меньше чем за секунду. Ну и если рефрешнуть страницу, вылетает десяток попапов. Так что мне кажется что это XHR таймаутится и перепосылает запрос. Но наверняка гоню. ‎- alf