Часто встречающиеся проблемы и пути их устранения#

Какая предварительная подготовка внешних сервисов требуется для запуска SSDP#

В качестве внешних сервисных зависимостей, которые должны быть сконфигурированы до запуска SSDP, выступают:

  • брокер сообщений

  • БД

  • IAM

Предварительная настройка брокера сообщений, в случае использования указанной в системных требованиях версии, не требуется, поскольку необходимые топики будут созданы автоматически при запуске соответствующих компонентов.

Процедуры по предварительной конфигурации БД и IAM приведены в подразделах «Инициализация БД» и «Инициализация IAM» раздела Установка.

Сетевая недоступность удаленных ресурсов/сервисов при обращении по полному доменному имени#

В случае ошибок настройки DNS-ресурс, например, брокер Kafka, может стать недоступен.

Предлагается 2 способа решения подобной проблемы:

  • Использовать IP-адрес вместо доменного имени в конфигурации компонента. При доступе к некоторым ресурсам используются цифровые сертификаты, поэтому когда IP-адрес не указан в качестве альтернативного имени доступа, при подключении могут возникнуть проблемы, связанные с некорректностью содержимого сертификата.

  • Внести запись в файл /etc/hosts, который содержит базу доменных имен и используется при их трансляции в сетевые адреса узлов. Запрос к этому файлу имеет приоритет перед обращением к DNS-серверам.

Ошибки при использовании токена доступа/пароля, содержащего символ $#

При разрешении конфигурационных свойств, содержащих символ доллара, они воспринимаются как часть Spring Expression Language (SpEL). Например, следующее свойство будет разрешено в 123abc, потому что в контексте приложения нет переменной с именем 321efg.

export SSD_SA_SONAR_PASSWORD="123abc$321efg"

В результате запросы к удаленному ресурсу будут возвращать ошибки, связанные с авторизацией.

Такие вхождения символов необходимо указывать в виде SpEL-выражения $ -> #{'$'}.

export SSD_SA_SONAR_PASSWORD="123abc#{'$'}321efg"

Ошибка взаимодействия с БД, работающей вместе с pgBouncer#

При обращении к БД, работающей в кластерном режиме, запуск компонента ssd-transaction-manager может завершаться с ошибкой:

Caused by: org.postgresql.util.PSQLException: ERROR: prepared statement "S_1" already exists

Это происходит в связи с конфигурацией использования PreparedStatement на стороне сервера СУБД. Если нет возможности изменить настройки менеджера пула соединений, рекомендовано передавать дополнительные параметры подключения:

  • targetServerType=master - целевой тип узлов БД, к которым разрешено выполнять подключение (требуется master, т.к. компоненты выполняют и операции записи, и операции чтения);

  • prepareThreshold=0 - использование PreparedStatement на стороне СУБД (лимит количества запросов, при превышении которого происходит переключение в режим их предкомпиляции на стороне сервера. Использование значения 0 выключает переключение, все PreparedStatement формируются на стороне клиента).

В имени базы данных SSD_DB_NAME требуется указать суффикс ?targetServerType=master&prepareThreshold=0.

Ошибка получения объекта синхронизации при запуске ssd-transaction-manager#

При обращении к БД, работающей в кластерном режиме, запуск компонента ssd-transaction-manager может завершаться с ошибкой. Компонент ssd-transaction-manager использует Liquibase для версионирования миграций. При этом гарантируется, что только один экземпляр сервиса будет производить такую синхронизацию в один момент времени. Это достигается за счет размещения записи в сервисной таблице databasechangeloglock в схеме, которая была выбрана целевой для Liquibase при установке.

Если при запуске экземпляра ssd-transaction-manager произошла ошибка после захвата синхронизации и подключение прервалось, при очередном запуске в его логах будет присутствовать следующее сообщение: liquibase.exception.LockException: Could not acquire change log lock.

Для продолжения его запуска требуется перейти в таблицу databasechangeloglock и убедиться, что существующие там записи относятся к сервисам, которые уже неактивны. Если это так, такие записи можно удалить.

Если запись относится к еще активном сервису, то нужно дождаться окончания его работы.

Ошибка «Could not resolve placeholder» в логах запуска компонента#

Такая ошибка возникает, когда конфигурация компонента, полученная от ssd-cloud-config, не содержит требуемого свойства. Для устранения ошибки убедитесь в следующем:

  1. Конфигурация целевого компонента, содержащаяся в ConfigMap ssd-cloud-config-component-configs действительно содержит такое значение.

  2. Компонент ssd-cloud-config запущен.