Help:Migration: Difference between revisions

From Svacer Wiki
Jump to navigation Jump to search
(Created page with " 4 Миграция 4.1 Миграция со старого сервера В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов: 1. Эк...")
 
No edit summary
(24 intermediate revisions by 3 users not shown)
Line 1: Line 1:
    4 Миграция
[[Category:Help]]
        4.1 Миграция со старого сервера
== Миграция ==
=== Миграция со старого сервера ===
В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:
В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:
    1. Экспорт информации со старого сервера.
# Экспорт информации со старого сервера.
    2. Импорт данных в новый.
# Импорт данных в новый.
Для экспорта информации со старого Svace сервера используется утилита svace-migration.jar


java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir>
Для экспорта информации со старого Svace сервера используется утилита '''svace-migration.jar'''
Табл. 2 — Параметры, используемые при экспорте данных
 
Параметр
    java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir>
Описание
 
<user>
'''Параметры, используемые при экспорте данных'''
Имя пользователя на старом сервере
{| class="wikitable"
<password>
!Параметр!!Описание
Пароль пользователя на старом сервере
|-
<path to svace>
| <user>
Путь к директории, где находится Svace
| Имя пользователя на старом сервере
<path server dir>
|-
Директория, из которой запущен старый сервер
| <password>
<path to output dir>
| Пароль пользователя на старом сервере
Директория, в которую будут записаны экспортируемые данные
|-
| <path to svace>
| Путь к директории, где находится Svace
|-
| <path server dir>
| Директория, из которой запущен старый сервер
|-
| <path to output dir>
| Директория, в которую будут записаны экспортируемые данные
|}


Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся.
Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся.
При экспорте утилита svace-migration.jar извлекает:
При экспорте утилита '''svace-migration.jar''' извлекает:
    • все снимки в виде *.svres;
 
    • информацию о размещении исходного кода;
* все снимки в виде '''*.svres''';
    • сопутствующую информацию в директории старого сервера.
* информацию о размещении исходного кода;
* сопутствующую информацию в директории старого сервера.
 
ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM:
ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM:
--add-opens java.base/java.lang.reflect=ALL-UNNAMED  
    --add-opens java.base/java.lang.reflect=ALL-UNNAMED  
--add-opens java.base/java.lang=ALL-UNNAMED  
    --add-opens java.base/java.lang=ALL-UNNAMED  
--add-opens java.base/java.io=ALL-UNNAMED  
    --add-opens java.base/java.io=ALL-UNNAMED  
--add-opens java.base/java.util=ALL-UNNAMED  
    --add-opens java.base/java.util=ALL-UNNAMED  
--add-opens java.base/java.util.concurrent=ALL-UNNAMED  
    --add-opens java.base/java.util.concurrent=ALL-UNNAMED  
--add-opens java.base/java.text=ALL-UNNAMED  
    --add-opens java.base/java.text=ALL-UNNAMED  
--add-opens java.desktop/java.awt.font=ALL-UNNAMED
    --add-opens java.desktop/java.awt.font=ALL-UNNAMED


Для импорта экспортированных данных используется следующая команда:
Для импорта экспортированных данных используется следующая команда:
svacer migrate [--skip-dxr-errors] --distr <path to svace distr> --temp <path to temp folder> --store <intermediate store> <path to exported data>
 
Табл. 3 — Параметры, используемые при импорте данных
    svacer migrate [--skip-dxr-errors] --distr <path to svace distr> --temp <path to temp folder> --store <intermediate store> <path to exported data>
Параметр
 
Описание
'''Параметры, используемые при импорте данных'''
--skip-dxr-errors
{| class="wikitable"
Опциональный параметр для игнорирования ошибок в DXR-данных. Рекомендуется к использованию
! Параметр !! Описание
--distr
|-
Путь к дистрибутиву Svace
| --skip-dxr-errors
--temp
| Опциональный параметр для игнорирования ошибок в DXR-данных. Рекомендуется к использованию
Директория для хранения временных файлов в ходе конверсии
|-
--store
| --distr
Путь к промежуточному хранилищу
| Путь к дистрибутиву Svace
<path to exported data>
|-
Путь к директории, в которую были экспортированы результаты  
| --temp
| Директория для хранения временных файлов в ходе конверсии
|-
| --store
| Путь к промежуточному хранилищу
|-
| <path to exported data>
| Путь к директории, в которую были экспортированы результаты  
|}


После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload:
После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload:
svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store>


        4.2 Миграция между версиями Svacer
    svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store>
Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел Создание и восстановление резервной копии).
 
=== Миграция между версиями Svacer ===
Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]]).


Ниже описаны существенные изменения при переходе на определенную версию с более старой
Ниже описаны существенные изменения при переходе на определенную версию с более старой
    • 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями
