powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопрос по обработку отката транзации
13 сообщений из 13, страница 1 из 1
Вопрос по обработку отката транзации
    #39808119
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Cache'e есть какая либо возможность отловить вызовы trollback что бы выполнить свой код по факту отката транзакции?

Или скажем понять что между двумя временными точками был trollback?
Не по журналу, так как это наверное точно можно но наверняка жутко медленно, а по каким либо "флагам", "счетчикам" процессов области, номерам завершенных транзакций?

Callback метод %Rollback для объектов это не то, он я так понимаю, срабатывает только если в %Save что то пошло не так, а мне хотелось бы обнаружить факт произведения произвольного tro
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808128
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn , тестовый пример сделай для иллюстрации... ;)
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808134
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Факт наличия открытой транзакции на текущий момент так же подойдет
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808146
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaестовый пример сделай для иллюстрации... ;)

Тут не пример, тут постановка задачи скорее всего.

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

В триггерах и callback таблиц можно использовать выставление флага через $increment аля

Код: c#
1.
 set x = $increment(^CacheTempUserBlaBla)



инкримент не откатывается в tro и оставляет четкий след что было изменение начальных данных.

Но я не учел что может быть долгая или вручную открытая транзакция которая откатывается после кэширования результата, то есть
Код: plaintext
1.
2.
3.
4.
* TSTART
* Что то генерируем в исходных данных
* Вызываем подсчет агрегата, обнаруживается факт изменения данных кеш валидируется
* TROLLBACK

В такой последовательности я получаю невалидный кеш до ближашего изменения начальных данных, и никак не могу это обнаружить

И что неприятно TROLLBACK вообще может быть в соседнем процессе относительно вызова подсчета агрегата, главно что бы он исходные данные задевал.

По идее для обнаружения проблемы мне достаточно номера последней откаченной транзакции, анализируя который можно предположить невалидность кеша
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808171
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
$TLEVEL - узнает кол-во открытых транзакций. Может быть на основе этого сделать логику.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808174
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnТут не пример, тут постановка задачи скорее всего.
Тестовый пример всяко лучше...
Если ты его не можешь сделать - уже говорит о многом. Обычно о хотении чего-то заоблачного. Причем настолько, что его нельзя представить в виде схематичной, небольшой программки.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808204
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vassil,

$TL это уровень транзакции в текущем процессе, если соседний процесс изменил начальные данные а потом откатил, ты об этом не узнаешь.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808206
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Ты мой ответ читал вообще? Там пошагово описан пример. Давай не будем оценивать друг друга.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808208
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Документация либо молчит либо намекает что такое узнать нельзя.

Видимо придется смотреть в сторону LOCK удерживаемого до TCOMMIT или TROLLBACK
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808305
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnДавай не будем оценивать друг друга.
Проблема твоя - тебе и решать...
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808460
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn,

Есть у меня подозрение, что счетчик откатов транзакций должен быть реализован. Вопрос только в том как получить к нему доступ. Возможно имеет смысл задать вопрос на Developer Community, и может быть даже кто нибудь ответит. Или стоит спросить через WRC.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808580
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn
Код: c#
1.
 set x = $increment(^CacheTempUserBlaBla)


инкримент не откатывается в tro и оставляет четкий след что было изменение начальных данных.
В данном случае оно не откатится еще потому, что это CACHETEMP нежурналируемая база.

Вы делаете один кэш на несколько процессов, а потом боретесь с тем, что данные меняются в параллельных процессах?
И при этом не блокируете ресурсы? Но вы же как-то отслеживаете их изменение?
Хотите отслеживать откат транзакций других процессов? Откат транзакций делается либо вручную, либо по ошибке. И в том и другом случае можно добавить код для пересчета кэша.
А за длительные транзакции нужно вообще бить по рукам.
В общем, мне кажется, вопрос больше к архитектуре приложения, а не возможностям Каше.

Была мысль, что такая же проблема должна быть при работе с битовыми индексами, потом подумал, что битовые операции скорее всего журналируются особым образом, и откатывается только один бит, а не вся строка.
...
Рейтинг: 0 / 0
Вопрос по обработку отката транзации
    #39808809
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос решен.

Дополнил инкримент блокировкой левого глобала ^BlaBla с последующей разблокировкой , которая остается висеть до конца завершения транзакции.

Соответственно без относительно процессов.
- если ^CacheTempUserBlaBla больше нуля, имеют место измененные данные, нужно пересчитывать агрегат
- если не удается эксклюзивно заблокировать ^BlaBla значит исходные данные находятся в незавершенной транзакции, то есть закешированный результат использовать нельзя.

Всем спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопрос по обработку отката транзации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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