В примечаниях к выпуску 7.90.5 объясняется, как служба доступа теперь работает в отдельной JVM.
При использовании базы данных дерби вся база данных копируется в $JFROG_HOME/artifactory/var/data/access/derby
.
Я вручную установил конфигурацию базы данных для службы доступа, в противном случае она попыталась открыть ту же самую базу данных, что и искусственный процесс JVM, но это не удалось (несколько JVM, обращающихся к одной базе данных derby, не разрешены). Вот system.yaml
:
shared:
database:
allowNonPostgresql: true
type: derby
driver: org.apache.derby.jdbc.EmbeddedDriver
url: jdbc:derby:/opt/jfrog/artifactory/var/data/artifactory/derby;create=true
user: artifactory
extraJavaOpts: -Xss256k -Dkeystore.pkcs12.keyProtectionAlgorithm=PBEWithHmacSHA256AndAES_256
artifactory:
port: 8081
tomcat:
connector:
maxThreads: 200
sendReasonPhrase: true
access:
http:
port: 8040
database:
type: derby
driver: org.apache.derby.jdbc.EmbeddedDriver
url: jdbc:derby:/opt/jfrog/artifactory/var/data/access/derby;create=true
tomcat:
connector:
maxThreads: 50
sendReasonPhrase: true
При запуске миграции применяются к новой копии базы данных. Этот процесс терпит неудачу.
Подробности от access-service.log
:
2024-08-01T02:15:30.606Z [jfac ] [INFO ] [fa1259ae7c93acf5] [licationContextInitializer:165] [main ] - Access (jfac) service initialization started. Version: 7.112.5 Revision: 81205900 PID: 14967 Home: /opt/jfrog/artifactory
2024-08-01T02:15:30.954Z [jfac ] [INFO ] [fa1259ae7c93acf5] [o.j.a.AccessApplication:55 ] [main ] - Starting AccessApplication v7.112.5 using Java 17.0.10 on ip-172-31-10-237 with PID 14967 (/opt/jfrog/artifactory/app/access/tomcat/webapps/access/WEB-INF/lib/access-application-7.112.5.jar started by artifactory in /)
2024-08-01T02:15:30.955Z [jfac ] [INFO ] [fa1259ae7c93acf5] [o.j.a.AccessApplication:632 ] [main ] - No active profile set, falling back to 1 default profile: "default"
2024-08-01T02:15:53.819Z [jfac ] [ERROR] [fa1259ae7c93acf5] [o.f.c.i.c.DbMigrate:294 ] [main ] - Migration of schema "APP" to version 7.42 - Alter and remove index access tokens table failed! Changes successfully rolled back.
2024-08-01T02:15:53.839Z [jfac ] [ERROR] [fa1259ae7c93acf5] [.s.d.u.AccessJdbcHelperImpl:81] [main ] - Could not initialize database:
org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V7_42__Alter_and_remove_index_access_tokens_table.sql failed
----------------------------------------------------------------------
SQL State : XSAI2
Error Code : 20000
Message : The conglomerate (5,217) requested does not exist.
Location : db/derby/migration/V7_42__Alter_and_remove_index_access_tokens_table.sql (/file:/opt/jfrog/artifactory/app/access/tomcat/webapps/access/WEB-INF/lib/access-server-core-7.112.5.jar!/db/derby/migration/V7_42__Alter_and_remove_index_access_tokens_table.sql)
Line : 1
Statement : DROP INDEX access_username_idx
IIUC индекс, который пытается удалить миграция, не существует.
Поскольку это обновление, сценарий запуска Artifactory 7.90.5 должен идентифицировать базу данных Derby и скопировать ее в новое место, доступное для службы Access.
Судя по опубликованным вами журналам, похоже, что Access пытается запуститься с пустой базой данных.
/opt/jfrog/artifactory/var/data/access/derby
create=true
из shared.database.url
и shared.access.url
.Другой вариант — скопировать содержимое из /opt/jfrog/artifactory/var/data/artifactory/derby
в /opt/jfrog/artifactory/var/data/access/derby
перед запуском Artifactory.
Если проблема не устранена, укажите тип установки, точную команду, использованную для запуска Artifactory, и версию Artifactory, которая у вас была до обновления.
Спасибо!
В рамках Artifactory 7.77 мы обновили версию NodeJS до 20.x. Debian 9 не может запускать NodeJS 20.x (и он не является частью ОС, поддерживаемой Artifactory ), поэтому даже если вам удастся завершить обновление, служба Frontend не запустится. Обновление до версии 7.71 и ниже должно быть возможным до тех пор, пока вы не сможете обновить ОС (рекомендуется также перейти на базу данных PostgreSQL)
Спасибо! Да, я столкнулся с этим, как только запустил службу доступа (мне удалось воссоздать базу данных с нуля и переместить данные). Тем временем я обновил Debian до 10, так что он снова доступен. Спасибо за вашу поддержку!
Похоже, база данных derby повреждена, возможно, из-за нехватки места на диске во время обновления.
Я использовал ij
для подключения к нему и запускал select count(*) from TABLE
для каждой таблицы. Это не удалось для двух таблиц (с остальными сработало):
ij> select count(*) from ACCESS_PERMISSION_ACTION;
ERROR XSAI2: The conglomerate (3,441) requested does not exist.
ij> select count(*) from ACCESS_TOKENS;
ERROR XSAI2: The conglomerate (5,217) requested does not exist.
ij> select count(*) from BINARIES;
1
-----------
252130
1 row selected
Эта ошибка, похоже, указывает на поврежденную базу данных (Ошибка Apache derby db «Запрошенный конгломерат (1.744) не существует»).
Спасибо за ваш ответ! Скрипт запуска правильно создал копию базы данных, она не пустая. Я попробовал еще раз, удалив
access/derby
и позволив сценарию создать новую копию, получил ту же ошибку. Затем я удалилaccess/derby
и создал копию вручную (sudo rsync -a ./derby ./access
), также получил ту же ошибку. Система — Debian 9 (работает над обновлением), артефакт установлен с помощью apt изjfrog.bintray.com/artifactory-debs
, запускается с помощью systemd (artifactoryManage.sh start
). Предыдущая версия была 7.21.12.