RabotaRu / DocHub

Управление архитектурой как кодом
https://dochub.info/
Apache License 2.0
272 stars 66 forks source link

[Bug] StackOverflowError #448

Open strana-evgenii-zhukov opened 11 months ago

strana-evgenii-zhukov commented 11 months ago

Вид дистрибуции: plugin Версия: 3.7.0 IDE: WebStorm 2023.2.5 Build: #WS-232.10227.9, built on November 11, 2023


stacktrace.txt ⬇️

java.lang.StackOverflowError
    at com.intellij.concurrency.ConcurrentHashMap.hash(ConcurrentHashMap.java:6182)
    at com.intellij.concurrency.ConcurrentHashMap.get(ConcurrentHashMap.java:935)
    at com.intellij.util.indexing.impl.storage.TransientChangesIndexStorage.read(TransientChangesIndexStorage.java:191)
    at com.intellij.util.indexing.impl.MapReduceIndex.getData(MapReduceIndex.java:236)
    at com.intellij.util.indexing.storage.MapReduceIndexBase.getNullableIndexedData(MapReduceIndexBase.java:78)
    at com.intellij.util.indexing.impl.storage.TransientFileContentIndex.getNullableIndexedData(TransientFileContentIndex.java:97)
    at com.intellij.util.indexing.storage.MapReduceIndexBase.lambda$getIndexedFileData$1(MapReduceIndexBase.java:60)
    at com.intellij.util.ConcurrencyUtil.withLock(ConcurrencyUtil.java:246)
    at com.intellij.util.indexing.storage.MapReduceIndexBase.getIndexedFileData(MapReduceIndexBase.java:56)
    at com.intellij.indexing.composite.CompositeInvertedIndexBase.getIndexedFileData(CompositeInvertedIndexBase.java:151)
    at com.intellij.util.indexing.FileBasedIndexEx.lambda$getFileData$2(FileBasedIndexEx.java:216)
    at com.intellij.util.indexing.FileBasedIndexEx.lambda$processExceptions$6(FileBasedIndexEx.java:324)
    at com.intellij.util.ConcurrencyUtil.withLock(ConcurrencyUtil.java:246)
    at com.intellij.util.indexing.FileBasedIndexEx.processExceptions(FileBasedIndexEx.java:324)
    at com.intellij.util.indexing.FileBasedIndexEx.getFileData(FileBasedIndexEx.java:209)
    at com.intellij.util.indexing.FileBasedIndexImpl.getFileData(FileBasedIndexImpl.java:1111)
    at org.dochub.idea.arch.indexing.CacheBuilder.parseYamlManifest(CacheBuilder.java:84)
    at org.dochub.idea.arch.indexing.CacheBuilder.parseYamlManifest(CacheBuilder.java:95)
    at org.dochub.idea.arch.indexing.CacheBuilder.parseYamlManifest(CacheBuilder.java:95)
    // ... тут строк 500 рекурсивных вызовов
    at org.dochub.idea.arch.indexing.CacheBuilder.parseYamlManifest(CacheBuilder.java:95)
    at org.dochub.idea.arch.indexing.CacheBuilder.parseYamlManifest(CacheBuilder.java:95)

Также, плагин конфликтует с bundled-плагинами - например, с коробочным OpenAPI-плагином

strana-evgenii-zhukov commented 11 months ago

Доп. инфо: после возникновения ошибки IDE наглухо виснет

rpiontik commented 11 months ago

С самой ошибкой будем разбираться.

Проверьте, что yaml файлы корректны. Вероятнее всего проблема в некорректной структуре yaml.

strana-evgenii-zhukov commented 11 months ago

С самой ошибкой будем разбираться.

Проверьте, что yaml файлы корректны. Вероятнее всего проблема в некорректной структуре yaml.

Синтаксис провалидировали, все ок. В проблем-чекере докхаба нет ни одной, связанной с тем манифестом, при редактировании которого происходит ошибка.

Есть предположение: это происходит это из-за попыток докхаба распарсить себе директивы в yaml-файлах, не являющихся манифестами (например, у нас достаточное количество openapi/asyncapi), чего он по-идее делать не должен.

Есть предложение/фичареквест - добавить в файлы манифестов признак того, что это манифесты (по аналогии с докеркомпоузовым version - какой-нибудь dochub_version), и парсить только ямлы с этим признаком. Сделать тестовый билд с отключаемой валидацией признака манифеста, и с ним протестить, будет ли повторяться ошибка. Если не будет - причина найдена, решение готово, всё работает и все радуются ☺️

strana-evgenii-zhukov commented 11 months ago

Проблема обнаружена - циклические импорты манифестов. Описания API ни при чём. @rpiontik думаю, имеет смысл добавить ограничение/валидацию на циклические импорты, и при обнаружении подобных - не подгружать их в озеро, отплёвывая соответствующую ошибку