InfoWings / Knowledge-Net

Complex data management solution
1 stars 2 forks source link

Таблица объеков пересоздается при каждом старте #171

Closed underlow closed 6 years ago

underlow commented 6 years ago

@sreznick На самом деле это просто какие глюки ориента. Базы в stage1 и stage2 вошли в какое-то странное состояние. Выражалось оно в том, что при рестарте были в логах жалобы на то, что таблица объектов создается внутри транзакции. Отсюда и заголовок тикета. Но в коде никаких проблем в этом плане не было видно. При повторном рестарте сообщения в логах поменялись. Ориент стал жаловаться на попытку создать существующий класс. Хотя в коде делались честные проверки. В шатном клиенте класс был виден как создан. То есть тут есть оченвидные проблемы на стороне ориента - класс по факту создан при том, что были жалобы на невозможность создания. Плюс - getClass() возвращал null при существующем классе. При смене имени класса для объектов на несуществующее эта ситуация с двумя последовательными падениями повторялась. Воспроизвести ее на свежем докер-образе ориента не удалось. Аналогично, после того, как я снес и пересоздал докер-образ ориента для stage2, проблема тоже ушла. А вот docker restart на образе для stage1 проблему не уничтожил. Я стал экспериментировать с ним. Передвинул в коде инициализации базы в нашем бекенде initObjects в самое начало. И проблема исчезла. Хуже всего то, что после возвращения инициализации объектов на свое место проблема не вернулась. Даже с другим именем для класса. Сухой остаток: Какие-то глюки в ориенте точно имели место (как минимум создание таблицы на фоне жалоб на невозможность создания), но поймать их не удалось. Такое ощущение, что база вошла в какое-то состояние, а потом в ходе экспериментов случайно из него вышла. Нельзя исключать каких-то тонких проблем в нашем бекенде (поскольку смена порядка инициализации поменяла картину), но код-ревью ничего не выявил, а воспроизвести проблему не получилось. Тикет я закрою, верну код в старое состояние. Заметки пусть будут для истории.