* 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями
    • 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями.
* 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями.


        4.3 Создание и восстановление резервной копии
=== Создание и восстановление резервной копии ===
            4.3.1 Если PostgreSQL запущен в виде сервиса
==== Если PostgreSQL запущен в виде сервиса ====
Если PostgreSQL запущен в виде сервиса (т.е. не в докер-контейнере), то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:
Если PostgreSQL запущен в виде сервиса (т.е. не в докер-контейнере), то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:
sudo su -l postgres
pg_dump --clean -T tmp_diff* svacer_db > svacer.sql
    sudo su -l postgres
    pg_dump --clean -T tmp_diff* svacer_db > svacer.sql
 
где svacer_db — имя БД.
где svacer_db — имя БД.
В результате дамп БД будет создан в файле svacer.sql
В результате дамп БД будет создан в файле svacer.sql


Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление
Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление
sudo su -l postgres  
    sudo su -l postgres  
psql -f svacer.sql svacer_db  
    psql -f svacer.sql svacer_db  


            4.3.2 Если PostgreSQL запущен в docker-контейнере
==== Если PostgreSQL запущен в docker-контейнере ====
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду
docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql
 
    docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql
 
где:
где:
    • svacer_postgres — имя docker-контейнера
* svacer_postgres — имя docker-контейнера
    • postgres — имя пользователя, под учётной записью которого создана БД
* postgres — имя пользователя, под учётной записью которого создана БД
    • svacer_db — имя БД
* svacer_db — имя БД


Для восстановления БД используйте команду
Для восстановления БД используйте команду
cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db


            4.3.3 Создание резервной копии svacer object store через command line API
    cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db
 
==== Создание резервной копии svacer object store через command line API ====
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)


svacer server backup --user admin --password <password> --file <filename>.kvbak
    svacer server backup --user admin --password <password> --file <filename>.kvbak


В результате object store будет сохранен в файл <filename>.kvbak
В результате object store будет сохранен в файл '''<filename>.kvbak'''


Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''.


svacer server --pg <postgres_url> —store /home/svacer/new-store --load-from-backup <filename>.kvbak
    svacer server --pg <postgres_url> —store /home/svacer/new-store --load-from-backup <filename>.kvbak


Восстановление возможно только в пустой object store. То есть в данном примере директория /home/svacer/new-store должна быть пустой.
Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой.


            4.3.4 Создание резервной копии svacer object store в сервере PostgreSQL
==== Создание резервной копии svacer object store в сервере PostgreSQL ====
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является рекомендуемой стратегией по бэкапу object store.  
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является '''рекомендуемой стратегией''' по бэкапу object store.  


Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.
Line 104: Line 130:
Создание бэкапа:
Создание бэкапа:


svacer server backup --user admin --password <password> --pg
    svacer server backup --user admin --password <password> --pg


Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout
Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout


ID = 23 CREATE_TS = 2022-10-06T06:04:33Z  
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z  


Для печати списка существующих бэкапов используется команда:
Для печати списка существующих бэкапов используется команда:


svacer server backup --user admin --password <password> --list-pg
    svacer server backup --user admin --password <password> --list-pg


Результат печатается в stdout и включает ID и время создания бэкапа
Результат печатается в stdout и включает ID и время создания бэкапа


2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info
    2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info
2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080
    2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080
2022-10-06T09:04:36.939+0300    info    Logged by user admin
    2022-10-06T09:04:36.939+0300    info    Logged by user admin
2022-10-06T09:04:36.941+0300    info    Backups:
    2022-10-06T09:04:36.941+0300    info    Backups:
ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
 
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:


svacer server --load-from-pg-backup=<id>
    svacer server --load-from-pg-backup=<id>


где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
Line 129: Line 156:
Для очистки старых бэкапов используется следующая команда:
Для очистки старых бэкапов используется следующая команда:


svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>
    svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>


где <lower> и <upper> нижняя и верхняя граница ID бэкапов.
где <lower> и <upper> нижняя и верхняя граница ID бэкапов.
Line 135: Line 162:
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.


            4.3.5 Создание резервной копии svacer object store вручную
==== Создание резервной копии svacer object store вручную ====
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.


Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
    • ~/.cache/svacer — в OC Linux
 
    • %LocalAppData%\svacer — в ОС Windows
* ~/.cache/svacer — в OC Linux
* %LocalAppData%\svacer — в ОС Windows
 
(например, С:\Users\myusername\AppData\Local\svacer)
(например, С:\Users\myusername\AppData\Local\svacer)


При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
    1. Перед запуском Svacer установить переменную окружения  SVACER_OBJECT_STORE, например:
export SVACER_OBJECT_STORE=/home/user/data/object_store
    2. При запуске Svacer передать путь к object store в параметре --store, например:
svacer --store /home/user/data/object_store


При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной STORE в файле docker-compose.yml. Допустим, директория с object store была скопирована в /home/user/data/object_store. В таком случае параметры нужно указать следующим образом  
# Перед запуском Svacer установить переменную окружения  SVACER_OBJECT_STORE, например:
#: export SVACER_OBJECT_STORE=/home/user/data/object_store
# При запуске Svacer передать путь к object store в параметре --store, например:
#: svacer --store /home/user/data/object_store
 
При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной '''STORE''' в файле '''docker-compose.yml'''. Допустим, директория с object store была скопирована в '''/home/user/data/object_store'''. В таком случае параметры нужно указать следующим образом  


     volumes:
     volumes:
Line 156: Line 186:
       - STORE=/data/object_store
       - STORE=/data/object_store


        4.4 Перенос снимков
=== Перенос снимков ===
Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса.
Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса.
Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.
Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.
Внимание: в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.


            4.4.1 Перенос из веб интерфейса
'''Внимание''': в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.
 
==== Перенос из веб интерфейса ====
Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:
Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:


 
[[File:SnapshotInfo2.png|none|left|alt=SnapshotInfo window]]


либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):
либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):


[[File:CreateNewProject.png|none|left|alt=CreateNewProject window]]


Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки
Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки


[[File:BranchMenu.png|none|left|alt=BranchMenu windows]]


Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели


Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели а так же будет доступно в панели нотификаций:
[[File:Notifications.png|none|left|alt=Notifications window]]


А так же будет доступно в панели нотификаций


[[File:NotificationsClearAll.png|none|left|alt=NotificationsClearAll window]]


 
==== Перенос из командной строки ====
            4.4.2 Перенос из командной строки
Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке.
Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке.


Экспорт снимков:
Экспорт снимков:
svacer server export  
    svacer server export
--user <user>  
        --user <user>  
--password <pwd>  
        --password <pwd>  
--host <host>  
        --host <host>  
--port <port>  
        --port <port>  
--grpc <grpc port>  
        --grpc <grpc port>  
--project <project name or id>  
        --project <project name or id>  
--branch <branch name or id>  
        --branch <branch name or id>  
--snapshot <snapshot name or id>  
        --snapshot <snapshot name or id>  
<output file name>
        <output file name>


Импорт снимков:
Импорт снимков:
svacer server import  
    svacer server import
--user <user>  
        --user <user>  
--password <pwd>  
        --password <pwd>  
--host <host>  
        --host <host>  
--port <port>  
        --port <port>  
--grpc <grpc port>  
        --grpc <grpc port>  
--project <project name or id>  
        --project <project name or id>  
--branch <branch name or id>  
        --branch <branch name or id>  
--name <new name for snapshot>
        --name <new name for snapshot>
[--force]
        [--force]
<input file name>
        <input file name>
 
Опция '''--force''' создаст проект и ветку, если их не было на сервере.


Опция --force создаст проект и ветку, если их не было на сервере.
=== Перенос Svacer с одного сервера на другой ===


        4.5 Перенос Svacer с одного сервера на другой
# Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]].
    1. Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе Создание и восстановление резервной копии.
# Перенесите созданные файлы резервных копий на нужный сервер
    2. Перенесите созданные файлы резервных копий на нужный сервер
# Восстановите данные из резервной копии на новом сервере
    3. Восстановите данные из резервной копии на новом сервере

Revision as of 14:04, 12 January 2023

Миграция

Миграция со старого сервера

В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:

  1. Экспорт информации со старого сервера.
  2. Импорт данных в новый.

Для экспорта информации со старого Svace сервера используется утилита svace-migration.jar

   java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir>

Параметры, используемые при экспорте данных

Параметр Описание
<user> Имя пользователя на старом сервере
<password> Пароль пользователя на старом сервере
<path to svace> Путь к директории, где находится Svace
<path server dir> Директория, из которой запущен старый сервер
<path to output dir> Директория, в которую будут записаны экспортируемые данные

Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся. При экспорте утилита svace-migration.jar извлекает:

  • все снимки в виде *.svres;
  • информацию о размещении исходного кода;
  • сопутствующую информацию в директории старого сервера.

ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM:

   --add-opens java.base/java.lang.reflect=ALL-UNNAMED 
   --add-opens java.base/java.lang=ALL-UNNAMED 
   --add-opens java.base/java.io=ALL-UNNAMED 
   --add-opens java.base/java.util=ALL-UNNAMED 
   --add-opens java.base/java.util.concurrent=ALL-UNNAMED 
   --add-opens java.base/java.text=ALL-UNNAMED 
   --add-opens java.desktop/java.awt.font=ALL-UNNAMED

