Size: a a a

2020 November 30

P

Pavel in Tarantool
либо втыкать unpack в луашку
источник

P

Pavel in Tarantool
// CallAsync sends a call to registered tarantool function and returns Future.
// It uses request code for tarantool 1.6, so future's result is always array of arrays
источник

P

Pavel in Tarantool
MAPC
function select_few_rec_by_primary(array)
   out = {}
   for i = 1, #array do
       t = box.space.first_space:select{array[i]}
       if #t > 0 then
           t = t[1]:totable()
           p = box.space.second_space:select{t[2]}
           if #p > 0 then
               t[#t+1] = p[1][3]
           else
               t[#t+1] = nil
           end
           out[#out+1] = t
       end
       fiber.yield()
   end

   return out
end

А это гошный кусок
func (t tar) Get(keys []int64) ([]model.ActualInfo, error) {
 actualInfo := make([]model.ActualInfo, 0, len(keys))
 fut := datasource.Tarantool.CallAsync("select_few_rec_by_primary", []interface{}{keys})
 err := fut.GetTyped(&actualInfo)

 if err != nil {
   log.Println(err)
   tarantoolError, ok := err.(tarantool.ClientError)
   if !ok {
     return nil, err
   }

   if tarantoolError.Code == tarantool.ErrConnectionClosed {
     return nil, datasource.ReconnectTarantool(datasource.Tarantool, 1)
   }
 }

 return actualInfo, nil
}
тут, кстати, можно сразу callTyped использовать
источник

M

MAPC in Tarantool
Pavel
actualInfo := make([]model.ActualInfo, 0, len(keys))

По-моему из call результат возвращается в массиве, т.е вам нужно его распаковывать в [][]model.ActualInfo
не, так не канает
msgpack: invalid code ce decoding map length
источник

AK

Alexey Kuzin in Tarantool
MAPC
function select_few_rec_by_primary(array)
   out = {}
   for i = 1, #array do
       t = box.space.first_space:select{array[i]}
       if #t > 0 then
           t = t[1]:totable()
           p = box.space.second_space:select{t[2]}
           if #p > 0 then
               t[#t+1] = p[1][3]
           else
               t[#t+1] = nil
           end
           out[#out+1] = t
       end
       fiber.yield()
   end

   return out
end

А это гошный кусок
func (t tar) Get(keys []int64) ([]model.ActualInfo, error) {
 actualInfo := make([]model.ActualInfo, 0, len(keys))
 fut := datasource.Tarantool.CallAsync("select_few_rec_by_primary", []interface{}{keys})
 err := fut.GetTyped(&actualInfo)

 if err != nil {
   log.Println(err)
   tarantoolError, ok := err.(tarantool.ClientError)
   if !ok {
     return nil, err
   }

   if tarantoolError.Code == tarantool.ErrConnectionClosed {
     return nil, datasource.ReconnectTarantool(datasource.Tarantool, 1)
   }
 }

 return actualInfo, nil
}
> t[#t+1] = p[1][3]
Вот здесь кажется закрадывается ошибка. Что, если последнее поле кортежа null?
источник

M

MAPC in Tarantool
если p[1][3] будет равно nil , то ничего страшного , это же то же самое как если бы мы попали в else
источник

M

MAPC in Tarantool
и в таком случае, у меня был бы определенный набор входных данных с которым я ловил бы ошибку
источник

M

MAPC in Tarantool
а у меня такого нет ) на одних и тех же входных может 9 раз успешно вызваться, а на 10-ый ошибка
источник

AK

Alexey Kuzin in Tarantool
MAPC
а у меня такого нет ) на одних и тех же входных может 9 раз успешно вызваться, а на 10-ый ошибка
Покажите бэктрейс ошибки
источник

M

MAPC in Tarantool
Как назло не могу ее поймать
источник

M

MAPC in Tarantool
там в одна функция которая может такое выплюнуть
 return 0, fmt.Errorf("msgpack: invalid code %x decoding int64", c)
источник

M

MAPC in Tarantool
func (d *Decoder) int(c byte) (int64, error)
источник

PL

Pavel Lapaev in Tarantool
на той неделе @yngvar_antonsson опубликовал новую статью

https://habr.com/ru/company/mailru/blog/529456/
источник
2020 December 01

AS

Arthur Salimkhanov in Tarantool
Добрый вечер. можете подсказать по хипу в луа/тарантуле, какое значение по умолчанию и есть ли возможность потюнить количество?
источник

MS

Mike Siomkin in Tarantool
источник

MS

Mike Siomkin in Tarantool
Можно потюнить только GC, но лучше не надо )
источник

AS

Arthur Salimkhanov in Tarantool
спасибо за ответ)
источник

AS

Arthur Salimkhanov in Tarantool
я правильно же понимаю при создании нового файбера используется та же память, то есть два файбера будут юзать тот же 1гиг на обоих?
источник

MS

Mike Siomkin in Tarantool
да
источник

MS

Mike Siomkin in Tarantool
Если данные не помещаются в луашную память, можно положить их во временный спейс. Размер ОП мемтикса конфигурируется без проблем.
источник