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