vitus_wagner: My photo 2005 (Default)
Ухитрился сегодня собрать plv8 для AltLinux 8.
Сейчас, пока пишу этот пост собирается для SLES 12.

Основной прикол в том, что plv8 почему-то не устраивает та libstdc++ которая есть в дистрибутивах, им clang-овскую libc++ подавай (подозреваю, что в основном по лицензионным соображениям). Сама-то v8 вообще ничего от объемлющей системы не хочет, все качает с гугля, включая clang. (поэтому хрен ее сертифицируешь)

А вот libc++ нужно уже собственно постгресовому расширению.

Ну в общем, src rpm из EPEL с помощью лома и какой-то матери удалось запинать и под Alt, и под sles 12. В 15-то SLES все как у людей - и даже libc++ готовая. Прям как в настоящих, deb-based дистрибутивах.

В порядке особого изврата - для того чтобы собрать libc++ под alt, пришлось поставить kdelibs4-devel. Потому что MacroEnsureOutOfSourceBuild.cmake почему-то в каком-то более подходящем месте не нашелся.
vitus_wagner: My photo 2005 (Default)
Вот тут недавно я доказывал [livejournal.com profile] wim_winter что диски нынче стали большими и забивать их стало не так просто. И Асы (А может йотуны, а может гремлины, хрен ихний хильдуфолк разберешь) покарали меня за эти неосторожные слова.

Всего лишь годичные логи билдфарма забили нафиг все свободное место на 2Тб разделе (нет, кроме логов там еще дохренадцать контейнеров, но 700 Гб логов за год это все-таки многовато). И ровно таки в субботу билдфармовский сервер встал, и результаты билдов пошли прямохонько в /dev/null.

Пришлось чиститься. А почиститься когда хочется сохранить хотя бы логи за две последние недели, как вы понимаете не слишком просто.

Попутно узнал что на один билд в среднем приходится 34 стадии, на каждую из которых в базе сохраняется лог.
А всего разных стадий бывает 68. При этом до конца за последнюю неделю доходит в среднем 2/3 билдов. (но ни одного билда, у которого бы было более 62 стадий в базе не обнаружено).
vitus_wagner: My photo 2005 (Default)
Что-то мне текущая моя работа напоминает управление даже не цепеллином или супертанкером, а солнечным парусником - выполнил маневр и часов 6-8 ждешь результата. То ли ждешь, пока 30 постгресов в дженкинсе соберутся, то ли - пока regression test suite под валгриндом пройдет.
vitus_wagner: My photo 2005 (Default)
Приятно бывает обнаружить что баг из трех поддерживаемых версий есть только в одной.
В 9.6 его еще нет, а в 11 - уже нет
vitus_wagner: My photo 2005 (Default)
Писал я тут, что pg_hint_plan чисто пресейловый модуль, и накаркал.

Нашелся таки клиент, который его в production использует. Правда у этого клиента постгрес не наш, а от PGDG.

Но за поддержку-то он платит нам. А пакет расширения пересобрать, добавив патчик, недолго.

Вообще у клиентов, конечно, такие странные странности бывают. Вот есть клиент, который внутри автономной транзакции зачем-то пытается с большими объектами работать.
vitus_wagner: My photo 2005 (Default)
Сегодня мы выяснили что у нас в постгресе есть пресейлз-онли модули. В смысле, такие которые потенциальные заказчики спрашивают регулярно, а потом никто не использует.

Таким модулем, например, является pg_hint_plan.

Любой, кто задумывается о миграции сложного приложения с Oracle на Postgres обязательно задает вопрос "А хинты у вас есть?" Ага, говорим мы, вот, отдельным модулем. Потому что знаем, что никому, кто таки доходит до реальной миграции, они оказываются не нужны. В нормальной базе планировщик сам разбирается, без хинтов.
vitus_wagner: My photo 2005 (Default)
- Давайте не будем в версии 9.6 ставить scram-аутентификацию по умолчанию
- Почему?
- Мертвые скраму не имут.
vitus_wagner: My photo 2005 (Default)
Наконец-то, примерно через месяц после того, как апстрим выкатил 11-ю версию, мы выпустили
PostgresPro Standard 11. Уже, правда, на базе 11.1.

Аврал по выпуску этой версии для меня началася тогда, когда я пришел из отпуска (так как тогда мы думали что апстрим разродится в первых числах октября, а не 18). Но оказалось, что мы не успели не только к началу октября, но и к 18. И только вот сейчас, наконец справились с переносом всех дополнительных фич PostgresPro Standard на новую версию.
vitus_wagner: My photo 2005 (Default)
Ненавижу укушенных Гослингом программистов, которые в проекте из десятка файлов создают дерево директорий трех уровней вложенности.

Bit rot

