Feb. 11th, 2012

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

Короче, я придумал этот аспект, Health.check("vot tut pocheshite pozhaluista");, но он не особо помогал. Постепенно локализовал - после queue.wait() вдруг база переставала работать (а данные записывались только частично - но они каждый в своей транзакции). Замена на Thread.sleep() убирала эффект.

Что делал - по совету присутствующего товарища [livejournal.com profile] magictoken понатыкал логов в постгрес; ну и свои логи тоже.

Выяснились интересные вещи:
- записи перестают попадать в таблицу после queue.wait();
- лог postgres показывает, что транзакция открывается, данные приходят, транзакция закрывается.
- если не менять код, то наблюдается очень стабильное поведение.

Короче, что выяснилось. В сервере в разных потоках бегают сразу два серверных приложения. Они используют две разные базы данных. В принципе, когда мы получили задание, то в глобальный синглтон складывается рефренс на фабрику "энтити менеджеров" (каждый раз, когда я вижу в коде слово "менеджер", моя рука тянется к кнопке delete). Как только наше приложение садится подождать, пока на его мессагу ответят, просыпается другое приложение (могло бы на другом процессоре работать), и подставляет свой контекст. Мы получаем ответ, просыпаемся, продолжаем движение - складывая наши данные уже в другую базу.

Классический пример ахинеи. Я такую чушь ещё в фортране видал, и в си видал... В Борланде в одной интересной программе пара файлов передавалась в виде имён и рукояток, по иерархии вызовов; иногда, имея имя файла, мы открывали файл снова и передавали новую рукоятку; иногда имена складывалиь в глобальную переменную "имя открытого файла"; таких переменных было несколько - большая программа-то, все хотят а) кешировать, б) делиться знаниями.

Ну и теперь, по какой причине я так долго трахался с этой фигнёй? А отвык на самом деле.

Ну всё, щас я им всё поперелопачу. И логов присандалю, и ООП повпендюриваю, инкапсуляция, адхок полиморфизм, народность.

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

Причём, в роли таких "кеширующих менеджеров" вполне может выступать и коллектив коллег (брр, это я Гугл вспоминаю, где мне не давали в джаваскрипте замыкания писать, табулировать списки параметров - аски арт запрещён, а также у них не было нигде места на серверах под 21к моего скрипта).
juan_gandhi: (Default)
Как я понял, Нетребко просто феноменальная дура (петь мозги не нужны), но Башмет с Хазановым да Африка с Боярским - это всё, конечно, бляди. Хазанов, собственно, так и сказал, совершенно откровенно.

"Вспомнил сейчас, как сказала одна старая еврейка во время ужина в Америке: "Проституция - это уникальный бизнес, второго такого нет: человек продает то, что у него есть, и после продажи это у него остается". Мы не можем упрекнуть женщину: "Что же ты не идешь в проститутки - выгоднее же?!" Она резонно ответит: "Ну не могу я". "

Because we can.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

August 2025

S M T W T F S
      12
3456789
10 11 12 13141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 18th, 2025 08:14 pm
Powered by Dreamwidth Studios