Size: a a a

2021 January 14

AL

Andrey L in Tarantool
и длина строки ограничена :(
источник

R

R-omk in Tarantool
по теме: Consistent Map-Reduce in vshard

https://github.com/tarantool/vshard/discussions/261

@olegrok  @gerold103


Нужно предусмотреть возможность включения pin  не только при вызове со стороны роутера, но и непосредственно с самого репликасета.

Сценарий может быть такой :
Файберы на репликасетах получают задания из системы событий (внутренней или внешней это неважно) и понимают что на время обработки события нужно залочить все перемещения бакетов, например это может быть полезно для миграций , когда нужно все существующие и вновь приходящие данные обработать; при этом может понадобиться согласование с остальными репликасетами, но опять же это можно сделать и через внешний стейт менеджер, лишь бы была возможность взять pin и не отпускать его ни в коем случае пока явно не будет сигнала... Это может показаться похожим на двухфазное отключение шедулера и затем двухфазное включение, но это не совсем так... скорее это двухфазное снятие пинов

Другой пример использования:
(такое могло бы быть применимо в crud )
ситуации когда   tuple-merger невозможно использовать из за мультикей индексов или  когда вообще нужен курсор и сортировка не по текущим индексам,  в таком случае должна использоваться техника временных таблиц, при которой каждый воркер map скрринит данные в своем репликасете в тот момент когда ему удалось взять pin и затем отправляет во временное хранилище для reduce и сортировки,  после чего уже роутер может  свободно по курсору отдавать данные;  тоесть это такой асинхронный подход когда  момент принятия заявки на map reduce может не совпадать с моментом его фактического исполнения.

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

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

===

Кроме того, было бы не плохо  сделать систему триггеров или хуков, для случая когда шедулер запланировал перемещения  чтобы он мог посигналиить и "мягко" попросить  по возможности завершиться фоновым таскам и снять пины.

хотелки:
Такая же система хуков или триггеров нужна и при смене rw - ro , нужно иметь возможность "попросить "  снять  ref rw,  но об этом я много писал в тикетах vshard...
То же самое и о процессе выключения , тоесть при переходе из ro  в ничто ,   нужно иметь возможность дождаться снятия pin и ref     предварительно "предупредив " о скором завершении.

На текущий момент  по факту все переключения rw- ro       и   выключения - это жесткое отрубалово вместо реджекта вновь прибывших и ожидания завершения текущих.
источник

VS

Vladislav Shpilevoy in Tarantool
Понял-принял. Можешь плиз это в пост положить? Я обмозгую и выдам правки в РФЦ + комменты и ответы.
источник

MA

Mons Anderson in Tarantool
R-omk
по теме: Consistent Map-Reduce in vshard

https://github.com/tarantool/vshard/discussions/261

@olegrok  @gerold103


Нужно предусмотреть возможность включения pin  не только при вызове со стороны роутера, но и непосредственно с самого репликасета.

Сценарий может быть такой :
Файберы на репликасетах получают задания из системы событий (внутренней или внешней это неважно) и понимают что на время обработки события нужно залочить все перемещения бакетов, например это может быть полезно для миграций , когда нужно все существующие и вновь приходящие данные обработать; при этом может понадобиться согласование с остальными репликасетами, но опять же это можно сделать и через внешний стейт менеджер, лишь бы была возможность взять pin и не отпускать его ни в коем случае пока явно не будет сигнала... Это может показаться похожим на двухфазное отключение шедулера и затем двухфазное включение, но это не совсем так... скорее это двухфазное снятие пинов

Другой пример использования:
(такое могло бы быть применимо в crud )
ситуации когда   tuple-merger невозможно использовать из за мультикей индексов или  когда вообще нужен курсор и сортировка не по текущим индексам,  в таком случае должна использоваться техника временных таблиц, при которой каждый воркер map скрринит данные в своем репликасете в тот момент когда ему удалось взять pin и затем отправляет во временное хранилище для reduce и сортировки,  после чего уже роутер может  свободно по курсору отдавать данные;  тоесть это такой асинхронный подход когда  момент принятия заявки на map reduce может не совпадать с моментом его фактического исполнения.

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

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

===

Кроме того, было бы не плохо  сделать систему триггеров или хуков, для случая когда шедулер запланировал перемещения  чтобы он мог посигналиить и "мягко" попросить  по возможности завершиться фоновым таскам и снять пины.

хотелки:
Такая же система хуков или триггеров нужна и при смене rw - ro , нужно иметь возможность "попросить "  снять  ref rw,  но об этом я много писал в тикетах vshard...
То же самое и о процессе выключения , тоесть при переходе из ro  в ничто ,   нужно иметь возможность дождаться снятия pin и ref     предварительно "предупредив " о скором завершении.

На текущий момент  по факту все переключения rw- ro       и   выключения - это жесткое отрубалово вместо реджекта вновь прибывших и ожидания завершения текущих.
А давай это в discussions?
источник

ОБ

Олег Бабин in Tarantool
Я думал об этом в контексте первого пункта... Но для миграций можно руками отключить ребалансинг прямо со стораджа
источник

VS

Vladislav Shpilevoy in Tarantool
Vladislav Shpilevoy
Понял-принял. Можешь плиз это в пост положить? Я обмозгую и выдам правки в РФЦ + комменты и ответы.
Можно и на русском туда положить, если не хочешь переводить
источник

NK

Nick Karlov in Tarantool
Vladislav Shpilevoy
Понял-принял. Можешь плиз это в пост положить? Я обмозгую и выдам правки в РФЦ + комменты и ответы.
Влад, но ведь хорошей практикой считается отключениие авторебаланснга при работе кластера в штатном режиме. Кажется, что в этом случае (когда ребалансинг отключен, и делается по запросу), все эти этапы выполнять всегда — это оверкил
источник

VS

Vladislav Shpilevoy in Tarantool
Это необходимо, чтобы работать нормально, когда ребалансинг включен. То есть существует возможность, что твой запрос просто не сработает на всех бакетах, если ребалансинг прокрадется между твоими мап-запросами. Я готов обсуждать это детально в РФЦ
источник

VS

Vladislav Shpilevoy in Tarantool
Там контр-пример уже есть на твой случай
источник

R

R-omk in Tarantool
Nick Karlov
Влад, но ведь хорошей практикой считается отключениие авторебаланснга при работе кластера в штатном режиме. Кажется, что в этом случае (когда ребалансинг отключен, и делается по запросу), все эти этапы выполнять всегда — это оверкил
даже если ребалансинг выключен обычно , то в момент включения он должен как то убедиться что никому не помешает ... то есть тут либо юзеру самому каждый раз писать механизм "остановить мир"   либо то что описано в  обсуждении
источник

R

R-omk in Tarantool
Vladislav Shpilevoy
Это необходимо, чтобы работать нормально, когда ребалансинг включен. То есть существует возможность, что твой запрос просто не сработает на всех бакетах, если ребалансинг прокрадется между твоими мап-запросами. Я готов обсуждать это детально в РФЦ
до того как я вчера прочитал  твое предложение  я думал для ro запросов можно сделать немного упрощенную схему -  где каждый рпеликасет прикладывает в ответе сколко у него бакетов было,  и роутер сверяет общую сумму,  если сумма не равна, что ребалансер в процессе чтото поломал ,  но такой подход видимо не защитит от ситуации когда (по неведомому стечению обстоятельств ) произошел обмен бакетами так что сумма сошлась.
источник

VS

Vladislav Shpilevoy in Tarantool
Да, ребалансер хитер
источник

VS

Vladislav Shpilevoy in Tarantool
Он хочет, чтобы ты так и думал
источник

R

R-omk in Tarantool
тоесть техника предполагала ретрай в случае если заметила колизию,  допускаю что это можно просто флагом сделать что пока делался запрос  была стработка...  

но это только для RO,  твое описание подходит и для rw  , но нужно все учесть
источник

R

R-omk in Tarantool
ну и такая техника для курсоров не подходит,    но про них я вон написал что вообще все неоднозначно
источник

M

Mikhail in Tarantool
Mikhail
Привет, раз в 1-2 дня отрывается реплика с ошибкой
invalid xlog order
как правило после рестарта цепляется, иногда переливать приходится
Tarantool 2.2.2-1-g4a48a61
опять
       message: 'wals/00000000187434811113.xlog: invalid xlog order'

в логах ничего, последнее
2021-01-14 17:11:10.674 [17605] wal I> removed wals/00000000187047791624.xlog
2021-01-14 17:11:10.674 [17605] wal I> removed wals/00000000187050492645.xlog
источник

МА

Миша Апахов... in Tarantool
Всем привет!
Может кто-нибудь сможет подсказать по тарантулу 1.6? Использовал либу https://github.com/viciious/go-tarantool, при подключении выдало ошибку Space '281' does not exist. Поискали что это, оказалось, что про _vspace, почему-то у нас в тарантуле его нет. А при подключении библиотека пытается из него селектить. Насколько нормальна такая ситуация?
В официальном (вроде бы) коннекторе тоже селектится этот спейс https://github.com/tarantool/go-tarantool . То есть та же ошибка возникнет
источник

VG

Vladislav Grubov in Tarantool
в 1.6 вроде этого спейса еще не было, но могу ошибаться
источник

DS

Dmitry Sharonov in Tarantool
а коннектор там схему смотрит
источник

AT

Alexander Turenko in Tarantool
Vladislav Grubov
в 1.6 вроде этого спейса еще не было, но могу ошибаться
А нельзя создать фейковый, чтобы успокоить коннектор?
источник