Версия:

Перезагрузка модуля

Перезагрузка модуля

Любое приложение или модуль Tarantool’а можно перезагрузить с нулевым временем простоя.

Перезагрузка модуля на Lua

Ниже представлен пример, который иллюстрирует наиболее типичный случай - «обновление и перезагрузка».

Примечание

В этом примере используются рекомендованные методики администрирования на основании файлов экземпляров и утилиты tarantoolctl.

  1. Обновите файлы приложения.

    Например, модуль в /usr/share/tarantool/app.lua:

    local function start()
              -- начальная версия
              box.once("myapp:v1.0", function()
                box.schema.space.create("somedata")
                box.space.somedata:create_index("primary")
                ...
              end)
    
              -- код миграции с 1.0 на 1.1
              box.once("myapp:v1.1", function()
                box.space.somedata.index.primary:alter(...)
                ...
              end)
    
              -- код миграции с 1.1 на 1.2
              box.once("myapp:v1.2", function()
                box.space.somedata.index.primary:alter(...)
                box.space.somedata:insert(...)
                ...
              end)
            end
    
            -- запустить файберы в фоновом режиме, если необходимо
    
            local function stop()
              -- остановить все файберы, работающие в фоновом режиме, и очистить ресурсы
            end
    
            local function api_for_call(xxx)
              -- пройти бизнес-процесс
            end
    
            return {
              start = start,
              stop = stop,
              api_for_call = api_for_call
            }
    
  2. Обновить файл экземпляра.

    Например, /etc/tarantool/instances.enabled/my_app.lua:

    #!/usr/bin/env tarantool
            --
            -- hot code reload example
            --
    
            box.cfg{listen = 3302}})
    
            -- ATTENTION: unload it all properly!
            local app = package.loaded['app']
            if app ~= nil then
              -- stop the old application version
              app.stop()
              -- unload the application
              package.loaded['app'] = nil
              -- unload all dependencies
              package.loaded['somedep'] = nil
            end
    
            -- load the application
            log.info('require app')
            app = require('app')
    
            -- start the application
            app.s{some app options controlled by sysadmins}mins})
    

    Самое главное — правильно разгрузить приложение и его зависимости.

  3. Вручную перезагрузите файл приложения.

    Например, используя tarantoolctl:

    $ tarantoolctl eval my_app /etc/tarantool/instances.enabled/my_app.lua
    

Перезагрузка модуля на С

После компиляции новой версии модуля на C (библиотека общего пользования *.so), вызовите функцию box.schema.func.reload(„module-name“) из Lua-скрипта для перезагрузки модуля.