Oct. 16th, 2018 11:19 pm
vitus_wagner: My photo 2005 (Default)
Такое впечатление что Postgres с поддержкой gssapi под 64-битную винду не собирал никто и никогда.
Вот захотел клиент странного - постгреса под виндой с авторизацией через Active Directory.
Ну я честно поставил в виртуалку MIT Kerberos, как написано в документации. Свежий, 4.2.1, из msi на сайте, 64-битный.

Прописал в config.pl то место, куда оно поставилось,

Запускаю сборку, смотрю оно gssapi/gssapi.h не наоходит. Заглядываю в проектный файл, а оно там совсем не то ищет. Смотрю в Solution.pm, а тамне $self->{options}->{gss}."/include", а почему-то $self->{options}->{gss} . '\inc\krb5'. А дальше вообще песня -

        $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\krb5_32.lib');
        $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\comerr32.lib');
        $proj->AddLibrary($self->{options}->{gss} . '\lib\i386\gssapi32.lib');


совершенно не глядя на битность собираемого постгреса.
Вот буквально половиной экрана ниже, там идет обработка ICU, так там большой if ($self->{platform} eq "Win32") и если не Win32, а x64, Так совсем другие библиотеки цепляются.

Врпочем для нынешних версий MIT Kerberos для 32-бит и 64-бит разные инсталляторы и разные префиквы.

Кстати. на аналогичные грабли мы некоторое время назад наступали то ли с AIX то ли c HP/UX - обнаружили что последний раз постгрес под этой операционкой тестировали, когда машины были большими, а процессоры в них - 32-битными.
vitus_wagner: My photo 2005 (Default)
коллеги, а кто посоветует дешевую машинку на 64-битном arm,

А то у меня сейчас единственным arm64 в билдферме работает Raspberry PI 3 с Debian buster.
Так вчера ей пришлось таймаута на выполнение всего задания увеличить с 6 часов до 8.
Поскольку за 6 часов не укладывается.

В то же время при обсуждении проблем переносимости в pgsql-hackers народ тут же начинает реагировать "а у меня на arm64 это не воспроизводится". На телефонах они что ли компилируют?
(хотя у меня на телефоне 26.0 BogoMIPS, а на Raspberry Pi 3 - 38.4)

А может что-нибудь с SATA есть, чтобы туда вместо тормозных microsd еще и ноутбучный винт поставить?
vitus_wagner: My photo 2005 (Default)
Тут один коллега возмутился, почему это мол, pgbuildfarm крайне отрицательно относится к git push --force.

В смысле, если кто-то запушит в конторский gitlab результаты rebase, reset или commit --amend
(при условии, конечно, что те коммиты, которые модифицируются, там уже были)

В смысле ломается до такой степени что приходися руками лазить по всем 40 узлам билдфарма и приводить локальные репозитории в порядок.

И попытался объяснить мне, какая классная штука rebase и как она нужна.

Я, будучи в середине веселого процесса, описанного в предыщуем абзаце послал его к Эндрю Дунстану, апстрим автору pgbuildfarm. Человек не поленился, и написал.

Тот, как и ожидалось, ответил:


We don't do rebase + forced push in
Postgres - it's something of a nono in public repositories according to
my understanding.


То есть тоже никаких аргументов не привел. "nono" и все тут.

Вот какие бы аргументы привести в пользу того, что редактировать историю в репозитории с которым работают несколько десятков человек, не считая роботов типа того же билдфарма, это действительно "nono", и если кто хочет сделать rebase, чтобы получить красивый результат git format-patch, должен это делать в своей локальной ветке, у которой никакого remote не прописано?

P.S. Любимый некоторыми моими комментаторами, да и мной тоже fossil, вообще не поддерживает аналогов rebase, reset и --amend. Ибо нефиг (что есть адекватный перевод дунстановского "nono" на русскиЙ).

Upd. Федя Сигаев заметил, что ежели кто злоупотреблял ребейзами и ресетами, того покарает git bisect, который не найдет того коммита, в котором появился баг.
vitus_wagner: My photo 2005 (Default)
Опять у меня проблемы с бесконечностью в языке C. (предыдущие серии вот и вот. Пора уже тэг заводить)

На этот раз с функцией isinf(), вернее __builtin_isinf() в clang

Народ долго разбирался почему и как и доразбирался до того, что


#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{
    double d1 = (argc ? 1e180 : 0);
    double d2 = (argv ? 1e200 : 0);
    int r2 = __builtin_isinf(d1 * d2);
    int r1 = isinf(d1 * d2);
    printf("r1 = %d, r2 = %d\n", r1, r2);
    return 0;
}


Note that swapping the r1 and r2 lines makes the problem disappear (!).

on amd64, clang 3.9.1:

cc -O2 -m32 flttst.c && ./a.out
r1 = 1, r2 = 0

cc -O2 flttst.c && ./a.out
r1 = 1, r2 = 1


