powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Мистика
26 сообщений из 26, показаны все 2 страниц
Мистика
    #39314051
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Редко такое бывает. И каждый раз когда разбираешься - понимаешь что сам виноват. Но вот сегодян опять.

Итак есть небольшой проект Spring, Hibernate, HSQL.
Вроде работает на нескольких машинах. Win 7, Win 10.
Сегодня запускаю на новой девелоперской машине Win 10 и выгребаю совершенно дикую проблему в HSQL. Падает валидация Lock файла.

Суть в том что HSQL пишет в .lck файл 16 байт. 8 байт префикс + 8 байт System.currentTimeMillis(). Как результат на выходе файл в 22 байта!!!
Вот код записи. Объявление и обработку исключений опустил.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            
    protected static final byte[] MAGIC = {
        0x48, 0x53, 0x51, 0x4c, 0x4c, 0x4f, 0x43, 0x4b
    };

    protected volatile RandomAccessFile raf;


writeMagic();
writeHeartbeat();

    private final void writeMagic()
            raf.seek(0);
            raf.write(MAGIC);
    }

    private final void writeHeartbeat()
            raf.seek(MAGIC.length);
            raf.writeLong(System.currentTimeMillis());
    }



Даже если вдруг там какая-то конкуренция, то каким образом оно за 16 байт вылазит??

Код: java
1.
2.
0000000000: 48 53 51 4C 4C 4F 43 4B | 00 00 01 55 EF BF BD EF  HSQLLOCK  ☺U�››�
0000000010: BF BD 00 EF BF BD       |                          ›› �››
...
Рейтинг: 0 / 0
Мистика
    #39314056
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все. Блин. Я тупой. Там же по одному байту пишется. Вот и при конкуренции больше байт попадает. Осталось понять с какого перепугу спринг два раза HSQL запускает.
...
Рейтинг: 0 / 0
Мистика
    #39314083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот только никаких двух потоков и впомине нет.
...
Рейтинг: 0 / 0
Мистика
    #39314089
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падает из IntelliJ IDEA CE. Из батника работает без проблем. Мнения? Рекомендации?
...
Рейтинг: 0 / 0
Мистика
    #39314104
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПадает из IntelliJ IDEA CE. Из батника работает без проблем. Мнения? Рекомендации?

Запретить создание этого файла и посмотреть кто упадёт.
...
Рейтинг: 0 / 0
Мистика
    #39314126
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

Тогда просто падает инициализация HSQL. Пробовал дебаг. Вижу только 1 main поток.
...
Рейтинг: 0 / 0
Мистика
    #39314136
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Тесты памяти на машине гонял? Вдруг там что-то битое?
...
Рейтинг: 0 / 0
Мистика
    #39314174
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

- При чем тут память? Пишет байты по одному через RandomAccessFile
- Если запускать без IntelliJ IDEA CE, то проблема не повторяется
- Если запустить пошаговую отладку, то отрабатывает без ошибки, что наводит на мысль о конкуренции

Может что-то и идее запускать метод 2 раза (версия 14.1.3)?
...
Рейтинг: 0 / 0
Мистика
    #39314353
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в тестовом коде при параллельном запуске в двух потоках метода writeHeartbeat
проблема с размером файла повторяется.

я-бы залогировал стектрейс запуска этого метода
...
Рейтинг: 0 / 0
Мистика
    #39314357
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey Tomin,

Тогда просто падает инициализация HSQL. Пробовал дебаг. Вижу только 1 main поток.

