Вот проблема: когда Vault временно недоступен, класс KeyValueDelegate устанавливает пустая строка "" в качестве пути монтирования во внутреннем кеше mountInfo. В результате создается исключение:
java.lang.IllegalArgumentException: Путь не должен быть пустым.
Даже когда Vault снова станет доступным, кешированный пустой путь в mountInfo используется повторно, и служба не может подключиться к Vault до тех пор, пока не будет перезапущена. Это приводит к постоянному состоянию сбоя, вынуждающему нас перезапускать модули во время сбоев проверки работоспособности, что рискованно и может нарушить активные запросы во время корректного завершения работы.
Я пробовал следующие подходы:
- Переопределить getMountInfo() — невозможно, поскольку много финальных/частных/default.
- Изменения конфигурации — я мог бы не нашел документированного способа предотвратить кеширование недопустимых путей или очистите кеш mountInfo при ошибке.
Кто-нибудь сталкивался с подобной проблемой или нашел решение/обходной путь для нее? такое поведение кэширования в KeyValueDelegate?
Есть ли способ настроить пути к хранилищу при запуске, чтобы предварительно заполнить кеш mountInfo правильными значениями?
Есть ли какие-либо обновления в более поздних версиях Spring-vault-core (например, 3.1.2 или более поздней версии), которые решают эту проблему?
Дополнительный контекст:
Текущее обходное решение: перезапустить модули при сбое проверки работоспособности (включая доступность Vault). проверок).
Среда: Spring Boot 3.2.6, Spring Vault 3.1.1, работающая в Kubernetes.
Любая помощь или информация будут очень полезны. оценил!
Подробнее здесь: https://stackoverflow.com/questions/792 ... hing-issue
Мобильная версия