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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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