сделать выборку данных
Запущен Tarantool Cartridge. Используются роли 'cartridge.roles.crud-router' и 'cartridge.roles.crud-storage'
Пример с выполнением запроса на всех шардах взят отсюда: https://www.tarantool.io/ru/doc/latest/reference/reference_rock/vshard/vshard_api/#lua-function.vshard.router.routeall
На роли, унаследованной от 'crud-router' добавляю такое тело функции для выполнения SQL запроса
---
local shards, error = vshard_router.routeall()
log.warn('query: ' .. query)
for id, replicaset in pairs(shards) do
log.warn('calling: ' .. id)
local set_result, error = replicaset:call('box.execute', {query})
log.warn('called ' .. id)
if (result == nil) then
result = set_result
else
utils.table.add(result.rows, set_result.rows)
end
end
---
Вот что выводится в логе после вызова данной функции:
---
cartridge_002.router | 2022-02-02 19:02:53.388 [3796] main/195/http/10.0.2.2:59501 router.lua:123 W> query:
cartridge_002.router | SELECT "spaceA"."name",
cartridge_002.router | "spaceB"."name"
cartridge_002.router | FROM "spaceA" INNER JOIN "spaceB" ON "spaceA"."spaceB_id" = "spaceB"."id"
cartridge_002.router | LIMIT 10
cartridge_002.router | 2022-02-02 19:02:53.388 [3796] main/195/http/10.0.2.2:59501 router.lua:125 W> calling: 152ad4e8-e9d2-45c4-aea1-80877e88f457
cartridge_002.router | 2022-02-02 19:02:53.889 [3796] main/195/http/10.0.2.2:59501 replicaset.lua:362 E> Exception during calling 'box.execute' on 'localhost:3302(admin@localhost:3302)': Timeout exceeded
cartridge_002.router | 2022-02-02 19:02:53.890 [3796] main/195/http/10.0.2.2:59501 router.lua:127 W> called 152ad4e8-e9d2-45c4-aea1-80877e88f457
cartridge_002.s2-master | 2022-02-02 19:02:56.088 [3812] main/104/membership.main I> Could not reach node: localhost:3302 - suspect
cartridge_002.router | 2022-02-02 19:02:56.636 [3796] main/104/membership.main I> Could not reach node: localhost:3302 - suspect
cartridge_002.s1-replica | 2022-02-02 19:02:56.733 [3805] relay/127.0.0.1:43546/101/main coio.cc:340 !> SystemError timed out: Connection timed out
cartridge_002.s1-replica | 2022-02-02 19:02:56.733 [3805] relay/127.0.0.1:43546/101/main C> exiting the relay loop
cartridge_002.s1-replica | 2022-02-02 19:02:57.066 [3805] main/104/membership.main I> Could not reach node: localhost:3302 - suspect
cartridge_002.s1-master | 2022-02-02 19:02:57.177 [3799] main/134/applier/admin@localhost:3303 I> can't read row
cartridge_002.s1-master | 2022-02-02 19:02:57.178 [3799] main/134/applier/admin@localhost:3303 coio.cc:340 !> SystemError timed out: Connection timed out
cartridge_002.s1-master | 2022-02-02 19:02:57.178 [3799] main/134/applier/admin@localhost:3303 I> will retry every 1.00 second
cartridge_002.s1-master | 2022-02-02 19:02:57.181 [3799] main/106/membership.handle I> Refuting the rumor that we are suspect
---
с первого же опрошенного репликасета (s1-master) сразу вылетает "Exception during calling 'box.execute': Timeout exceeded" и затем остальные образцы не могут до него достучатся. Так происходит каждый раз при вызове данной функции.
Если это решение в корне не правильное, возникает вопрос: Какой стандартный метод существует для вызова SQL запросов на Cartridge кластере?
а вручную на ноде SQL запрос за сколько выполняется? Если руками подключиться и там запустить?
Обсуждают сегодня