Хм. Поставить в строке, где падает точку останова.
Разрешить запись.
Прости строку.
Запретить запись.
Найти сделующую строку (где упадёт).
...
Рейтинг: 0 / 0
Мистика
    #39314376
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
Dmitry.в тестовом коде при параллельном запуске в двух потоках метода writeHeartbeat
проблема с размером файла повторяется.
А проблема повторяется точно так же, как у Blazkowicz — размер файла 22 байта, и внутри несколько EF BF BD, подозрительно напоминающих BOM?
Потому что у меня при двух потоках размер файла стабильно равен 23 байта (8 + 8 + 8 - 1, где -1 — перезаписанный первый байт heartbeet из-за повторного seek(8)), а внутри — куски двух timestamp'ов.
...
Рейтинг: 0 / 0
Мистика
    #39314411
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominХм. Поставить в строке, где падает точку останова.
Разрешить запись.
Прости строку.
Запретить запись.
Найти сделующую строку (где упадёт).
Этим и пытаюсь занятся. Только, блин, HSQL из мавена без отладочной инфы. Ну, и в дебаге не повторяется. Нормально приходит 1 writeHeartbeat(). Потом через время еще один, вроде так и должо быть. Падает уже в валидации, она к записи отношения не имеет.
Дампил стэктрейс, вроде, только один приходит одновременно. Дамп имен потока почему-то не отработал.
...
Рейтинг: 0 / 0
Мистика
    #39314414
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vslА проблема повторяется точно так же, как у Blazkowicz — размер файла 22 байта, и внутри несколько EF BF BD, подозрительно напоминающих BOM?
Потому что у меня при двух потоках размер файла стабильно равен 23 байта (8 + 8 + 8 - 1, где -1 — перезаписанный первый байт heartbeet из-за повторного seek(8)), а внутри — куски двух timestamp'ов.

О, а вот это интересная мысль! Я user.language менял. Не помогло. Но у них были какие-то проблемы с кодировками раньше.
...
Рейтинг: 0 / 0
Мистика
    #39314485
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант двойная инициализация контекста спринга ... что влечет порождение второго треда ?!


примерно так :

Если у вас указан protected Class<?>[] getRootConfigClasses() {

то второй должен быть null - protected Class<?>[] getServletConfigClasses() {

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



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};

    }




Все мной описанное верно и для других участков кода...

:( Печально
...
Рейтинг: 0 / 0
Мистика
    #39314488
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

А метод оберните аспектом и посмотрите кто его и откуда вызывает в логе .

главное чтобы аспект первым привязался :)
...
Рейтинг: 0 / 0
Мистика
    #39314803
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что это таймер конкурирует с инициализацией. Странно.

Main поток инитит спринг.
Код: 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.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at org.hsqldb.persist.LockFile.writeHeartbeat(Unknown Source)
	at org.hsqldb.persist.LockFile.tryLock(Unknown Source)
	at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
	at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
	at org.hsqldb.persist.Logger.open(Unknown Source)
	at org.hsqldb.Database.reopen(Unknown Source)
	at org.hsqldb.Database.open(Unknown Source)
	at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
	at org.hsqldb.DatabaseManager.newSession(Unknown Source)
	at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
	at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
	at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
	at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)



И, примерно в это же время, отрабатывает HSQLDB Timer

Код: java
1.
2.
3.
4.
5.
6.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at org.hsqldb.persist.LockFile.writeHeartbeat(Unknown Source)
	at org.hsqldb.persist.LockFile.access$100(Unknown Source)
	at org.hsqldb.persist.LockFile$HeartbeatRunner.run(Unknown Source)
	at org.hsqldb.lib.HsqlTimer$TaskRunner.run(Unknown Source)



И, что самое обидное, с утра уже ничего не падает.
...
Рейтинг: 0 / 0
Мистика
    #39314806
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, мне кажется, что вряд ли дело в конкуренции. Уж очень BOM выглядит подозрительно. Может и правда глюк на уровне железа прилетел?
...
Рейтинг: 0 / 0
Мистика
    #39314809
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

Нет у меня двух контекстов и сервлетов. Только JAXWS Endpoint. Двойной инит конктеста был одним из первых моих предположений. Но отладкой подтвердить не удалось.
...
Рейтинг: 0 / 0
Мистика
    #39315035
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAtum1,

