215 похожих чатов

И еще сложный вопрос. before_replace он ведь работает только на

новые изменения? Как чекать при перезапуске, что все записи удовлетворяют заданному предикату?
Хочется три шага
1) Чекнуть что все ок, удалив ненужные
2) Поставить before_replace
3) Включить репликацию с других нод

Так ведь можно?
Не очень понимаю где на это смотреть с точки зрения once и применения настроек

4 ответов

7 просмотров

Это будет выглядеть как-то так: local function my_trigger() -- do what you must end local my_space = 'space_name' box.ctl.on_schema_init(function() box.space._space:on_replace(function(prev, sp) if sp.name == my_space then box.on_commit(function() rawset(_G, 'my_space_before_replace', box.space[my_space]:before_replace( my_trigger, rawget(_G, 'my_space_before_replace') ) ) end) end end) end)

лущ проверить что спейс инсертиться, чтобы случайно на альтерах не понаставлять лишних триггеров

Игрь-Минеев Автор вопроса

А как это полечит уже существующие записи в БД? Если вдруг они перестали удовлетворять предикату

во время рекавери (поднятия снапа и xlog'ов), вызывается триггер before_replace, в принципе, вы можете в нем поменять данные (например скипнуть какое-то количество транзакций, сделать свою валидацию). Важно только помнить, что изменения, сделанные в этом тригере во время рекавери не будут писаться в журнал. Но после поднятия можно будет сделать box.snapshot

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Нужен пулл реквест с хаммингберд + асинкхттпклиент или хаммингберд + юрлсессия?
Karl {🌪️}{🐊} Shinobi
7
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
может там как раз сжатие?
Дмитрий
7
Как структуру (из MSVC) в которой описаны битовые поля описать для fasm? Вот например это (fBinary...fDummy2 - это физически 1 DWORD): typedef struct _DCB { DWORD DCBlength;...
Евгений
3
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
9
Карта сайта