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