Перейти к основному содержимому
Перейти к основному содержимому

Библиотеки сторонних разработчиков

ClickHouse использует библиотеки сторонних разработчиков для разных целей, например, для подключения к другим базам данных, декодирования/кодирования данных при загрузке/сохранении на/с диска, или для реализации определенных специализированных SQL функций. Чтобы быть независимыми от доступных библиотек в целевой системе, каждая библиотека сторонних разработчиков импортируется как подмодуль Git в дерево исходных кодов ClickHouse и компилируется и связывается с ClickHouse. Список библиотек сторонних разработчиков и их лицензий можно получить с помощью следующего запроса:

SELECT library_name, license_type, license_path FROM system.licenses ORDER BY library_name COLLATE 'en';

Обратите внимание, что указанные библиотеки находятся в директории 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.