Для импорта экспортированных данных используется следующая команда:

   svacer migrate [--skip-dxr-errors] --distr <path to svace distr> --temp <path to temp folder> --store <intermediate store> <path to exported data>

Параметры, используемые при импорте данных

Параметр Описание
--skip-dxr-errors Опциональный параметр для игнорирования ошибок в DXR-данных. Рекомендуется к использованию
--distr Путь к дистрибутиву Svace
--temp Директория для хранения временных файлов в ходе конверсии
--store Путь к промежуточному хранилищу
<path to exported data> Путь к директории, в которую были экспортированы результаты

После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload:

   svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store>

Миграция между версиями Svacer

Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел Создание и восстановление резервной копии).

Ниже описаны существенные изменения при переходе на определенную версию с более старой

  • 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями
  • 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями.

Создание и восстановление резервной копии

Если PostgreSQL запущен в виде сервиса

Если PostgreSQL запущен в виде сервиса (т.е. не в докер-контейнере), то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:

   sudo su -l postgres
   pg_dump --clean -T tmp_diff* svacer_db > svacer.sql

где svacer_db — имя БД.

В результате дамп БД будет создан в файле svacer.sql

Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление

   sudo su -l postgres 
   psql -f svacer.sql svacer_db 

Если PostgreSQL запущен в docker-контейнере

Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду

   docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql

где:

  • svacer_postgres — имя docker-контейнера
  • postgres — имя пользователя, под учётной записью которого создана БД
  • svacer_db — имя БД

Для восстановления БД используйте команду

   cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db

Создание резервной копии svacer object store через command line API

Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)

   svacer server backup --user admin --password <password> --file <filename>.kvbak

В результате object store будет сохранен в файл <filename>.kvbak

Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.

   svacer server --pg <postgres_url> —store /home/svacer/new-store --load-from-backup <filename>.kvbak

Восстановление возможно только в пустой object store. То есть в данном примере директория /home/svacer/new-store должна быть пустой.

Создание резервной копии svacer object store в сервере PostgreSQL

Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является рекомендуемой стратегией по бэкапу object store.

Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.

Создание бэкапа:

   svacer server backup --user admin --password <password> --pg

Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout

   ID = 23 CREATE_TS = 2022-10-06T06:04:33Z 

Для печати списка существующих бэкапов используется команда:

   svacer server backup --user admin --password <password> --list-pg

Результат печатается в stdout и включает ID и время создания бэкапа

   2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info
   2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080
   2022-10-06T09:04:36.939+0300    info    Logged by user admin
   2022-10-06T09:04:36.941+0300    info    Backups:
   ID = 23 CREATE_TS = 2022-10-06T06:04:33Z

Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:

   svacer server --load-from-pg-backup=<id>

где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.

Для очистки старых бэкапов используется следующая команда:

   svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>

где <lower> и <upper> нижняя и верхняя граница ID бэкапов.

Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.

Создание резервной копии svacer object store вручную

Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.

Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:

  • ~/.cache/svacer — в OC Linux
  • %LocalAppData%\svacer — в ОС Windows

(например, С:\Users\myusername\AppData\Local\svacer)

При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:

  1. Перед запуском Svacer установить переменную окружения SVACER_OBJECT_STORE, например:
    export SVACER_OBJECT_STORE=/home/user/data/object_store
  2. При запуске Svacer передать путь к object store в параметре --store, например:
    svacer --store /home/user/data/object_store

При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной STORE в файле docker-compose.yml. Допустим, директория с object store была скопирована в /home/user/data/object_store. В таком случае параметры нужно указать следующим образом

   volumes:
     - /home/user/data:/data
   environment:
     - STORE=/data/object_store

Перенос снимков

Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса. Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.

Внимание: в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.

Перенос из веб интерфейса

Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:

SnapshotInfo window

либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):

CreateNewProject window

Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки

BranchMenu windows

Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели

Notifications window

А так же будет доступно в панели нотификаций

NotificationsClearAll window

Перенос из командной строки

Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке.

Экспорт снимков:

   svacer server export
       --user <user> 
       --password <pwd> 
       --host <host> 
       --port <port> 
       --grpc <grpc port> 
       --project <project name or id> 
       --branch <branch name or id> 
       --snapshot <snapshot name or id> 
       <output file name>

Импорт снимков:

   svacer server import
       --user <user> 
       --password <pwd> 
       --host <host> 
       --port <port> 
       --grpc <grpc port> 
       --project <project name or id> 
       --branch <branch name or id> 
       --name <new name for snapshot>
       [--force]
       <input file name>

Опция --force создаст проект и ветку, если их не было на сервере.

Перенос Svacer с одного сервера на другой

  1. Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе Создание и восстановление резервной копии.
  2. Перенесите созданные файлы резервных копий на нужный сервер
  3. Восстановите данные из резервной копии на новом сервере