Выяснилось что 32-битная x86 архитектура, использующая 80-битные регистры сопроцессора работает с бо́льшим диапзоном вещественных чисел, чем 64-битная (использующая 64битные floating point registers)


Там в треде по ссылке еще много дивного узнать можно про современные компиляторы.
vitus_wagner: My photo 2005 (Default)
Тут Олег обнаружил, что наша фирма это просто таки рассадник гендерного равенства.
Если взять git log постгреса, то в нем нам удалось найти шесть контрибьюторов женского пола.
(ну может есть еще среди японцев и китайцев, у которых мы гендер по именам определять не умеем, а в гитхабовский профайл они фотографии не залили по каким-то причинам).
Среди них четыре сотрудницы Postgres Professional, и двое из Индии, где их честно поделили между собой EnterpriseDB и 2nd Quadrant.

Upd Третью девушку из Бангалора нашел. Тоже 2nd Quadrant.
vitus_wagner: My photo 2005 (Default)
В первый раз вижу, что за два дня до выпуска, но уже после простановки тэга не последняя, а пред-пред последняя (9.5) версия постгреса вообще не собиралась Visual Studio. Ну то есть Ной Миш явно лажанулся и закоммитил то, чего коммитить не хотел.

Забавно, что ветки 9.6 и 10 он не сломал.А 9.3 и 9.4 я не собираю (но он их тоже сломал).

И на апстрим бывает проруха. Забавно, впрочем, наблюдать там те же эффекты что и у нас в контроре "А-а-а, в эту перловую помойку мы не полезем", "нет, сам я собирать под винды не буду, подожду билдфарма".

Ну в общем +1 упоминание меня в апстримовском ченджлоге.
vitus_wagner: My photo 2005 (Default)
Интересно, если devops столкнуться с vops они взаимно проаннигилируют?
vitus_wagner: My photo 2005 (Default)
Вот невзлюбил меня за что-то сишный макрос INFINITY. Всего-то три месяца назад боролись c использованием этого слова как ключевого в SQL.

Так теперь новая затея.

После очередного вливания патчей из апстрима стали валиться регрешн тесты на спарке (64-битная сборка).
Копались, копались и докопались до того, что причина в __int128_t, который в 5-м gcc вроде бы есть, но как-то не очень работает (спасибо хоть в кору бэкэнд не роняет при алигменте 8).

Первое, что посоветовали в hackers, это "А вы gcc обновите, там это недавно фиксиил".

Ну накатил я на этот спарк gcc 5.5.0 с opencsw.org (до этого там была 5.2.0 оттуда же). Запускаю сборку, а она ба-бах, и падает. Оказывается макроса INFINITY, NAN и HUGE_VAL определены через такие builtins, которых в этом GCC и не было. Ну может в 3.4.3 с Software Companion они и были, но с тех пор давно сплыли, а gcc почему-то в своих include-fixed это не фиксит. Хотя math.h туда копирует и как-то патчит.

Пришлось руками туда дописывать определения этих макросов потыренные с ближайшего Linux-а с GCC той же major version. (это оказалась убунта 14.04).

Что самое обидное, 128 целым это не помогло. Придется теперь писать тест, который определяет это, и пропихивать его в configure постгреса.

Кстати Том Лейн, который прислал свой прототип такого теста, почему-то уверен, что 2*2=5
97656255 << 12 = 400000000000. Но тест у него не работает (в смысле говорит что All OK, когда не OK) не поэтому.
vitus_wagner: My photo 2005 (Default)
Выяснил сегодня, что если постгресу (а, вероятно, и другому сложному проекту, конфигурируемомую через автоконф) нужно указать альтернативную системную директорию инклюдов, не надо это делать как

CFLAGS=-I/opt/crossroot/include ./configure


А надо как

CFLAGS="-idirafter /opt/crossroot/include" ./configure


Потому что если в проекте есть своя иерархия инклюдов, она попадет в командную строку компилятора ПОСЛЕ этого CFLAGS. А нам надо чтобы наши инклюды имели приоритет над системными. Иначе могут быть странные и необъяснимые глюки. Особенно если в /opt/crossroots/include вдруг обнаружится какой-нибудь pg_config.h или decimal.h.
vitus_wagner: My photo 2005 (Default)
Нет, вредно читать рабочую почту до завтрака. А то так и будешь за едой думать не о еде, а о том, почему этот чортов кросскомпилятор подхватывает не тот инклюд который надо.

А с завтрака поднимаюсь я на лифте, и слушаю как девушки из "Мая" обсуждают проблему как до 1 февраля кому-то там поставить 56 тонн чая. И как-то сразу подумалось что все эти наши спинлоки и макросы это такая фигня по сравнению с весомыми, грубыми, зримыми контейнерами с чаем.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

April 2019

S M T W T F S
  1 2 3 456
789 10 11 12 13
14 15 16 17181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 19th, 2019 12:59 pm
Powered by Dreamwidth Studios