Сторонние библиотеки
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.