juan_gandhi: (Default)
Шозанахом, как писали где-то полгода назад, умные люди называют Гибернейт.

Я тут чего задумал. Есть у меня таблица на миллион записей, не ахти какая, но, чтобы тест бежал внутри эклипса (внутри эллипса, если эллипс определить как эклипс), надо как-то "оптимизировать" - и вот я впендюрил вью в базу, чтобы мне не все колонки выдёргивать - дальше сгенерировал хабеме файл и джавный файл с "сущностью" этого вью (как по-русски вью называется? Неужели вид? А по-испански виста? А по-украински?)

Короче, получились почему-то два джавных файла. Один для вью, другой для его "айди". И все колонки от вью - в "айди". Ну хорошо, и пишу я к нему Даоса, чтобы читать этот вью, по странам. И этот Даос, будучи не вполне просветлённым, говорит, что у вью нету какого-то то ли рендерера, то ли ещё чего-нить. Тогда я подставляю "айди" класс. И чё, хотя в этом классе все поля определены, Даос Шозанах говорит мне, что у него нет страны. Космополит хренов, этот класс.

Тогда я игнорирую эти все шозанаховы трюки и пишу простой сиквел-запрос, чтобы Даос его исполнял. Но Шозанах и тут не дремлет, и сообщает, что таких полей он не знает, ну и т.д. Я знаю, а он не знает.

И так я провёл если не зиму, так несколько дней. И дошло до меня, что если не умеешь летать, то не надо выпендриваться, а надо читать таблицу вместо вью. Прихожу с утра, меняю код в трёх строчках - и понеслась.

Буду впредь проще. Постараюсь по крайней мере. Мне в предыдущей конторе, забыл как звать, хватило приключений с Шозанахом; мне даже инкриминировали какие-то баги этого Шозанаха, я не успел спросить, да и интереса не было, т.к. эта инкриминация произошла уже при расставании, а в момент расставания лучше не вспоминать плохое, а сосредоточиться на хорошем, поблагодарить за выходное пособие и доставленное удовольствие, посмеяться и пойти по своим делам.
juan_gandhi: (Default)
Сегодня с утреца поглядел на страницу ексепшенов - ничего нету, всё тихо. Стал было радоваться тихому утру - можно какой-нибудь большой рефакторинг заварить, пока ничего не сломано (предыдущий большой рефакторинг сидит ждёт выхода в продукцию).

Вдруг кабум, эксепшен. Пошел смотреть в логи, нашел другой. Тут и Адам подоспел, говорит, а чёето у меня транзакция висит по пять минут.

Итак, три кварка к обеду. А что было?

1. Тыпычный дедлок, покажите мне стектрейс, я его починю. У меня когда юзер спасается, то его имущество спасается первым. (When a User is saved, some of its data is saved first). Ну а кое-где у нас порой, в другом коде и в другой транзакции, сначала спасаем юзера, а потом его имущество. Понятно, что эти две транзакции подрались и за юзера, и за имущество. Одна держит имущество, ждёт когда юзера отдадут, а другая наоборот.

2. Протечка транзакции. Затеял один умник устроить кеш на данные. Когда данные нужны, просим кеш, а у кеша есть метод, достающий данные. Он их достаёт через транзакцию. И возвращает. Ну как бы не очень монадично, верно? Так вот, а Хыбернейт, он же ленивый; он возвращает пустые обёртки; мол, попросят конкретный контент, прочитаем. Вот оно в кеше и валяется, нечитаное. И когда дело доходит полистать данные, нет ли там чего хорошего, транзакция давно уже испарилась, а кеш ещё нет. Так что кабум, взрыв на макаронной фабрике, выдёргивание из шляпы несуществующего кролика. Ну чё, надо немножко реифицировать, если решили покешировать.

3. Загадка. Адам пишет, мол, транзакция виснет. Посмотрели - виснет на локе, доступ к таблице, где сгенерированные key ranges сидят. Что смешно, в его конкретном случае в этой таблице всего одна строка. И если попинать майсиквел, то имеет место всего одна транзакция. И такое ощущение, что она сама себя и заперла. Следов другой транзакции нету. Да и квери-то весь - update ... set ... where... - одну строку апдейтнуть.

Перестартовали майсиквел, стали смотреть поведение. Оказалось, к этой таблице идёт бурный поток запросов, текущий ключ увеличивается на 100 несколько раз в секунду. Чтоб не разбираться в глюках, я просто увеличил размеры key range в 200 раз - и майсиквел затих. Всё работает, в смысле. Сейчас пойду поработаю над генератором ключей, чтобы он статистику подбирал да фиксил range size, пока не добьётся, чтобы не больше одного типа запроса в десять секунд. Какая разница, длинных чисел нам до сингулярности должно хватить. А там, глядишь, ещё 64 бита в дискурс добавят.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

August 2025

S M T W T F S
      12
3456789
10111213141516
17181920212223
24252627282930
31      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 9th, 2025 06:18 am
Powered by Dreamwidth Studios