Size: a a a

2020 September 03

KN

Konstantin Nazarov in Tarantool
Maxim Galaganov
здравствуйте. хочу сделать fuse-файлуху на тарантуле. пока появился ряд вопросов, как это спроектировать.

у libfuse есть два варианта api -- highlevel(работа с путями) и lowlevel(работа с inode'ами)
т.к. в моём юзкейсе скорее всего это будет не прокси-файлуха, а ходилка в некоторый внешний стородж(со своей адресацией) -- пока кажется логичным юзать lowlevel-апи и хранить метаданные по inode'ам в коробке.

что непонятно -- как прицепить libfuse'овский eventloop к тарантулу. варианты:

1) сделать цикл файбером на tx-треде.
2) coio_call на fuse_loop -- чтобы оно крутилось на worker_pool_threads.
3) внешний C-демон, который с одного конца крутит цикл libfuse, а с другого -- ходит в тарантул по сети.

п.1 -- кажется что обработка транзакций и событий libfuse могут начать мешать друг другу.
п.2 -- т.к. колбеки вызываются на том цикле -- сразу оказываемся вне контекста файберов/кооперативной многозадачности.
п.3 -- нет настроения опять писать асинхронную сеть и заводить на ней tarantool-c :)

плюс п.3 -- можно крутить многопоточный цикл.

скажите, может я чего-то упускаю, и есть вариант как это всё связать просто?
очень скоро будет C++ коннектор, с ним будет сильно проще
источник

MG

Maxim Galaganov in Tarantool
Mons Anderson
Ну и в голове не перестаёт вертеться вопрос: "зачем?"
1) ну а что ещё делать в отпуске :)
2) вот у меня есть девайс который с com-порта позволяет данные с флешки читать, хочу к нему файлуху
3) в перспективе — положить на такое поделие очередь почтового сервера
источник

MG

Maxim Galaganov in Tarantool
Mons Anderson
Собственно более правильный вопрос: какую роль будет выполнять тут тарантул?
хочу метаданными файлухи крутить как удобно ) реплицированно их писать
источник

MA

Mons Anderson in Tarantool
в принципе fuse затащить в виде модуля и интегрировать его через coio вполне возможно
Саша уже кинул ссылку на curl, можно посмотреть ещё как делается, например (а)синхронный резолвинг
источник

MG

Maxim Galaganov in Tarantool
посмотрю, спасибо!
источник

MG

Maxim Galaganov in Tarantool
посмотрел. в общем libfuse не даёт такого гранулярного контроля, который даёт libcurl

        while (!fuse_session_exited(se)) {
               res = fuse_session_receive_buf_int(se, &fbuf, NULL);
.......................
               fuse_session_process_buf_int(se, &fbuf, NULL);
       }


так что похоже только вариант с внешним демоном остаётся
источник

MA

Mons Anderson in Tarantool
Maxim Galaganov
посмотрел. в общем libfuse не даёт такого гранулярного контроля, который даёт libcurl

        while (!fuse_session_exited(se)) {
               res = fuse_session_receive_buf_int(se, &fbuf, NULL);
.......................
               fuse_session_process_buf_int(se, &fbuf, NULL);
       }


так что похоже только вариант с внешним демоном остаётся
Ещё остаётся вариант с отдельным тредом
источник

MG

Maxim Galaganov in Tarantool
Mons Anderson
Ещё остаётся вариант с отдельным тредом
я пока не понимаю как колбеки вызывать с него так, чтобы всё не сломалось :)
источник

MG

Maxim Galaganov in Tarantool
cpipe нашёл, через него можно с отдельным тредом.
источник
2020 September 04

С

Сергей in Tarantool
Здравствйте, пытаюсь залить данные из снапов при запуске контейнера. До этого была ошибка SystemError Failed to allocate 31 bytes in slab allocator for memtx_tuple: Out of memory, сказали выделить память под tarantool, сделал, теперь как на скрине. Всегда примерно на 40 с копейками зависает и выходит по 137. Подскажите пожалуйста где искать проблему
источник

GS

Guram Savinov in Tarantool
Yaroslav Dynnikov
Нужно в первую очередь поймать этот operation error
.rocks/share/tarantool/cartridge/confapplier.lua:226
.rocks/share/tarantool/cartridge/confapplier.lua:202
confapplier.lua:120 E> Instance entering failed state: ConnectingFullmesh -> OperationError
BoxError: Replication setup failed, instance in orphan mode
failed to synchronize with 1 out of 2 replicas
failed to synchronize with 2 out of 2 replicas

одна из реплик давно уже зависла (память не увеличивалась, т.е. данные не доливались)
тому причина возможно закоррапченный или удаленный лог:
XlogGapError: Missing .xlog file between LSN 9949631 {1: 9949623, 2: 8} and 9950764 {1: 9950758, 2: 6}
вторая реплика отвалилась без особых на то причин
источник

DS

Dmitry Sharonov in Tarantool
так это у вас роутер или сторадж?
источник

DS

Dmitry Sharonov in Tarantool
если реплика померла - рестартить надо с replication_connect_quorum=0
источник

GS

Guram Savinov in Tarantool
попробуем, но меня больше интересует как сделать чтобы не померали внезапно реплики
источник

VS

Vladislav Shpilevoy in Tarantool
Кто-то вообще пользуется этим кворумом со значением не ноль?
источник

YD

Yaroslav Dynnikov in Tarantool
А еще советую обновиться хотя бы до 2.0.2, там было такое:

Prevent instance state transition from ConnectingFullmesh to OperationError if replication fails to connect or to sync. Since now such fails result in staying in ConnectingFullmesh state until it succeeds.
источник

YD

Yaroslav Dynnikov in Tarantool
Vladislav Shpilevoy
Кто-то вообще пользуется этим кворумом со значением не ноль?
картридж пользуется значениями 0 / 1 / "все" в разных сценариях старта
источник

VS

Vladislav Shpilevoy in Tarantool
то есть только на бут кластера? или после тоже?
источник

VS

Vladislav Shpilevoy in Tarantool
я ни разу не видел, зачем это надо кроме как на время бута кластера, чтоб достаточно реплик собрать и всех зарегистрировать
источник

YD

Yaroslav Dynnikov in Tarantool
после бутстрапа карж ставит 0 и забывает о нем
источник