Вот как-то так иногда выходит. Первый комментарий в 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) ‎· Размытое в синей футболке
К слову, а откуда столько боли вокруг дублирующихся записей — вроде бы браузеры не так уж часто посылают форму два раза два раза? ‎· Размытое в синей футболке
o_O (уныние). а дело уже не в браузерах, дело в автоматическом ретрае дедлоков. ‎· псы в рапиде
И они не откатывают транзакции? Или потом случается uncommitted read? ‎· Размытое в синей футболке
@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! ‎· Buttbuttin
^ доку на 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 достаточно чтобы лечить локи по фотографии, но неочевидного счастья там тоже хватает. ‎· Размытое в синей футболке
ну-тко, давайте-ка пофлудим в каментах ‎· псы в рапиде
кстати да, комменты вроде ведут себя хорошо. ‎· Размытое в синей футболке
Но на меня мало подписок, а на саппорт много. Может, там? Или в @italia? :) ‎· Размытое в синей футболке
да! меня поражает, что нигде в итальянских постах я не видел дублирующихся комментариев, и никто (судя по гуглотранслейту) на это не жаловался. загадка какая-то ‎· псы в рапиде
А вот, подтупили немного ‎· Размытое в синей футболке
А вот, подтупили немного ‎· Размытое в синей футболке
Дубликаты есть ‎· Размытое в синей футболке
И, да, успеваю ввести новый коммент, пока предыдущий постится ‎· Размытое в синей футболке
с удалением комментариев что-то не то, щас буду разбираться. ‎· псы в рапиде
Вот да, я не очень понимаю, что вообще триггерит этот баг. Но вот есть как видишь. ‎· Размытое в синей футболке
Вот да, я не очень понимаю, что вообще триггерит этот баг. Но вот есть как видишь. ‎· Размытое в синей футболке
Видимо, просто надо много писать ‎· Размытое в синей футболке
Ну и тестерскую карму не пропьешь. *наливает* ‎· Размытое в синей футболке
Ну и тестерскую карму не пропьешь. *наливает* ‎· Размытое в синей футболке
Ну и тестерскую карму не пропьешь. *наливает* ‎· Размытое в синей футболке
Ну и тестерскую карму не пропьешь. *наливает* ‎· Размытое в синей футболке
В общем, я просто флужу, никаких особых трюков нет. Даже не налил еще ‎· Размытое в синей футболке
В общем, я просто флужу, никаких особых трюков нет. Даже не налил еще ‎· Размытое в синей футболке
Слушай, мне кажется что это таки JavaScript. Потому что я оставил комментарий тупить, и попробовал рефрешнуть страницу — получил тут же штук пять попапов — сейчас попробую включить мониторинг и посмотреть что по сети при этом летало. ‎· Размытое в синей футболке
Пока рекорд — учетверение ‎· Размытое в синей футболке
И еще коммент ‎· Размытое в синей футболке
Много комментов разом ‎· Размытое в синей футболке
Тест тест тест. ‎· Размытое в синей футболке
Тест тест тест. ‎· Размытое в синей футболке
Хард релоад не спасает, Веб инспектор в сафари бесполезен. Пойду таки налью. ‎· Размытое в синей футболке
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎· Размытое в синей футболке
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎· Размытое в синей футболке
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎· Размытое в синей футболке
Ну в общем воспроизводится. Хочешь посмотреть на сессии и локи на живой базе? ‎· Размытое в синей футболке
Ну и редактирование отвалилось — а еще десяток комментариев назад работало. ‎· Размытое в синей футболке
ща, я борюсь с обновлением риверов. щас я сам еще попробую на своей машине повоспроизводить. --chg ‎· псы в рапиде
Ага, я просто вводил комментарии один за другим — как только комментарий слегка подтупляет, можно за ним следом послать десяток, и им уже станет плохо. Интересно, что если еще немного подождать, появляется странный эффект с формой комментария — ты ее раскрываешь, а она схлопывается меньше чем за секунду. Ну и если рефрешнуть страницу, вылетает десяток попапов. Так что мне кажется что это XHR таймаутится и перепосылает запрос. Но наверняка гоню. ‎· Размытое в синей футболке