Size: a a a

2020 July 16

MI

Mergen Imeev in Tarantool
Mergen Imeev
Попробовал вариант с 2 полями:
format = {{'i', 'integer'}}
s = box.schema.space.create('A', {format = format})
_ = s:create_index('i')
box.execute('insert into a values (1), (2);')
format = {{'i', 'integer'}, {'a', 'integer', is_nullable = true}, {'b', 'integer', is_nullable = true}}
s:format(format)
box.execute('update a set "b" = NULL;')


При апдейте выдало ошибку:
tarantool> box.execute('update a set "b" = NULL;')
---
- null
- Field 3 was not found in the tuple
...


Причем:
tarantool> box.execute('update a set "b" = 1 WHERE "b" = NULL;')
---
- row_count: 0
...

tarantool> box.execute('select * from a where "b" is NULL;')
---
- metadata:
 - name: i
   type: integer
 - name: a
   type: integer
 - name: b
   type: integer
 rows:
 - [1, null, null]
 - [2, null, null]
...


Однако, если сначала обновить поле a, все работает
tarantool> box.execute('update a set "a" = 1;')
---
- row_count: 2
...

tarantool> box.execute('update a set "b" = 1;')
---
- row_count: 2
...
Я думаю вы можете воспользоваться моим вариантом
источник

МБ

Максим Броня... in Tarantool
Mergen Imeev
Я думаю вы можете воспользоваться моим вариантом
format = {{'i', 'integer'}}
s = box.schema.space.create('A', {format = format})
_ = s:create_index('i')
box.execute('insert into a values (1), (2);')
format = {{'i', 'integer'}, {'a', 'integer', is_nullable = true}, {'b', 'integer', is_nullable = true}}
s:format(format)
s:create_index('b',{parts={'b'}, unique = false})

box.execute('select * from a where "b" is NULL;')
box.execute('update a set "b" = NULL;')
источник

МБ

Максим Броня... in Tarantool
unix/:/var/run/tarantool/tarantool.sock> box.execute('select * from a where "b" is NULL;')
---
- metadata:
 - name: i
   type: integer
 - name: a
   type: integer
 - name: b
   type: integer
 rows:
 - [1, null, null]
...

unix/:/var/run/tarantool/tarantool.sock> box.execute('update a set "b" = NULL;')
---
- null
- Field 2 was not found in the tuple
источник

МБ

Максим Броня... in Tarantool
s:create_index('b',{parts={'b'}, unique = false}) - вот это получается ключевой момент
источник

MI

Mergen Imeev in Tarantool
Сомневаюсь, т.к. эта ошибка получена без создания индекса в моем сообщении выше
источник

MI

Mergen Imeev in Tarantool
Достаточно того, что создаются две дополнительных колонки
источник

МБ

Максим Броня... in Tarantool
Mergen Imeev
Сомневаюсь, т.к. эта ошибка получена без создания индекса в моем сообщении выше
без индекса все ок вроде
источник

MI

Mergen Imeev in Tarantool
Максим Броня
без индекса все ок вроде
У меня нет:
tarantool> format = {{'i', 'integer'}}
---
...

tarantool> s = box.schema.space.create('A', {format = format})
---
...

tarantool> _ = s:create_index('i')
---
...

tarantool> box.execute('insert into a values (1), (2);')
---
- row_count: 2
...

tarantool> format = {{'i', 'integer'}, {'a', 'integer', is_nullable = true}, {'b', 'integer', is_nullable = true}}
---
...

tarantool> s:format(format)
---
...

tarantool> box.execute('update a set "b" = NULL;')
---
- null
- Field 3 was not found in the tuple
...
источник

MI

Mergen Imeev in Tarantool
В любом случае, если у вас есть возможность сделайте тикет. Если нет, то я сам позже сделаю
источник

МБ

Максим Броня... in Tarantool
Mergen Imeev
У меня нет:
tarantool> format = {{'i', 'integer'}}
---
...

tarantool> s = box.schema.space.create('A', {format = format})
---
...

tarantool> _ = s:create_index('i')
---
...

tarantool> box.execute('insert into a values (1), (2);')
---
- row_count: 2
...

tarantool> format = {{'i', 'integer'}, {'a', 'integer', is_nullable = true}, {'b', 'integer', is_nullable = true}}
---
...

tarantool> s:format(format)
---
...

tarantool> box.execute('update a set "b" = NULL;')
---
- null
- Field 3 was not found in the tuple
...
вернее селект без индекса корректно отрабатывает, а апдейт с ошибкой
источник

МБ

Максим Броня... in Tarantool
Mergen Imeev
В любом случае, если у вас есть возможность сделайте тикет. Если нет, то я сам позже сделаю
ок
источник

KK

Kostya Karpov in Tarantool
Всем привет! Столкнулся с такой проблемой:
Использую тарантул 1.10 и php клиент.
Периодически появляются ошибки вида  "No space '%some_space%' defined". Я выяснил, что такая ошибка может выскакивать если у текущего пользователя нет прав на %some_space%. Но все вообще клиенты используют binary port, без указания юзера и логина, то есть, по-идее, всегда должен быть guest.
источник

KK

Kostya Karpov in Tarantool
получается, что как будто у guest периодически пропадают права?
источник

KK

Kostya Karpov in Tarantool
был бы рад любому совету
источник

P

Pavel in Tarantool
Привет. Кажется баг в картридже.
Я добавлял недавно новый репликасет но вес запускал плавно от 0 до 1 через graphql API, т.к у нас версия картриджа, в которой еще было нельзя поставить не целое в вес. Админка нормально показывала вес этого репликасета до тех пор, пока я не порестартил оба инстанса по очереди.
Доступ к данным есть, все работает, но меня смущает картина, которую я вижу в админке.
Чем это вообще грозит? Если сейчас из админки поставлю вес 1, бакеты не поедут, кластер не разлетится?
источник

AK

Alexey Kuzin in Tarantool
Так а какое общее количество бакетов и общая картина?
источник

P

Pavel in Tarantool
И еще 1 вопрос по картриджу.
Я сейчас сложил все бакеты по репликасетам и у меня получилось 30 001, а всего было 30 000 когда запускали кластер.
Как такое могло произойти?
источник

AK

Alexey Kuzin in Tarantool
Где-то задвоился бакет в процессе
источник

AK

Alexey Kuzin in Tarantool
Переслано от Dmitry
local vshard = require('vshard')

-- find and drop duplicated buckets
local buk = {}
for _, replicaset in pairs(vshard.router.internal.routers['_static_router'].replicasets) do
   for bucket_id = 1, vshard.router.bucket_count() do
       local _, err = replicaset:callrw('vshard.storage.bucket_stat', { bucket_id })
       if err == nil then
           if buk[bucket_id] == nil then
               buk[bucket_id] = bucket_id
           else
               -- drop duplicated buckets
               local replicaset = vshard.router.route(bucket_id)
               local ok, err = replicaset:callrw('vshard.storage.bucket_force_drop', { bucket_id }, {})
               if not ok then
                   return nil, err
               end
           end
       end
   end
end
источник

AK

Alexey Kuzin in Tarantool
Переслано от Dmitry
но могут быть потери данных
источник