|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
Столкнулся с крайне удивившей меня ситуацией. Cache 5.0.21. Пользователи пожаловались, что все результаты их работы с неким документом отсутствуют в базе. Посмотрел на данные - да, как будто вообще ничего не делали (там есть поля, которые изначально пустые, но, единожды установив в них какое-то значение, вернуть пустое уже нельзя - так вот они пустые). Полез в Панель управления - Журналирование - открыл журнал за указанный день, сделал поиск по ID документа - да, там есть отметки о проведенной записи (документ обрабатывается программиной, меняющей кучу связанных данных). Эти отметки в журнале идут с кодом операции ST - как я полагаю, первая буква в данном случае от Set - в поле "данные" стоят верные данные. Но: позднее почему-то идут операции с кодом kT - есть у меня подозрение, что они означают Kill (какой-то хелп по этому поводу пока найти не смог). Идут они в обратном порядке - это хорошо видно на примере глобала, в который у меня программой, обрабатывающей этот документ при сохранении, лог пишется. Выглядит это примерно так: Никаких операций удаления из этого лога у меня в программе нет. Последняя строчка на этом скрине - удаление введенных пользователями данных. В результате на данный момент все данные в базе согласованны - т.е. все изменения, внесенные программой при обработке документа, откачены, что для пользователей невозможно (скажем, лог откатить никак нельзя). В общем, я совсем не понимаю происходящее: или я неправильно понял, что у меня в журнале написано, и это не kill'ы, или внесенные изменения почему-то самопроизвольно откатились. К сожалению, проблема эта не единичная - передо мной сейчас здоровая ведомость найденных аналогичных ошибок. Хронологически все локализовано в июне-июле, до этого 8 лет эти программы работали стабильно. Кашешные транзакции в данной программе не используются. В общем, если подскажите хотя бы, куда копать, чтобы подобное прекратить, буду очень признателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2014, 11:15 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
Mike Ivanovпозднее почему-то идут операции с кодом kT - есть у меня подозрение, что они означают Kill (какой-то хелп по этому поводу пока найти не смог). Journal File Operations Mike IvanovКашешные транзакции в данной программе не используются.Вы не правы:Документация по ссылке выше 1 T is appended when the operation occurs within a transaction, for example ST for a Set operation within a transaction or kT for a ZKill operation within a transaction 8297134 PS: 2571299 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2014, 11:58 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
servit, Спасибо. Сейчас буду смотреть. Транзакцию, в таком случае, вероятно, создает каше автоматом при вызове класс-метода из клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2014, 13:31 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
Mike Ivanov, Посмотрите код на предмет отношений между классами. Например, в классе A есть поле с типом класс B. Оба класса %Persistent Тогда после выполнения такого кода: set objA=##class(A).%Open(idA) set objB=##class(B).%Open(idB) set objB.Field="test" do objB.%Save() do objA.%Save() в поле Field будет не "test", а то, что там было до выполнения строчки set objA=##class(A).%Open(idA) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2014, 15:21 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
MaWr, Я классовые возможности практически не использую. По сути, я работаю на мампсе с sql и объектами (чтобы не возиться вручную с индексами) :) Все процедуры просто работают со строковыми данными, записывая в заданные поля. Так что в этой области причина едва ли найдется. На то, что описано в посте по ссылке из первого комментария, похоже. Перезагрузил сегодня сервер, перестроил индексы в нескольких ключевых классах на всякий случай, сделал логирование записываемых данных в txt и сверку "если есть в локальном txt - есть ли в базе?" - буду ждать, что получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2014, 16:34 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
Mike Ivanov, У нас были случаи, когда программист забыл закрыть транзакцию... в итоге после перезагрузки сервера все внесенные данные откатывались. Можно посмотреть с помощью $TLevel существуют ли на данный момент открытая транзакция. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 08:50 |
|
Самопроизвольный откат изменений
|
|||
---|---|---|---|
#18+
vassil, Непосредственно в коде у меня транзакции не используются. Вероятно, каше при вызове метода автоматически поднимает транзакцию. После перезагрузки сервера вроде как снова все работает стабильно, но хотелось бы понять, что вызывает такой сбой. Отдельные битые куски данных до сих пор разгребаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2014, 16:56 |
|
|
start [/forum/topic.php?fid=39&fpage=20&tid=1556851]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 135ms |
0 / 0 |