|
Это как?
|
|||
---|---|---|---|
#18+
Периодически падает Xpath.evaluate если звать параллельно. На винде где то 1%, на линуксе 90%. Нашел баг: https://bugs.openjdk.java.net/browse/JDK-8179941 Решил раскопать, и вот... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 20:01 |
|
Это как?
|
|||
---|---|---|---|
#18+
no56892, fParseInProgress - статическая? если статическая, то парсер однопоточный. Иначе непонятно, как может падать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 20:47 |
|
Это как?
|
|||
---|---|---|---|
#18+
Герой дня, protected boolean fParseInProgress = false; Тогда и вопроса то не было. Однопоточный? То есть во всем приложении вообще любое выполнение Xpath надо в синхронайзд помещать? Там по ссылке вполне резонный пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 20:53 |
|
Это как?
|
|||
---|---|---|---|
#18+
no56892, Вот ты чудак. Да 99% алгоритмов пр своей природе - одно поточные. Если ты хочешь долбить экземпляр алгоритма из двух и более потоков - создай из фабрики 2 и более экземпляра нужного алгоритма. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 21:16 |
|
Это как?
|
|||
---|---|---|---|
#18+
mayton, Не понял мысли, что за алгоритмы (а) и где они долбятся (б) из нескольких потоков? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 21:18 |
|
Это как?
|
|||
---|---|---|---|
#18+
no56892, Такой баг даже есть https://issues.apache.org/jira/browse/XALANJ-2463?attachmentOrder=desc, но похоже на него тупо забили, 10 лет прошло. Проблема оказалась в классе XPathExpressionImpl, там есть 3 статик ансейф поля: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На скриншоте в первом посте, собственно и парсится этим db, одним единственным, то есть флаг был тру, зашел первый поток, затем второй закончил парсить поставил флаг фалс, и тут я поймал в дебаге. То есть это делает невозможным какое-то вменяемое использование "штатного" Xpath в принципе. Единственно, что заработает ок это: Код: java 1. 2. 3.
И это вообще для каждого, даже не связанного между собой выражения ВО ВСЕМ ПРИЛОЖЕНИИ (в пределах класслоудера правда, но в большинстве случаев он и есть один на все приложение), и никакой строчки из синхронайзд отсюда нельзя выкинуть, ни фабрику закешировать, не уж тем более скомпилированное выражение xpath, ничего! Здорово, правда? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2019, 00:38 |
|
Это как?
|
|||
---|---|---|---|
#18+
no56892, Нашел там еще метод есть один, может авторы посчитали что компилировать выражение это дешево? Надо проверить будет, вообщем вот так тоже прокатит: Код: java 1. 2. 3. 4. 5.
И может даже можно newXPath вынести, надо будет детально посмотреть что он там передает при создании. Но все равно я оч сильно удивлен, что в джаве любое скопилированное икспас выражение нужно вставлять в глобал лок. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2019, 01:07 |
|
Это как?
|
|||
---|---|---|---|
#18+
Хм... Мдя. Интересно узнать следуюшую инфу. Баг создан на восьмерку и девятку. Сейчас транковая HEAD версия это 11. Воспроизводится ли дефект в ней? По каментам. Какой-то особой активности по ней нету. Приоритет выставили в "P4". (Что за хрень? Непоня...) Fix versions - to be discussed. Похоже никого особо не парит. Сама библиотечка com.sun.org.apache.xerces где лежат эти исходники производит хреновенькое впречатление. По коду Sonar ругается много. Есть предположение что fParseInProgress это след некой нативной оптимизации где что-то лежало не в Java а в сях и потом так и осталось. По исходникам на OpenJDK по ветке Xerces никаких за год не было изменений чтоб фиксили именно механизмы XPath. Если судить по текстовым каментам Git. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2019, 02:27 |
|
Это как?
|
|||
---|---|---|---|
#18+
можно попробовать сделать threadlocal и для каждого потока отдельный экземпляр (через classloader сделать "независимые") парсера. Грязно конешно но как воркараунд если уперлись во чтото, то можно, ну или воспользоваться другим парсером ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 11:05 |
|
|
start [/forum/topic.php?fid=59&msg=39768580&tid=2121504]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 467ms |
0 / 0 |