Ошибка обновления базы данных SonarQube с 4.5.7 по 5.6.5

Я попытался обновить наш экземпляр SonarQube с 4.5.7 LTS до 5.6.5 LTS. Я следовал предоставленной документации по обновлению SonarQube. После просмотра [sonarserver]:9000/setup и запуска обновления БД. Обновление длилось чуть более 2 часов и вернулось с этим сообщением:

Upgrade Failed

Database connection cannot be established. Please check database status and JDBC settings.

При просмотре лога вижу такую ​​ошибку:

2017.02.16 13:18:43 ERROR web[o.s.s.d.m.DatabaseMigrator] Fail to execute database migration: org.sonar.db.version.v50.FeedFileSources
java.lang.IllegalStateException: Error during processing of row: [uuid=AVpHrbhU29-XDi5QdhtN,uuid=AVpHrbk629-XDi5Qdh0r,data=using System;

Я скопировал весь журнал обновления БД сюда: http://pastebin.com/p9CkYhrU

Я также попытался перезапустить SonarQube и снова попытаться обновить базу данных, но он работал в течение 5-10 минут и сообщал о том же результате.

Дополнительные детали:

Текущий SonarQube: 4.5.7 LTS

Новый SonarQube: 5.6.5 LTS

БД: MySQL 5.7.17

Операционная система: Windows Server 2012 R2

После неудачного обновления мы успешно вернулись к 4.5.7.

Ранее мы также обновили версию 4.3.1 до версии 4.5.7 LTS. Во время этого обновления мы переместили нашу базу данных SonarQube с MySQL 5.5 на 5.7.17, а затем обновили SonarQube до 4.5.7 LTS. Этап обновления длился два часа и завершился успешно.

Спасибо за любую помощь,

-Эдди


person EddieB    schedule 17.02.2017    source источник
comment
Похоже, вы столкнулись с другим вариантом ошибки обновления, связанной с FeedFileSources. См. здесь и здесь. Вы можете исследовать таблицы, упомянутые в ссылках, пытаясь найти какие-то необычные данные и исправить их. Поскольку это обновление между версиями LTS, вам также следует искать ответ в группах SonarQube Google или опубликовать подробный вопрос. В крайнем случае вам придется начать заново с пустой базой данных.   -  person Jeroen Heier    schedule 18.02.2017
comment
code также доступен   -  person Jeroen Heier    schedule 18.02.2017
comment
@JeroenHeier Спасибо! Я смог поработать над ошибкой и нашел еще несколько! Я опубликовал то, что я сделал, в качестве ответа.   -  person EddieB    schedule 22.02.2017


Ответы (1)


ОБНОВЛЕНИЕ 21.02.17

Я поставил тестовый экземпляр для этого обновления SonarQube на другом сервере. Я установил MySQL 5.7 и SonarQube 4.5.7 LTS, используя одни и те же данные резервного копирования. Во время обновления до SonarQube 5.6.5 LTS я получил ту же ошибку, что и раньше. Итак, я знал, что в этот момент я могу повторить ошибку. Я решил еще раз просмотреть это сообщение об ошибке и нашел его чуть ниже:

Caused by: java.sql.BatchUpdateException: Packet for query is too large         (6371233 > 4194304). You can change this value on the server by setting the         max_allowed_packet' variable.

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too     large (6371233 > 4194304). You can change this value on the server by setting     the `max_allowed_packet` variable.

Поэтому я пошел дальше и отредактировал переменную max_allowed_packet в файле my.ini. Сначала я изменил его с 4M на 8M и получил аналогичную ошибку. Затем я изменил переменную на 16M, и ошибка прошла при обновлении!

К сожалению, обновление БД продолжалось еще 11 часов и вернулось с другой ошибкой:

2017.02.21 02:48:13 ERROR web[o.s.s.d.m.DatabaseMigrator] Fail to execute database migration: org.sonar.db.version.v564.CleanUsurperRootComponents
java.lang.IllegalStateException: Error during processing of row: [id=62566,uuid=AVpc2I0gt4GsKrhSYYYQ]
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Application was streaming results when the connection failed. Consider raising value of 'net_write_timeout' on the server.
Caused by: java.net.SocketException: Connection reset

Я увеличил net_read_timeout в mysql с 60 до 1200. set net_write_timeout = 1200; Я перезапустил SonarQube, снова запустил обновление БД и избавился от ошибки. Обновление продолжилось, и я получил еще одну ошибку:

2017.02.21 09:57:05 ERROR web[o.s.s.d.m.PlatformDatabaseMigration] DB Migration or container restart failed. Process ended with an exception java.lang.IllegalStateException: Fail to load plugin Clirr [clirr]
Caused by: java.lang.NoClassDefFoundError: org/sonar/api/batch/maven/DependsUponMavenPlugin
Caused by: java.lang.ClassNotFoundException: org.sonar.api.batch.maven.DependsUponMavenPlugin

Похоже на ошибку плагина, поэтому я пошел дальше и посмотрел на этот отдельный плагин. Я нашел некоторую информацию о том, что плагин Clirr устарел, поэтому я удалил его из папки «Плагины», перезапустил SonarQube и столкнулся с другой ошибкой плагина (другой плагин). Я получил 6 или 7 таких ошибок и смог их исправить, либо удалив, либо заменив .jar в папке плагинов более новой совместимой версией.

Итак, после исправления плагина Java я перезапустил SonarQube, и он запустился нормально! Сейчас я запускаю SonarQube 5.6.5 LTS на своем сервере-песочнице. Следующим шагом будет возврат к версии 4.5.7 LTS и повторная попытка обновления, чтобы убедиться, что в будущем у меня будет успешное обновление рабочей среды.

person EddieB    schedule 21.02.2017
comment
Очень хороший отчет! Это действительно хорошая идея, прежде чем начинать обновление, чтобы просмотреть все плагины. Удалите устаревшее, а также обновите все остальные. Создайте также новую папку, скопируйте в нее новую версию SonarQube и скопируйте jar-файлы плагина из старой папки. Также переиндексируйте вашу базу данных после обновления. - person Jeroen Heier; 22.02.2017