Библиотеки сторонних разработчиков
ClickHouse использует библиотеки сторонних разработчиков для различных целей, например, для подключения к другим базам данных, для декодирования/кодирования данных при загрузке/сохранении на/с диск или для реализации определённых специализированных SQL-функций. Чтобы быть независимым от доступных библиотек в целевой системе, каждая библиотека стороннего разработчика импортируется как подмодуль Git в дерево исходного кода ClickHouse и компилируется и связывается с ClickHouse. Список библиотек сторонних разработчиков и их лицензий можно получить с помощью следующего запроса:
Обратите внимание, что указанные библиотеки находятся в директории contrib/
репозитория ClickHouse. В зависимости от параметров сборки некоторые библиотеки могут не быть скомпилированы, и, как следствие, их функциональность может быть недоступна во время выполнения.
Добавление и поддержка библиотек сторонних разработчиков
Каждая библиотека стороннего разработчика должна находиться в отдельной директории в contrib/
директории репозитория ClickHouse. Избегайте размещения копий внешнего кода в директории библиотеки. Вместо этого создайте подмодуль Git, чтобы подтянуть сторонний код из внешнего репозитория.
Все подмодули, используемые ClickHouse, перечислены в файле .gitmodule
:
- Если библиотеку можно использовать как есть (по умолчанию), вы можете напрямую ссылаться на upstream-репозиторий.
- Если библиотеку необходимо исправлять, создайте форк upstream-репозитория в организации ClickHouse на GitHub.
В последнем случае мы стремимся максимально изолировать пользовательские патчи от коммитов upstream. Для этого создайте ветку с префиксом ClickHouse/
от ветки или тега, который вы хотите интегрировать, например, ClickHouse/2024_2
(для ветки 2024_2
) или ClickHouse/release/vX.Y.Z
(для тега release/vX.Y.Z
). Избегайте следования веткам разработки upstream master
/main
/dev
(т.е. ветки с префиксами ClickHouse/master
/ClickHouse/main
/ClickHouse/dev
в репозитории форка). Такие ветки являются подвижными целями, что усложняет правильную версионность. "Ветки с префиксом" гарантируют, что пуллы из upstream-репозитория в форк не затронут пользовательские ветки ClickHouse/
. Подмодули в contrib/
должны отслеживать только ветки с префиксом ClickHouse/
форкнутых сторонних репозиториев.
Патчи применяются только к веткам ClickHouse/
внешних библиотек.
Существует два способа сделать это:
- если вы хотите сделать новое исправление против ветки с префиксом
ClickHouse/
в форкнутом репозитории, например, исправление санитайзера. В этом случае отправьте исправление как ветку с префиксомClickHouse/
, например,ClickHouse/fix-sanitizer-disaster
. Затем создайте PR из новой ветки к пользовательской отслеживаемой ветке, например,ClickHouse/2024_2 <-- ClickHouse/fix-sanitizer-disaster
и объедините PR. - если вы обновляете подмодуль и вам нужно повторно применить ранее сделанные патчи. В этом случае воссоздание старых PR-ов будет избыточным. Вместо этого просто извлеките старые коммиты в новую ветку
ClickHouse/
(соответствующую новой версии). Не стесняйтесь объединять коммиты PR-ов, которые имели несколько коммитов. В идеальном случае мы уже внесли пользовательские патчи обратно в upstream и можем пропустить патчи в новой версии.
После обновления подмодуля обновите ссылку на подмодуль в ClickHouse, чтобы указать на новый хэш в форке.
Создавайте патчи для библиотек сторонних разработчиков, учитывая официальный репозиторий, и рассматривайте возможность внесения патча обратно в upstream-репозиторий. Это гарантирует, что другие также смогут воспользоваться патчем, и это не станет бременем для команды ClickHouse.