Как стать автором
Обновить

Комментарии 16

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Как теперь с этим знанием жить, вот в чем вопрос?
Век живи — век учись :)
Спасибо.
Вообще, это позор для Гуавы — не прогонять код перед релизом через статические анализаторы.

Наверняка, FindBugs нашел бы эту ошибку влёт.

Или я не прав? Не найдет? Или умрет в False Positives?
Проверил — не находит. Вот, вызов Thread.start() из статического инициализатора FindBugs считает ошибкой, а просто создание дочернего объекта — нет.

Все ошибаются, ничего позорного в этом нет. Коллегам из Google, на самом деле, респект, что отнеслись с пониманием и оперативно исправили.
да, наверное жестковато я.

Знаешь, это даже не конкретно к гуглу претензия, а к… к состоянию дел, что ли. Миллионы людей используют гуаву и другие библиотеки — а там такое. Иногда я сижу и не понимаю, как все это вообще не разваливается к чертовой матери…
Поймать этот баг в продакшне ещё постараться надо. Опять же, нам «повезло» лишь благодаря высоким нагрузкам: сервер только поднимается, а на него сразу тысяча одновременных запросов прилетает с участием разных классов: RegularImmutableList, SingletonImmutableList и т.д., и все они начинают конкурентно инициализироваться. Много ли где такое встречается?
С одной стороны, да. Больше ворклоады и все такое. С другой стороны, иногда становится реально страшно. Особенно когда думаешь, сколько там еще не пойманных подобных багов.
Реально страшно за что?
Ну да, бывают баги в любом коде, в любых либах. Мы ж на этом не самолеты запускаем с реакторами, а лишь в интернете чатики, да картинки показываем.
ну много финансового софта написано, вдруг что нибудь подобное вылезет во время тока как кто нибудь все свои сбережения переводит и сколько потом банк будет расследовать сбой этой транзакции и возвращать бабки )
НЛО прилетело и опубликовало эту надпись здесь
Так я писал: сразу после запуска сервера, когда он входит в кластер, на него прилетает несколько тысяч запросов, содержащих разные дочерние классы ImmutableList. Во время десериализации запросов происходит инициализация классов (поскольку до этого они не использовались). Дедлок происходит, когда несколько разных классов из одной иерархии начинают одновременно инициализироваться. Одного обращения к ImmutableList недостаточно.
Загляни в исходники netbeans profiler и jvisualvm. После этого вообще плакать хочется)
Таки я пропустил этот пост. Очень круто, спасибо! Стоит добавить диагностику в FindBugs на вызов parallel из clinit? :-)
Да, возможно. Только там куча вариантов, все запаришься перечислять: Stream.parallel(), Collection.parallelStream(), Arrays.parallelSort(), Arrays.parallelSetAll() и т.д.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий