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