Нет у меня двух контекстов и сервлетов. Только JAXWS Endpoint. Двойной инит конктеста был одним из первых моих предположений. Но отладкой подтвердить не удалось.

Я вообще плохо соображаю зачем нужно использовать сервлет в контексте HQL, но как варинат дебажанья сервлетов можно попробовать использовать филтер.
...
Рейтинг: 0 / 0
Мистика
    #39315048
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaЯ вообще плохо соображаю зачем нужно использовать сервлет в контексте HQL, но как варинат дебажанья сервлетов можно попробовать использовать филтер.
Нет у меня сервлетов. Не нужны мне фильты. Нет у меня двойной инициализации контекста тоже. Продукт коробочный и пилотный, поэтому пока что идет с HQL внутри.
...
Рейтинг: 0 / 0
Мистика
    #39315379
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSergunkaЯ вообще плохо соображаю зачем нужно использовать сервлет в контексте HQL, но как варинат дебажанья сервлетов можно попробовать использовать филтер.
Нет у меня сервлетов. Не нужны мне фильты. Нет у меня двойной инициализации контекста тоже. Продукт коробочный и пилотный, поэтому пока что идет с HQL внутри.

Тогда нужен тест - замокайте все что можно и запустите тест на инициализацию контекста и старт вашего приложения.

+ все таки добавьте логирование через аспекты оберните все что можно и смотрите какой поток и откуда лезет и хочет повторно инициализировать .
...
Рейтинг: 0 / 0
Мистика
    #39315396
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

Блин. Еще раз:
1) Два потока, которые, возможно , конкурируют я уже привел выше. Один из них это сама инициализация, второй - таймер HSQL
2) Результаты записи в файл не похожи на конкурентную запись совершенно. Целый день результат был всегда 22 байта, которые я привел. С конкуренцией были бы вариации.
3) Проблема самоустранилась на следующее утро точно таким же мистическим утром и больше не появлялась. Комп был в режиме сна. Но весь день до этого она проявлялась совершенно стабильно при запуске в IntelliJ, кроме случаев остановки в брейкпоинтах и пошаговой отладки.
...
Рейтинг: 0 / 0
Мистика
    #39315428
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПроблема самоустранилась на следующее утро точно таким же мистическим утром и больше не появлялась. Комп был в режиме сна. Но весь день до этого она проявлялась совершенно стабильно при запуске в IntelliJ, кроме случаев остановки в брейкпоинтах и пошаговой отладки.

По сути, проблема изчезла после перезапуска IDEA? Может был глюк именно в ней и полечился после первого перезапуска?
...
Рейтинг: 0 / 0
Мистика
    #39315456
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПо сути, проблема изчезла после перезапуска IDEA?

Нет. Комп был в режиме сна. Перезапускался только скайп.

Alexey TominМожет был глюк именно в ней и полечился после первого перезапуска?
Да. Скорее всего. Или в мавене. Проект запускается там же где и финальная сборка. Может какой-то процесс в фоне начинал фильтровать этот файл. Фиг его знает. Пробовал повторить - не получилось.

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

Сейчас я подозреваю что база валялась в ресурсах, и мавен копировал ее поверх. Надо попробовать lck файл прогнать через фильтр мавена и посмотреть что получится.
...
Рейтинг: 0 / 0
Мистика
    #39315463
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, спасибо всем. Похоже дело было в Maven и звезды так сложились.
Сегодняшний таймштамп в байтах попадает в ASCII. Перемотал на пятницу, скопировал lock файл в ресурсы и там появился BOM после фильтрации. Стабильных 22 байта с тремя BOM не выходит. Но это лучшая теория на данный момент.

Хотя, мне кажется, что базу из ресурсов я грохнул почти сразу, чтобы она никак не влияла. Но, похоже, я ошибаюсь и дошел до этого только к вечеру.
...
Рейтинг: 0 / 0
Мистика
    #39315464
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отдельное спасибо vsl за подсказку с BOM.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Мистика
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]