DB migration for upgrade to 8.9.7 LTS fails: Make uuid column not nullable for PROJECT_MEASURES failed

We are trying to upgrade Sonarqube from 7.9.4 to 8.9.7. We are using SQL Server for our database.

Our test environment database was upgrade succesfully, but our production database (which we restored to our test environment) gives the following error during the DB migration:

2022.03.30 10:10:48 ERROR web[][DbMigrations] #3435 'Make 'uuid' column not nullable for 'PROJECT_MEASURES'': failure | time=0ms
2022.03.30 10:10:48 ERROR web[][DbMigrations] Executed DB migrations: failure | time=59720ms
2022.03.30 10:10:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration failed | time=59814ms
2022.03.30 10:10:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration ended with an exception
org.sonar.server.platform.db.migration.step.MigrationStepExecutionException: Execution of migration step #3435 'Make 'uuid' column not nullable for 'PROJECT_MEASURES'' failed
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:79)
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:67)
at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:405)
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:52)
at org.sonar.server.platform.db.migration.engine.MigrationEngineImpl.execute(MigrationEngineImpl.java:68)
at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doUpgradeDb(DatabaseMigrationImpl.java:105)
at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doDatabaseMigration(DatabaseMigrationImpl.java:80)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalStateException: Fail to execute ALTER TABLE project_measures ALTER COLUMN uuid NVARCHAR (40) NOT NULL
at org.sonar.server.platform.db.migration.step.DdlChange$ContextImpl.execute(DdlChange.java:106)
at org.sonar.server.platform.db.migration.step.DdlChange$ContextImpl.execute(DdlChange.java:86)
at org.sonar.server.platform.db.migration.step.DdlChange$ContextImpl.execute(DdlChange.java:128)
at org.sonar.server.platform.db.migration.version.v84.common.MakeUuidColumnNotNullable.execute(MakeUuidColumnNotNullable.java:47)
at org.sonar.server.platform.db.migration.step.DdlChange.execute(DdlChange.java:45)
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:75)
... 9 common frames omitted
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The index 'tech_index_uuid' is dependent on column 'uuid'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:872)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:767)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7418)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3274)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:247)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:222)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.execute(SQLServerStatement.java:743)
at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:194)
at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:194)
at jdk.internal.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.sonar.db.profiling.InvocationUtils.invokeQuietly(InvocationUtils.java:34)
at org.sonar.db.profiling.ProfilingStatementHandler.invoke(ProfilingStatementHandler.java:41)
at com.sun.proxy.$Proxy16.execute(Unknown Source)
at org.sonar.server.platform.db.migration.step.DdlChange$ContextImpl.execute(DdlChange.java:91)
... 14 common frames omitted

We can see from the logs that the index ‘tech_index_uuid’ is created, the new column ‘uuid’ is being filled, and then when the migration is trying to make the new column not nullable, the exception is thrown because the index is dependant upon the column.

Any help would be greatly appreciated.

Hi,

Welcome to the community!

Can you share the full migration log?

 
Thx,
Ann

Here’s the full log
web.log (541.0 KB)

Hi,

Thanks for the log. I was hoping it would shed some additional light, but it didn’t.

I’ve poked around, and I’m skeptical that’s one of our indexes. You should drop it and restart the migration.

 
HTH,
Ann

Good morning,

After further investigation it seems to be an issue regarding SQL permissions.
When the default schema (dbo) is not set for a user/group that is executing the migration, it fails on this step.

Restarting the migration does not work, it tries to initiate a complete new SonarQube instance within the database and fails immediatly. So thankfully the fix above solved the issue.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.